对象variables或未设置块variables

目的

业务部门每月向公司提交月度财务信息。 开发一个将从多个业务部门获取财务数据的VBAmacros。

APPROACH

  1. 创build合并每个业务单位信息的MASTER工作簿。 请确保每个业务单位都在自己的选项卡(例如“1120”,“1130”,“1210”,“ businessUnit ”)中显示在MASTER工作簿(“ Target_workbook ”)中
  2. 从每个业务单位选项卡(“ arr ”)创build一个数组
  3. 使用数组信息查找相应的每月财务报告(“ Source_Workbook ”,“ Source_Path ”)
  4. 将财务信息复制并粘贴到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 

问题

  1. Error @ Line: Target_Workbook.Sheets(arr(i)).Range("A5").PasteSpecial Paste:=xlPasteValues ,“Object Variable or With Block variable not set”。 这是为什么? 是因为arr(i)是变体/string吗?
  2. 任何其他的代码改进build议?

你已经设置了Target_Workbook,删除s。