1

1 つのワークブック (「x1」) から 1 つの特定のワークシート (そのワークシートのタイトルを「x」と呼ぶ) をマスター ワークブック (そのワークブックを「xmaster」と呼ぶ) にコピー アンド ペーストするマクロを適用しようとしています。ワークブック x1 からワークシートをコピーして貼り付けます。また、ワークシートのタイトル「x」をセル B3 に変更する必要があります。これは、次のワークブックに移動する前に行う必要があります。

たとえば x100 までの workBOOK x1 に対してこれを行う必要があります。ただし、ワークブックを名前で参照することはできません。実際のソート可能な方法ではないテキストの文字列にそれぞれ名前が付けられているためです。

私が知っているこのコードは、「x」を「x1」から「xmaster」にコピーし、シートの名前を変更し、リンクを解除すると、次のようになります。

    Sub CombineCapExFiles()
    Sheets("Capital-Projects over 3K").Move After:=Workbooks("CapEx Master File.xlsm").Sheets _
        (3)
    ActiveSheet.Name = Range("B3").Value

    Application.DisplayAlerts = False

For Each wb In Application.Workbooks
    Select Case wb.Name
            Case ThisWorkbook.Name, "CapEx Master File.xlsm"
                ' do nothing
            Case Else
                  wb.Close
    End Select
Next wb

    Application.DisplayAlerts = True

End Sub

Activate Previous ウィンドウが機能せず、その部分を修正する方法もわかりません。

ただし、ディレクトリ内のすべてのワークブックをループするようにこれを構築する方法がわかりません。

これを使用する必要があります:?

MyPath = "C:\directory here"
strFilename = Dir(MyPath & "\*.xlsx", vbNormal) 'change to xlsm if needed ?

If Len(strFilename) = 0 Then Exit Sub ' exit if no files in folder

Do Until strFilename = ""
    'Your code here
    strFilename = Dir()    
Loop

追加の制約は、xmaster でマクロを実行する必要がないことです (以前のワークブックから名前が変更されるシート "x" がないため、エラーが発生します)。

ありがとう!マシュー

4

2 に答える 2

0

このような?(未検証)

Option Explicit

Sub LoopFiles()

Dim strDir As String, strFileName As String
Dim wbCopyBook As Workbook
Dim wbNewBook As Workbook
Dim wbname as String   

strDir = "C:\"
strFileName = Dir(strDir & "*.xlsx")

Set wbNewBook = Workbooks.Add 'instead of adding a workbook, set = to the name of your master workbook
wbname = ThisWorkbook.FullName

 Do While strFileName <> ""
    Set wbCopyBook = Workbooks.Open(strDir & strFileName)
    If wbCopyBook.FullName <> wbname Then
        wbCopyBook.Sheets(1).Copy Before:=wbNewBook.Sheets(1)
        wbCopyBook.Close False
        strFileName = Dir()
    Else
        strFileName = Dir()
    End If
Loop

End Sub
于 2012-10-03T19:32:56.987 に答える
0

このビットは、xmasterでマクロを実行しないようにするために機能します。

xmaster = "filename for xmaster"
MyPath = "C:\directory here"
strFilename = Dir(MyPath & "\*.xls*", vbNormal) 'this will get .xls, .xlsx, .xlsm and .xlsb files
If Len(strFilename) = 0 Then Exit Sub ' exit if no files in folder

Do Until strFilename = ""
    If strFileName = xmaster Then ' skip the xmaster file
        strFilename = Dir() 
    End If
    'Your code here
    strFilename = Dir()    
Loop

しかし、私は他の部分を助けることはできません。コードに[前のウィンドウをアクティブ化]の部分が表示されません。

于 2012-10-03T19:33:34.607 に答える