【发布时间】:2016-09-27 21:45:20
【问题描述】:
目标
业务部门每月向公司提交每月财务信息。开发一个 VBA 宏,从多个业务部门提取财务数据。
方法
- 创建一个整合每个业务部门信息的 MASTER 工作簿。确保每个业务部门在 MASTER 工作簿(“
Target_workbook”)中都有自己的选项卡(例如“1120”、“1130”、“1210”;“businessUnit”) - 从每个业务部门选项卡创建一个数组 ("
arr") - 使用数组信息查找对应的月度财务报告(“
Source_Workbook”、“Source_Path”) - 将财务信息复制并粘贴到 MASTER 工作簿 ("
Target_workbook") 和相应业务部门的选项卡 (businessUnit) 中
代码
Sub getBusinessUnits()
Dim ws As Worksheet
Dim Target_Workbook As Workbook
Dim Source_Workbook As Workbook
Dim element As Variant
Dim col As New Collection
Dim Source_Path As String
Dim businessUnit As String
Dim businessName As String
'Set up collection to identify Business Unit Tabs and convert into array
For Each ws In ThisWorkbook.Worksheets
If IsNumeric(ws.Name) Then
col.Add ws.Name
Dim arr As Variant
End If
Next
arr = toArray(col) 'Collection converted into Array
'Loop through worksheets in array, open relative workbook, and pull in relevant data
For i = LBound(arr, 1) To UBound(arr, 1)
'assign business unit information to variables.
'Define workbook where we will paste copied information (target_workbook)
businessUnit = ThisWorkbook.Sheets(arr(i)).Activate
Set Target_Workbooks = ThisWorkbook.Sheets(arr(i))
businessName = ActiveSheet.Cells(2, 2)
'Open up the corresponding business unit's financial report, copy data
Source_Path = ThisWorkbook.Path & "\Business Unit Monthly Reporting Template_" & businessName & ".xlsx"
Set Source_Workbook = Workbooks.Open(Source_Path)
Source_Workbook.Sheets("Auth Expense Data Entry").Range("A1:H150").Copy
'Paste copied information from Source_Workbook into Target_workbook
Target_Workbook.Sheets(arr(i)).Range("A5").PasteSpecial Paste:=xlPasteValues '!!!ERROR: "Object Variable or With Block variable not set" !!!!
'Clear cache, close source_workbook
Application.CutCopyMode = False
Source_Workbook.Close (False)
End
Next
End Sub
'Function to convert collection into array
Function toArray(col As Collection)
Dim arr() As Variant
ReDim arr(1 To col.Count) As Variant
For i = 1 To col.Count
arr(i) = col(i)
Next
toArray = arr
End Function
问题
- 错误@行:
Target_Workbook.Sheets(arr(i)).Range("A5").PasteSpecial Paste:=xlPasteValues,“未设置对象变量或块变量”。为什么会这样? 是不是因为 arr(i) 是一个变体/字符串? - 还有其他代码改进建议吗?
【问题讨论】:
-
现有的数百个具有相同错误消息的帖子都没有帮助您吗?我知道我已经多次看到这个确切的问题(这里的答案提供了相同的解决方案)。在此处发布新问题之前,请先进行一些基础研究,其中包括阅读大量搜索结果,这些搜索结果会根据您所包含的exact 错误消息进行搜索。 相关列表右侧已经提到了 10 个 ===>>>,当您撰写帖子时,该网站建议您作为潜在重复项,甚至无需搜索。