- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个宏,我需要在 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 文件以便开始执行其中的宏时,我收到“下标超出范围”错误。我尝试在上述 block 之后和在 SurveyReport 文件中执行的代码之前使用以下代码:
Windows(SurveyReport).Activate
这不起作用,没有做到:
ThisWorkbook.Activate
...仅具有激活 MasterFile 的效果。
SurveyReport 文件是一个 .xlsx 文件。我尝试将其保存为 .xls 文件并修改代码,但没有任何乐趣。我还尝试直接向其传递文件名(即 Windows("filename.xlsx").Activate),同样的问题。
最佳答案
ActiveWorkbook
正如其表面所述 - 代码运行时恰好处于事件状态的工作簿。ThisWorkbook
始终是代码所在的工作簿。
您可以设置对特定工作簿的引用,而不仅仅是每次都使用它们的名称。名称可能会更改,或引用错误的对象......假设您有一个叫达伦的 friend 。每次你提到他,你都会提到他的名字。不认识达伦的人不知道你所说的世界上所有可用的达伦是哪一个。现在想象一下你的口袋里有一个达伦的小复制品......不,这是一个可怕的类比 - 它不会是一个复制品,它将是对真正的达伦的引用......无论如何,我离题了。
此代码设置对工作簿的引用,然后您可以在任何时候想要引用正确的工作簿时使用该引用:
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
编辑:当然,如果您在选择文件时按“取消”,则 IF...THEN
代码后面的行将不会有可使用的引用并且您将得到一个对象变量或未设置 block 变量
- 如果您尚未成功打开调查报告文件,最好不要运行底部的代码。
关于vba - 如何在VBA中打开并激活另一个工作簿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51482666/
我是一名优秀的程序员,十分优秀!