Vba 使用工作表变量获取工作表属性

Vba 使用工作表变量获取工作表属性,vba,excel,Vba,Excel,我很抱歉,如果这已经得到答复,但我没有运气在这个搜索 当工作表被变量引用时,访问工作表属性的最佳方式是什么 这会引发编译错误: Sub Tst1(Wk As Worksheet) Debug.Print Wk.pbOK End Sub 这个办法行得通,但有更好的办法吗?谢谢 Sub Tst2(Wk As Object) Debug.Print Wk.pbOK End Sub 我要说的是将两者结合起来。第一种方法的优点是它保留了函数的特性。第二种方法的优点是有效。:) 尝试将参

我很抱歉,如果这已经得到答复,但我没有运气在这个搜索

当工作表被变量引用时,访问工作表属性的最佳方式是什么

这会引发编译错误:

Sub Tst1(Wk As Worksheet)
    Debug.Print Wk.pbOK
End Sub
这个办法行得通,但有更好的办法吗?谢谢

Sub Tst2(Wk As Object)
    Debug.Print Wk.pbOK
End Sub

我要说的是将两者结合起来。第一种方法的优点是它保留了函数的特性。第二种方法的优点是有效。:)

尝试将参数保留为工作表,但在询问属性之前将其强制转换为对象(使用temp变量,它只需要4字节指针/副本):

Public Sub Test1(Wk As Worksheet)
    Dim tempObj As Object
    Set tempObj = Wk
    Debug.Print tempObj.pbOk
End Sub


我知道这应该是一个答案,而不是一个问题,但有人能告诉我为什么VBA似乎没有
CObj()
,所以工作表可以在没有temp变量的情况下直接强制转换吗?我本来会用的,但没人认出。可能只有VB?

通过KazJaw的提示,您发现,如果满足以下条件,您可以使其编译无问题:

Sub Tst1(Wk As Worksheet)
    Debug.Print Thisworkbook.Worksheets(Wk.Name).pbOK
End Sub

我能想到的这种方法的唯一用处是存储宏已处理的状态(或将工作表标记为在会话中已处理),因为重新打开工作簿后不会保存值。

什么是
pbOK
?我是否遗漏了什么?如果第二个例子有效,那有什么错?为什么要搜索其他解决方案?没有像
pbOK
这样的工作表属性(听起来像表单组件?)。您传递的实际对象类型是什么?添加
Debug.Print TypeName()
以进行检查。@PatricK,您可以在任何工作表模块中创建自己的属性声明公共变量。@KazJaw,谢谢您的提示,但这样做不会编译,除非使用
对象
。发现此方法无法在工作簿重新打开后保存更改@DaveU你可以这样做:
Debug.Print Thisworkbook.Worksheets(Wk.Name).pbOK
我想我应该把我的问题(我的第一个问题)的措辞更清楚些,对不起。我的项目中的所有工作表都有不同的要求,因此我使用自定义属性来标记需要执行的各种操作,例如保护、可见性等。