如果我想要对象本身,而不是它的属性/方法,我如何引用我在
With
中使用的对象?
With ThisWorkbook.Sheets("MySheet")
Call MySub(ThisWorkbook.Sheets("MySheet")) ' works OK, but duplicated
Call MySub(this) ' does not works
.Range(...).Value2 = 1
...
End With
+ 这里正确的术语是什么?我什至不知道如何为此编写谷歌查询并获得一些有用的结果(因为
with
是一个常见词)...
with ... as handle
这样的句柄,而不是面向对象的this
关键字
首先不使用
with
怎么样?它使您的代码更具可读性,不再使用更多内存(因为 with
语句无论如何都必须分配临时变量),并且不那么混乱。
Dim WS as WorkSheet
WS = ThisWorkBook.Sheets("MySheet")
Call vymaz_obrazky(WS)
WS.Range(...).Value2 = 1
在上面的代码中,总成本是额外的一行代码(
DIM
语句),并且总共减少了 9 次击键。 (DIM
语句是19次击键,在三行中改为WS
是6次击键,但是您节省了with
(4)和重复(30),节省了大约9次击键。)
试试这个
Sub Sample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("MySheet")
With ws
MySub ws
'~~> Rest of the code
End With
End Sub
或
Sub Sample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("MySheet")
MySub ws
With ws
'~~> Rest of the code
End With
End Sub
编辑:
你有任何关于“这个”不存在的信息吗? – 四月 19 分钟前死亡
this
基本上是 C# 中的一个关键字,它指的是类的当前实例。 VB 中的 this
相当于 Me
。
Me
关键字提供了一种方法来引用代码“当前正在执行”的类或结构的特定实例。例如,在用户表单中,您可以使用
Me.textBox1.Text = "Blah Blah"
在 VBA 中,
Me
也可用于
thisworkbook
。例如,如果您将此代码粘贴到 ThisWorkbook
代码区域,那么它将为您提供工作簿的名称Sub Sample()
Debug.Print Me.Name
End Sub
同样,当您从工作表代码区域运行上述代码时,您将获得工作表名称。
HTH
.Cells.Parent
。这仅适用于工作表,但对于其他一些对象也有类似的东西(对于工作簿,您可以使用
.Sheets.Parent
)With ThisWorkbook.Sheets("MySheet")
Call MySub(.Cells.Parent)
.Range(...).Value2 = 1
...
End With
它并不漂亮,但它可以在 With..End With 块中工作。
With Thisworkbook.Sheets("MySheet")
Call MySub(.Parent.Sheets(.Name))
End With