Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Function VBA:从函数返回工作表对象引用_Function_Vba_Reference_Module - Fatal编程技术网

Function VBA:从函数返回工作表对象引用

Function VBA:从函数返回工作表对象引用,function,vba,reference,module,Function,Vba,Reference,Module,如何返回工作表对象引用?我一直在仔细阅读各种各样的谷歌搜索结果 例如,我有一个这样的功能代码。W图纸已变暗: Public wSheet As Worksheet ... Set wSheet = ActiveWorkbook.Worksheets("ExampleSheet") wSheet.Range("A1").Value = "Hello" 但是,我希望wSheet现在调用一个模块,将其提供给正确的引用。大概是这样的: Public wSheet As Worksheet ... Se

如何返回工作表对象引用?我一直在仔细阅读各种各样的谷歌搜索结果

例如,我有一个这样的功能代码。W图纸已变暗:

Public wSheet As Worksheet
...
Set wSheet = ActiveWorkbook.Worksheets("ExampleSheet")
wSheet.Range("A1").Value = "Hello"
但是,我希望wSheet现在调用一个模块,将其提供给正确的引用。大概是这样的:

Public wSheet As Worksheet
...
Set wSheet = myModule.get_ExampleSheet
wSheet.Range("A1").Value = "Hello"
然后在模块myModule中有一个函数

Function get_ExampleSheet() As Worksheets
    get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet")
End Function
我尝试的每件事都会给我带来各种运行时错误。有没有办法让这一切顺利进行


谢谢,前进

要从函数返回对象,需要提供
Set
关键字:

Function get_ExampleSheet() As Worksheet
    Set get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet")
End Function

您在函数中返回了错误类型的对象

Function get_ExampleSheet() As Worksheets
    get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet")
End Function
这目前有几个错误

Function get_ExampleSheet() As Worksheet
   Set get_ExampleSheet = ActiveWorkbook.Sheets("Sheet1")
End Function
注一更改:

  • 将类型返回到
    工作表
    (您正在尝试将
    工作表
    类型的变量wSheet设置为
    工作表
    类型变量)
  • 添加了
    set
    关键字
  • 更改为
    .Worksheets
    .Sheets
    以返回您感兴趣的特定工作表
  • 一旦目标单元格为空,宏应停止

    在代码的常规部分

        Dim issues_sheet As Worksheet
        Set issues_sheet = create_working_sheet("Issues")
        issues_sheet.Range("A1").Value = "bssssbb"
    
    函数可以是

    Function create_working_sheet(sheet_name As String) As Worksheet
    
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = sheet_name Then
            exists = True
        End If
    Next i
    
    If Not exists Then
        Worksheets.Add.Name = sheet_name
        'if we want it at the end
        'Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheet_name
    End If
    Set create_working_sheet = ThisWorkbook.Sheets(sheet_name)
    End Function
    

    您可以在此处找到使用VBA设置工作表的方法的完整概述:

    问题是函数(在您的问题和我编辑它之前的回答中)将
    工作表作为返回类型-这是
    工作表
    对象的集合!因此,请删除
    s
    ,以便返回
    工作表
    (并且仍然使用
    设置
    关键字)!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。
    Function create_working_sheet(sheet_name As String) As Worksheet
    
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = sheet_name Then
            exists = True
        End If
    Next i
    
    If Not exists Then
        Worksheets.Add.Name = sheet_name
        'if we want it at the end
        'Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheet_name
    End If
    Set create_working_sheet = ThisWorkbook.Sheets(sheet_name)
    End Function