2016-09-27 6 views
0

目的オブジェクト変数またはWithブロック変数が

ビジネスユニットは、各月の会社に毎月の財務情報を提出していません。複数のビジネスユニットから財務データを取り込むVBAマクロを開発する。

  1. アプローチは、各ビジネスユニットの情報を統合MASTERブックを作成します。各ビジネスユニットは、独自のタブ(例: "1120"、 "1130"、 "1210")でMASTERブック( "Target_workbook")に表示されていることを確認してください。

  2. ビジネス( 『Source_Workbook「」Source_Path『)月次財務報告に対応見つける単位タブ(』arr』)
  3. 使用アレイ情報
  4. コピーして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 

の問題

  1. エラー@ライン:Target_Workbook.Sheets(arr(i)).Range("A5").PasteSpecial Paste:=xlPasteValuesは、 "変数またはWithブロック変数が設定されていないオブジェクト"。これはなぜですか? arr(i)がバリアント/文字列なので、それはありますか?
  2. コード改善のための他の提案はありますか?
+0

同じエラーメッセージのある何百もの既存の投稿のどれもあなたを助けませんでしたか?私はこの正確な問題(ここでの答えが提供するのと同じ解決策)を何度も見たことがあることを知っています。ここに新しい質問を投稿する前にいくつかの基本的な調査をしてください。あなたが含まれている**正確な**エラーメッセージで検索するたくさんの検索結果を読むことができます。 ** Related ** list === >>>の右側には既に10件あります。これは、あなたがあなたの投稿を書いているときに、検索する必要がなくても潜在的重複として示唆されています。 –

答えて

1

あなたはSを削除し、Target_Workbook を設定しています。

+0

また、この行は 'Target_Workbooks'をワークシートオブジェクトに設定します。 'Target_Workbook'に変更されると、" Type Mismatch "としてエラーになります –

+2

' Option Explicit' ...ただsayin ' – Comintern

関連する問題