如何用对象引用

问题描述 投票:0回答:4

如果我想要对象本身,而不是它的属性/方法,我如何引用我在

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
关键字

vba excel excel-2007
4个回答
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次击键。)


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

编辑

你有任何关于“这个”不存在的信息吗? – 四月 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


2
投票
.Cells.Parent

。这仅适用于工作表,但对于其他一些对象也有类似的东西(对于工作簿,您可以使用

.Sheets.Parent

With ThisWorkbook.Sheets("MySheet") Call MySub(.Cells.Parent) .Range(...).Value2 = 1 ... End With



0
投票

它并不漂亮,但它可以在 With..End With 块中工作。

With Thisworkbook.Sheets("MySheet") Call MySub(.Parent.Sheets(.Name)) End With

© www.soinside.com 2019 - 2024. All rights reserved.