我在这里失去理智,我很感激帮助了解正在发生的事情。
我正在编写一个宏来提示用户打开数据文件,然后打开一个报告来填充数据。宏是通过第三个xlsm工作簿中的ActiveX按钮启动的(就像我所有的其他宏一样)。
我正在使用2个单独的FileDialog对象执行此操作。一旦我打开工作簿并将其分配给变量,我就将ByVal传递给一个应该完成工作的子工具。 sub中的第一步是为两个工作簿分配工作表变量。第一个工作表变量分配正确,但第二个工作表变量不断给我" RTE 438 - 对象不支持此属性或方法"。
我正在编写这个基于我之前写的宏,它有一个类似的开放2个工作簿(但有一个FileDialog对象)的流程,将它们传递给子,然后对它们进行操作。
我知道我的工作簿不是问题,因为当我加载当前的报表/数据工作簿时,我的旧宏工作。我还尝试在我当前的宏中打开2个测试工作簿,它仍然失败并显示与以前相同的消息。代码中正在发生一些事情但我现在还没有任何线索,我已经在这2天了。到目前为止,我当前的宏基本上是旧版本的复制/粘贴,无论如何都可以。
我尝试过的随机内容:
这里的表格上的代码与button.click()
相关联 Dim data_Path As String, report_Path As String
Dim getData As FileDialog
Dim getReport As FileDialog
Dim Data_wb As Workbook
Dim Report_wb As Workbook
'Prompt User open data file
Set getData = Application.FileDialog(msoFileDialogOpen)
With getData
.Title = "Select the new data file."
.Filters.Clear
.Filters.Add "Files", "*.xlsx; *.csv", 1
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
Exit Sub
Else
data_Path = .SelectedItems(1)
End If
End With
'Set data workbook variable
Set Data_wb = Workbooks.Open(data_Path)
'Prompt user to open Report
Set getReport = Application.FileDialog(msoFileDialogOpen)
With getReport
.Title = "Select the destination report."
.Filters.Clear
.Filters.Add "Files", "*.xlsx; *.csv", 1
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
Exit Sub
Else
report_Path = .SelectedItems(1)
End If
End With
Set Report_wb = Workbooks.Open(report_Path)
Call report_update(Data_wb, Report_wb)
以下是report_update sub的代码:
Dim datash As Worksheet
Dim reportsh As Worksheet
Dim mydatawb As Workbook
Dim myreportwb As Workbook
sub report_update(ByVal mydatawb as Workbook, ByVal myreportwb as Workbook)
set datash = mydatawb.Worksheets(1)
set reportsh = myreportwb.Worksheets(1)
设置datash工作正常,但Set reportsh会引发运行时错误。
我在这里缺少什么?谢谢!
答案 0 :(得分:0)
我将我的Set工作表对象移动到我的子调用之前,并传递了工作表引用而不是工作簿。这似乎已经解决了,我只是不明白为什么我以前从未这样做过。