2011-07-18 22 views
0

特定のフォルダにあるさまざまなスプレッドシートのすべての情報をコンパイルし、1つの「マスター」ExcelブックにコンパイルするExcel VBAマクロを作成しました。Excel VBAでの絶対ブックから相対ブックへの参照の変更

これは現在コンピュータで使用しているときに問題なく動作しますが、「マスター」スプレッドシートと個々のスプレッドシート(​​コンパイルするもの)を含むフォルダをネットワーク上に配置できるようにコードを調整したい誰もが使用できるように、ドライブしてください。

私はVBAと一般的なコーディングにはかなり新しいので、おそらく私の問題を解決するための簡単な解決策があるでしょう。

絶対参照を実行する現在のマクロを添付しました。

'Summary: Open all Excel files in a specific folder and merge data 
'   into one master sheet (stacked) 

Dim fName As String, fPath As String, fPathDone As String, OldDir As String 
Dim LR As Long, NR As Long 
Dim wbData As Workbook, wbkNew As Workbook 

'Setup 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.DisplayAlerts = False 

Set wbkNew = ThisWorkbook 
wbkNew.Activate 
Sheets("Master").Activate 

If MsgBox("Import new data to this report?", vbYesNo) = vbNo Then Exit Sub 

If MsgBox("Clear the old data first?", vbYesNo) = vbYes Then 
    Cells.Clear 
    NR = 1 
Else 
    NR = Range("A" & Rows.Count).End(xlUp).Row + 1 
End If 


fPath = "C:\Folder-that-Excel-workbooks-are-located-in" 
On Error Resume Next 
    MkDir fPathDone 
On Error GoTo 0 
OldDir = CurDir 
ChDir fPath 
fName = Dir("*.xlsx") 


Do While Len(fName) > 0 
    If fName <> wbkNew.Name Then 

     Set wbData = Workbooks.Open(fName) 



     LR = Range("C" & Rows.Count).End(xlUp).Row 
     If NR = 1 Then 
      Range("C5:F" & LR).EntireRow.Copy _ 
       wbkNew.Sheets("Master").Range("A" & NR) 
     Else 
      Range("C5:F" & LR).EntireRow.Copy _ 
       wbkNew.Sheets("Master").Range("A" & NR) 
     End If 

     wbData.Close False 

     NR = Range("C" & Rows.Count).End(xlUp).Row + 1 

     fName = Dir 
    End If 
Loop 

ErrorExit: 
ActiveSheet.Columns.AutoFit 
Application.DisplayAlerts = True 
Application.EnableEvents = True 
Application.ScreenUpdating = True 
ChDir OldDir 

答えて

0

短くて厄介な解決策は、ワークブックフォルダのパスをマスターブックのどこかに置くことです。

Excelブックを共有しているすべてのコンピュータで使用可能なネットワーク共有に他のブックを配置します。

\\ComputerName\SharedFolder\Resource 

次に、コード内のfPathをセル値に設定できます。

マスターブックとして同じフォルダに設定ファイルへのパスを入れて、マクロを実行するときにパスを読み込むことになる良い方法は:

Dim tmpArray() As String 
Dim s As String 
Dim strPath as String 
Open ThisWorkbook.Path & "\settings.ini" For Input As #1 
    Do While Not EOF(1) 
     Line Input #1, s 
     If VBA.Left(s, 11) = "excelfolder" Then 
      tmpArray = Split(s, "=") 
      strPath = tmpArray(1) 
     End If 
    Loop 
Close #1 

あなたのiniファイルには、次のようになります。

excelfolder=\\ComputerName\SharedFolder\Resource 
関連する問題