0

マクロとして保存すると正常に動作する単純なモジュールを VBA で作成しましたが、同じものをアドインとして保存して実行すると、動作がおかしくなりました。Error: Method "Move" of object "Sheets" failed が表示され、ファイル番号 1 (コードでは x=1) からシートが開かれます。

助けてくれてありがとう。MS Excel のセキュリティ問題をチェックするために別のシステムで試したことはありませんが、コードやシート スルー パスワードをロックしていません。

コード:

Sub opensheets()
    Dim openfiles
    Dim x As Integer
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    openfiles = Application.GetOpenFilename _
    (FileFilter:="Microsoft Excel Files (*.xls;*.xlsx),*.xls;*.xlsx", _
    MultiSelect:=True, Title:="Select Excel files!")

    If TypeName(openfiles) = "Boolean" Then
        MsgBox "You need to select atleast one file"
        GoTo ExitHandler
    End If

    x = 1
    While x <= UBound(openfiles)
        Workbooks.Open Filename:=openfiles(x)
        Sheets().Move After:=ThisWorkbook.Sheets _
          (ThisWorkbook.Sheets.Count)
        x = x + 1
    Wend
ExitHandler:
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub
4

2 に答える 2

0

別の本からすべてのワークシートを取得して、現在のワークブック (コードを含むもの) の最後に移動しようとしている場合、これは私にとってはうまくいきました:

...
While x <= UBound(openfiles)
    Dim wb as Workbook
    Set wb = Workbooks.Open(Filename:=openfiles(x))
    wb.Sheets().Move After:=ThisWorkbook.Sheets _
      (ThisWorkbook.Sheets.Count)
    x = x + 1
Wend
...

何か他のものを探している場合は、質問を明確にしてください。

于 2013-07-03T14:56:17.757 に答える
0

コードがアドインで実行されている場合は、アドインをThisWorkbook参照してください。代わりに、開いたばかりのワークブックを明示的に参照する必要があります。たぶん次のようなもの:

Dim wkb As Workbook

While x <= UBound(openfiles)
    Set wkb = Workbooks.Open(Filename:=openfiles(x))
    Sheets().Move After:=wkb.Sheets(wkb.Sheets.Count)
    x = x + 1
Wend
于 2013-07-03T15:02:08.977 に答える