0

マクロを実行した 4 つの異なる xlsm ファイルを開いています。マクロは、セルからデータを読み取ります。マクロは個別に機能しますが、一緒にするとめちゃくちゃになります。なぜなら

Cells(1, 1).Value

必要なシートからではなく、アクティブなシートから取得されます。

とにかくシートをスパイス化することはありますか

workbook("example1").sheet("sheet1").Cells(1, 1).Value
workbook("example2").sheet("sheet1").Cells(1, 1).Value

?

編集:(Gimpに感謝)試してみました

Dim oWorkSheet As Worksheet    
Set oWorkSheet = Workbooks("example1.xlsm").Sheets("sheet1")
    oWorkSheet.Cells(1, 1).Value

実行時エラーが発生しました

"Object doesn't support this property and method"
4

2 に答える 2

3

はい、オブジェクトを完全に修飾しない場合、これは非常に一般的な問題です。例を見てみましょう。4つのワークブックがあり、4つすべてに「Sheet1」というシートがある場合、データが正しいセルから取得されるようにするにはどうすればよいでしょうか。

Cells(1, 1).Value

常に現在アクティブなシートからデータを取得しますが、実際には必要なシートではない可能性があります。

マクロを介して4つのファイルを開く場合、これは正しい方法です。

Sub Sample()
    Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook, wb4 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet

    Set wb1 = Workbooks.Open("C:\File1.xlsx")
    Set ws1 = wb1.Sheets("Sheet1")

    Set wb2 = Workbooks.Open("C:\File2.xlsx")
    Set ws2 = wb2.Sheets("Sheet1")

    Set wb3 = Workbooks.Open("C:\File3.xlsx")
    Set ws3 = wb3.Sheets("Sheet1")

    Set wb4 = Workbooks.Open("C:\File4.xlsx")
    Set ws4 = wb4.Sheets("Sheet1")

    '~~> Now you can work with the relevant cells
    Debug.Print ws1.Cells(1, 1).Value
    Debug.Print ws2.Cells(1, 1).Value
    Debug.Print ws3.Cells(1, 1).Value
    Debug.Print ws4.Cells(1, 1).Value
End Sub

マクロを介して4つのファイルを開いていない場合でも、それらをwb1、wb2などに設定して、上記のように機能させることができます。

于 2012-08-16T14:36:33.377 に答える
2

はい、次を使用します。

workbooks("example1.xlsm").sheets("sheet1").Cells(1, 1).Value
workbooks("example2.xlsm").sheets("sheet1").Cells(1, 1).Value

更新 機能していないワークブックまたはシート名のいずれかです。

試してみてくださいmsgbox Workbooks("example1.xlsm").nameそれが機能する場合、問題はsheets()セクションにある可能性があります。そうでない場合は、次のようにセクションを完全に修飾する必要がある場合がありますWorkbooks("C:/Folder1/example1.xlsm")

于 2012-08-16T14:28:52.820 に答える