Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA With obj-如何在不命名的情况下引用对象内部的obj?_Vba_Excel - Fatal编程技术网

VBA With obj-如何在不命名的情况下引用对象内部的obj?

VBA With obj-如何在不命名的情况下引用对象内部的obj?,vba,excel,Vba,Excel,例如,如果我在With块中,该块正在引用我要为函数调用引用的对象,那么我必须按名称引用该对象,还是可以使用“this”、“me”引用 我在网上做了一个搜索,但在VBA中找不到太多关于它的信息 Dim shExport As Worksheet With shExport ....... ....... 'works as expected GetData(shExport) 'but how can this be achieved without

例如,如果我在With块中,该块正在引用我要为函数调用引用的对象,那么我必须按名称引用该对象,还是可以使用“this”、“me”引用

我在网上做了一个搜索,但在VBA中找不到太多关于它的信息

Dim shExport As Worksheet

With shExport
    .......
    .......
    'works as expected 
    GetData(shExport)

    'but how can this be achieved without naming it
    GetData(this)
    GetData(me)
    GetData()
    ........
End With



  Function GetData(sh As Worksheet) As Integer
   .....
   .....
   End Function

除了直接调用对象(也可以是look:)之外,无法引用该对象

您可以这样一般地调用工作表集合:

ActiveWorkbook.Worksheets(“Sheet1”)
ActiveWorkbook.Sheets(1)


关于with块-可以在其内部使用点来引用对象的子元素/字段,但是您不能将点
作为参数发送。

您可以指定支持
.Parent
属性的对象属性,以获取对该对象的引用。例如:

With shExport

    GetData(.Cells.Parent)

End With

你是说只使用GetData(.)?真的吗?我想引用被引用的对象,而不是它的子对象你不能这样做。。。如果你能找到一条路,请在这里发帖。但是10年的vb6/vba/vb.net教会了我这是做不到的。具体来说,你可以参考工作表集合
ActiveWorkbook.Worksheets(“Sheet1”)
,但是我已经有了一个工作表变量,在上面的代码中,我可以使用它来调用函数,但是因为我处于一个与之相关的环境中,所以我引用了该对象,必须有一个me或THIS,它可以使用我当前所在的对象。虽然这在技术上是对问题的正确回答,但与直接引用对象相比,这并不是一个更好的选择。当然,它更好,这意味着代码可以重用,而无需重新键入所有变量名。在一个以“with shname”开头的大文件中,只需在开始时更改它就很有意义,而且不需要寻找其他引用,因为Microsoft没有费心添加这个Self对象,只需编写refSelf或varSelf=.Cells.Parent,然后将其清除给其他对象即可maintainers@Degustaf:我同意。这似乎是一个相当迂回的途径,以获得一个对象的引用,你已经通过名称。无论如何,谢谢你认识到我回答了OP的问题。