1

.xls ワークブックの 1 つの列をループしようとしています。その 1 つの列の各行には、作成した文字列 (名前、説明など) を自動生成しながら、新しい .xlsm ワークブックにコピーする必要があるデータがあります。以下にリストされている解決策を試しましたが、1004 エラーが発生し、続行する方法がわかりません。私はVBAにまったく慣れていないので、ポインタをいただければ幸いです。

私が見ている、または解決する必要があるかもしれないいくつかの問題は次のとおりです。

  • エラー 1004 (アプリ定義またはオブジェクト定義エラー)。エラーは if ステートメント内で発生しています < .Range(Cells((x+1) など) >
  • .xls ワークブックの 1 つの行からデータをコピーすると、新しい .xlsm ワークブックの 2 つの行が (意図的に) 埋められます。そのため、データをコピーするたびに追加の行に対応できるようにする必要があります。そのため、for ループで x = x + 1 を使用しています。
  • 私がコピーしている .xls ワークブックの行の一部のデータには、2 のサブセットに解析する必要がある 2 つまたは 3 つのデータがあります。したがって、ほとんどのワークブックでは、それは 1 つのデータです。新しいドキュメントでは 2 行になりますが、2 個のデータ > 4 行などの場合は、

TL;DR - このエラーを回避するにはどうすればよいですか。また、単一の列を反復処理するときに、他のワークブックからデータを正常にコピーできるようにコードを改善するにはどうすればよいですか。

とにかく、ここにコードがあります:

Sub TestThis()

    Dim wb As Workbook
    Dim x As Integer

    Application.ScreenUpdating = False
    Set wb = Workbooks.Open("C:\Users\blah\Documents\blah\Week 02\old file.xls", True, True)

    With ThisWorkbook.Worksheets("template")
        NumRows = wb.Sheets(1).Range("T9:T1116").Rows.Count
        Range("T9:T1116").Select
        For x = 1 To NumRows
            If ActiveCell.Formula <> "" Then
                .Range(Cells(x, 2)).Formula = "field 1"
                .Range(Cells(x, 5)).Formula = "field 2"
                .Range(Cells(x, 7)).Formula = "a sentence is here but is replaced"
                .Range(Cells(x, 9)).Formula = "1"
                .Range(Cells(x, 10)).Formula = "blah blah blah data"
                .Range(Cells(x, 11)).Formula = "blah blah blah more data"
                .Range(Cells((x + 1), 9)).Formula = "2"
                .Range(Cells((x + 1), 10)).Formula = "Data in " + ActiveCell.Formula + " is stored in blah"
                .Range(Cells((x + 1), 11)).Formula = "Data is stored in blah"
            End If
            x = x + 1
            ActiveCell.Offset(1, 0).Select
        Next
    End With

    wb.Close False
    Set wb = Nothing
    Application.ScreenUpdating = True

End Sub
4

2 に答える 2