ビジネスユニットは、各月の会社に毎月の財務情報を提出していません。複数のビジネスユニットから財務データを取り込むVBAマクロを開発する。
-
アプローチは、各ビジネスユニットの情報を統合MASTERブックを作成します。各ビジネスユニットは、独自のタブ(例: "1120"、 "1130"、 "1210")でMASTERブック( "
Target_workbook
")に表示されていることを確認してください。 - ビジネス( 『
Source_Workbook
「」Source_Path
『)月次財務報告に対応見つける単位タブ(』arr
』) - 使用アレイ情報
- コピーしてMASTERワークブック(「
Target_workbook
」)と、対応するビジネス・ユニットのタブに財務情報を貼り付け(businessUnit
)
CODE
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
は、 "変数またはWithブロック変数が設定されていないオブジェクト"。これはなぜですか? arr(i)がバリアント/文字列なので、それはありますか? - コード改善のための他の提案はありますか?
同じエラーメッセージのある何百もの既存の投稿のどれもあなたを助けませんでしたか?私はこの正確な問題(ここでの答えが提供するのと同じ解決策)を何度も見たことがあることを知っています。ここに新しい質問を投稿する前にいくつかの基本的な調査をしてください。あなたが含まれている**正確な**エラーメッセージで検索するたくさんの検索結果を読むことができます。 ** Related ** list === >>>の右側には既に10件あります。これは、あなたがあなたの投稿を書いているときに、検索する必要がなくても潜在的重複として示唆されています。 –