如何在VBA中打开和激活另一个工作簿?

时间:2018-07-23 15:43:56

标签: excel vba excel-vba

我正在创建一个宏,该宏需要在1个文件(称为“ Masterfile”)中运行,它将打开并在另一个文件(“ SurveyReport”)上执行该宏,然后在消息框中显示“完成!”。

当我手动打开并执行该文件时,必须在SurveyReport文件上执行的代码工作正常。我需要从MasterFile打开SurveyReport的代码似乎也能正常工作,我在下面运行时没有任何问题:

    Sub PivotTable()
    '
    ' PivotTable Macro

    Dim MasterFile As String

    MasterFile = ActiveWorkbook.Name

    Dim SurveyReport As String

    SurveyReport = Application.GetOpenFilename("Excel files (*.xlsx), *xlsx", 1, "Please select the Survey Create Report file", , False)

    Workbooks.Open (SurveyReport)


    End Sub

但是,当我尝试激活SurveyReport文件以便可以开始在其中执行宏时,出现“下标超出范围”错误。我已尝试在上述代码块之后以及在SurveyReport文件中执行的代码之前使用以下代码:

    Windows(SurveyReport).Activate

这行不通,没行:

    ThisWorkbook.Activate

...仅具有激活MasterFile的作用。

SurveyReport文件是一个.xlsx文件。我尝试将其另存为.xls文件并修改代码,但没有任何乐趣。 我也尝试过直接将文件名传递给它(即Windows(“ filename.xlsx”)。Activate),同样的问题。

2 个答案:

答案 0 :(得分:2)

07-23 21:23:22.000 6967-7293/com.androidhacks7.apprtc_android E/libjingle: (port.cc:371): Jingle:Port[audio:1:0::Net[wlan0:192.168.1.0/24:Unknown]]: Received STUN request with bad local username SkU40kVEtFhhOb5s from 192.168.1.146:52840 07-23 21:23:22.000 6967-7293/com.androidhacks7.apprtc_android I/libjingle: (port.cc:623): Jingle:Port[audio:1:0::Net[wlan0:192.168.1.0/24:Unknown]]: Sending STUN binding error: reason=Unauthorized to 192.168.1.146:52840 07-23 21:23:22.000 6967-7293/com.androidhacks7.apprtc_android E/libjingle: (port.cc:393): Jingle:Port[audio:1:0::Net[wlan0:192.168.1.0/24:Unknown]]: Received STUN binding error: class=4 number=1 reason='Unauthorized' from 192.168.1.146:52840 07-23 21:23:22.048 6967-7293/com.androidhacks7.apprtc_android I/libjingle: (port.cc:1262): Jingle:Conn[0xb87380f0:audio:ViJICO7Z:1:0:local:udp:192.168.1.146:52840->zwMRKbEM:1:1686052607:stun:udp:125.99.173.42:52840|C--W|7241540810645061118|-]: Sent STUN ping, id=69646f336c34554738333256, use_candidate=0 07-23 21:23:22.097 6967-7293/com.androidhacks7.apprtc_android I/libjingle: (port.cc:1262): Jingle:Conn[0xb8173b98:audio:ViJICO7Z:1:0:local:udp:192.168.1.146:52840->4caWssAt:1:1686052607:stun:udp:157.34.21.231:49034|C--I|7241540810645061118|-]: Sent STUN ping, id=4e4130384947677142487556, use_candidate=0 就像锡盒上所说的那样-代码运行时碰巧处于活动状态的工作簿。
ActiveWorkbook总是 代码所在的工作簿。

您可以 SET 引用特定的工作簿,而不仅仅是每次都使用它们的名称。名称可以更改,也可以引用错误的对象。...假设您有一个叫Darren的朋友。每次您提及他时,您都会提及他的名字。不认识Darren的人并不知道Darren是您所谈论的世界上所有线索中的一个线索。现在,假设您的口袋里有一个达伦的小复制品……不,那是一个可怕的解剖学-它不是复制品,而是对真正的达伦的引用……无论如何,我离题了。

此代码设置了对工作簿的引用,然后您可以在要引用正确的工作簿时随时使用该引用:

ThisWorkbook

编辑:当然,如果在选择文件时按“取消”,则Sub PivotTable() Dim MasterFile As Workbook Dim SurveyRptName As String Dim SurveyReport As Workbook Set MasterFile = ThisWorkbook ' SurveyRptName = Application.GetOpenFilename("Excel files (*.xlsx), *xlsx", 1, _ "Please select the Survey Create Report file", , False) If SurveyRptName <> "False" Then Set SurveyReport = Workbooks.Open(SurveyRptName) End If SurveyReport.Activate 'You don't need this line. It doesn't matter if 'the workbook is active, the code knows which one 'you're talking about in the next line. MsgBox "This is " & SurveyReport.Name & _ " containing " & SurveyReport.Worksheets.Count & " sheets." & vbCr & _ "The value in cell A1 of the first sheet is " & _ SurveyReport.Worksheets(1).Range("A1") End Sub 代码后面的行将没有引用可用,您将获得{ {1}}-如果您没有成功打开“调查报告”文件,最好不要运行代码的底部。

答案 1 :(得分:1)

答案的一部分缺失-是他试图在变量为STRING时调用对象的方法-open命令和后续命令将给您提供OBJECT-该对象具有诸如.Activate之类的属性和方法。 STRING类型没有这样的方法或属性(可以确定-可能还有其他方法或属性)。 Darren提供的解决方案通过将他的SurveyReport声明为Workbook类型(Excel的对象)来解决此问题。