【问题标题】:Global Workbook reference!全球工作簿参考!
【发布时间】:2011-01-05 16:55:01
【问题描述】:

我正在创建一个相当大的宏,目前它需要 5 个工作簿(可能会随着时间的推移而增加)和多个工作表,并将它们组合成一个工作簿。

现在,我认为完成我必须做的所有各种任务的最简单方法是声明对工作簿的全局引用。但这似乎不起作用。

所以,我将其声明为:

Public E1_workbook          As Workbook

然后当宏启动时,它会实例化它。

   Private Sub Begin()

      ...
      Set E1_workbook = Workbooks.Open(Filename:="Workbook name")

      ...
      'Do other stuff
      ...

      Whatever

      ...

      'Close workbooks and free up resources...

      ...

   End Sub

然后在另一个子程序中进一步向下,我尝试使用工作簿:

   private sub Whatever()

        E1_workbook.Worksheets("worksheet name").Select

但是这将失败,说明“工作表类的选择方法失败”

即使我可以将上面“Whatever()”子中的确切行复制到“Begin()”子中,它也可以正常工作。

为什么?

TIA

(为了保护无辜,工作簿和工作表的名称已更改)

【问题讨论】:

    标签: vba excel-2007


    【解决方案1】:

    我假设您在调用whatever 函数之前打开了几个工作簿。您只能在活动工作簿中的可见工作表上调用Select函数。

    这意味着您需要在E1_workbook.Worksheets("worksheet name").Select 前面添加E1_workbook.Activate,如果工作表“工作表名称”是隐藏工作表,您还需要使用E1_workbook.Worksheets("worksheet name").Visible = xlSheetVisible 使其可见,您可以通过设置再次隐藏工作表xlSheetHidden的值

    顺便说一句,我建议您将所有工作簿放在一个集合或一个数组中,并将这个数组传递给任何函数,而不是使用公共全局变量。一种方法是:

    Private Sub begin()
        Dim srcWorkbooks As Collection
    
        Set srcWorkbooks = New Collection
        srcWorkbooks.Add workbooks.Open("fileName1")
        srcWorkbooks.Add workbooks.Open("fileName2")
    
        whatever srcWorkbooks
    End Sub
    
    Private Sub whatever(srcWorkbooks As Collection)
        Dim srcWorkbook As Workbook
    
        For Each srcWorkbook In srcWorkbooks
            srcWorkbook.Activate
            srcWorkbook.Sheets(1).Select
        Next srcWorkbook
    
        closeWorkbooks srcWorkbooks
    End Sub
    
    Private Sub closeWorkbooks(srcWorkbooks As Collection)
        Dim i As Integer
    
        For i = srcWorkbooks.Count To 1 Step -1
            srcWorkbooks(i).Close
            srcWorkbooks.Remove i
        Next i
    
        Set srcWorkbooks = Nothing
    End Sub
    

    【讨论】:

    • 感谢 Marg 抽出时间回复 - 我刚刚发现我是个白痴。在我尝试引用工作表之前应该激活工作簿。我想更多的咖啡。很抱歉浪费您的时间!
    • 哦,关于收藏的好主意 - 我会用它。 Ta :-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多