1

閉じたワークブックから現在のワークブックにセルの範囲をコピーしようとしていますが、常にエラー 1004 が発生します。使用しているコードは次のとおりです。

Sub Sheet2()
Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim Multi As Boolean
Dim DataFile
Dim WBdata As Workbook

'I prompt the user to select the file to import
Filt = "Excel Workbook 2010 (*.xlsx),*.xlsx," & "Excel Workbook (*.xls), *.xls," & "All Files (*.*),*.*"
FilterIndex = 1
Title = "Select file to import"
Multi = False
DataFile = Application.GetOpenFilename(FileFilter:=Filt, FilterIndex:=FilterIndex, Title:=Title, MultiSelect:=Multi)

If DataFile = False Then
    MsgBox "No file was selected"
End If

'Open the file selected by the user
Set WBdata = Workbooks.Open(DataFile)

'Get the data
WBdata.Activate
Sheets("Sheet1").Range(Cells(4, 1), Cells(4, 1).End(xlDown).Offset(-1, 0)).Copy _ ThisWorkbook.Sheets("Sheet2").Columns(1)
ThisWorkbook.Sheets("Sheet2").Activate
ThisWorkbook.Sheets("Sheet2").Columns(1).Select
Selection.EntireColumn.AutoFit

'Close and Select Cell (1,1)
WBdata.Close
ThisWorkbook.Sheets("Manager").Activate
ThisWorkbook.Sheets("Manager").Cells(1, 1).Select
End Sub

デバッガーは で停止しSheets("Sheet1").Range(Cells(4, 1), Cells(4, 1).End(xlDown).Offset(-1, 0)).Copy _ ThisWorkbook.Sheets("Sheet2").Columns(1)ます。

テストファイルで同じ構文を試してみましたが、スムーズに進みましたが、実際のファイルでは実現できません。これは、テスト ファイルのコードです。

Sheets("Sheet1").Range(Cells(1, 1), Cells(1, 1).End(xlDown).Offset(-1, 0)).Copy ThisWorkbook.Sheets("Sheet1").Columns(2)

私はあなたのすべての助けに感謝します、ありがとう!

4

1 に答える 1

0

二つのこと

  1. ユーザーがダイアログ ボックスをキャンセルした場合MsgBox "No file was selected"に、コードがこの行でエラーを出さないように、後でサブを終了することをお勧めします。Set WBdata = Workbooks.Open(DataFile)または、以下のコードに示すように、ステートメントのElse一部のコードを処理しますIf

  2. セルを完全に修飾していないため、そのエラーが発生しています。たとえば、以下のコードの を参照.(DOT)してください。Cells(1, 1)

あなたのコードは ( UNTESTED )として書き直すことができます

Sub Sheet2()
    Dim Filt As String, Title As String
    Dim FilterIndex As Integer
    Dim Multi As Boolean
    Dim DataFile
    Dim WBdata As Workbook, ws As Worksheet

    Filt = "Excel Workbook 2010 (*.xlsx),*.xlsx," & _
           "Excel Workbook (*.xls), *.xls," & _
           "All Files (*.*),*.*"
    FilterIndex = 1
    Title = "Select file to import"
    Multi = False
    DataFile = Application.GetOpenFilename(FileFilter:=Filt, _
                                           FilterIndex:=FilterIndex, _
                                           Title:=Title, _
                                           MultiSelect:=Multi)

    If DataFile = False Then
        MsgBox "No file was selected"
    Else
        'Open the file selected by the user
        Set WBdata = Workbooks.Open(DataFile)
        Set ws = WBdata.Sheets("Sheet2")

        'Get the data
        With ws
            .Range(.Cells(4, 1), .Cells(4, 1).End(xlDown).Offset(-1, 0)).Copy _
            ThisWorkbook.Sheets("Sheet2").Columns(1)
            ThisWorkbook.Sheets("Sheet2").Columns(1).EntireColumn.AutoFit

            'Close and Select Cell (1,1)
            WBdata.Close SaveChanges:=False
        End With
    End If
End Sub
于 2013-02-08T00:03:07.833 に答える