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

10

我应该如何返回工作表对象引用?我已经通过各种谷歌搜索,但都没有结果。

例如,我有一个像这样的可以运行的代码。 wSheet已被声明:

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

我尝试的每个方法都给我各种不同的运行时错误。有没有办法让它工作?

先感谢了!

5个回答

17

你的函数返回了错误类型的对象。

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

注意我所做的更改:

  1. 将返回类型更改为Worksheet(您试图将类型为Worksheet的变量wSheet设置为Worksheets类型变量)
  2. 添加set关键字
  3. .Worksheets更改为.Sheets以返回您感兴趣的特定工作表

2
Sub Lookup()
Dim state As Variant
Dim PodName As Variant
Set state = ThisWorkbook.Worksheets("Sheet1").Range("E:E")
Sheets("Sheet1").Activate
PodName = WorksheetFunction.VLookup(state, Range("A1:C55"), 2, False)
ThisWorkbook.Worksheets("Sheet1").Range("F:F") = PodName
End Sub

一旦目标单元格为空,宏应该停止


1

http://excelmacromastery.com/Blog/index.php/the-complete-guide-to-worksheets-in-excel-vba/

在你代码的常规部分中。
    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

1
为了从函数中返回一个对象,你需要使用 Set 关键字:
Function get_ExampleSheet() As Worksheet
    Set get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet")
End Function

问题在于函数(在您的问题和我编辑之前的答案中)的返回类型为WorksheetS - 这是一个Worksheet对象的集合!因此,删除s,以便返回一个Worksheet(仍然使用Set关键字)! - Peter Albert

-1

虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Tunaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接