如果我想要对象本身,而不是它的属性/方法,我如何引用我在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
是一个常见的词)...
<小时/> 更新:澄清一下,我正在考虑使用python语法中的
with ... as handle
句柄,而不是面向对象的this
关键字
答案 0 :(得分:4)
试试这个
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
修改强>:
你有关于“这个”不存在的任何信息吗? - deathApril 19分钟前
this
基本上是来自C#的关键字,它指的是该类的当前实例。 VB中this
的等效值为Me
。
Me
关键字提供了一种方法来引用代码当前正在执行的类或结构的特定实例。例如,在Userform中,您可以使用
Me.textBox1.Text = "Blah Blah"
在VBA中,Me
也可用于thisworkbook
。例如,如果您将此代码粘贴到ThisWorkbook
代码区域中,那么它将为您提供工作簿的名称
Sub Sample()
Debug.Print Me.Name
End Sub
同样,当您从图纸代码区域运行上述代码时,您将获得图纸名称。
HTH
答案 1 :(得分:4)
首先不使用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击键。)
答案 2 :(得分:1)
使用.Cells.Parent
。这仅适用于工作表,但对于其他一些对象也有类似的内容(对于可以使用的工作簿.Sheets.Parent
)
With ThisWorkbook.Sheets("MySheet")
Call MySub(.Cells.Parent)
.Range(...).Value2 = 1
...
End With