2

CSV ファイルから Excel ワークシートにデータをコピーしたいと考えています。11 個の .csv ファイルがあります。これまでのところ、これがあります(以前の投稿から変更されたバージョンです):

Sub importData()   
  Dim filenum(0 To 10) As Long
  filenum(0) = 052
  filenum(1) = 060
  filenum(2) = 064
  filenum(3) = 068
  filenum(4) = 070
  filenum(5) = 072
  filenum(6) = 074
  filenum(7) = 076
  filenum(8) = 178
  filenum(9) = 180
  filenum(10) = 182

  Dim sh1 As Worksheet
  On Error GoTo my_handler

  For lngPosition = LBound(filenum) To UBound(filenum)
    'Windows(filenum(lngPosition) & ".csv").Activate
    Workbooks.Add(filenum(lngPosition) & ".csv").Activate
Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Windows("30_graphs_w_Macro.xlsm").Activate
    Set sh1 = Worksheets(filenum(lngPosition)).Activate
    Range("A69").Paste
    Range("A69").Select

  Next lngPositionlngPositionlngPosition

my_handler:
  MsgBox "All done."
  Exit Sub
End Sub

このコードは、行に添え字が範囲外のエラーを表示します。

Set sh1 = Worksheets(filenum(lngPosition)).Activate
4

3 に答える 3

4

sh1 = Worksheets(filenum(lngPosition)).Activate を設定します。

Subscript out of range errorそのワークシートが見つからないため、エラーが発生しています。

また、どうぞ... どうぞ... 使用しないでくださいHow to avoid using Select in Excel VBA Macros を.Select/.Activate/Selection/ActiveCell見たいと思うかもしれません。

于 2013-11-06T16:33:02.030 に答える
0

これは以前のバージョンよりも少し良く見えますが、その行の .Activate を取り除き、それでもエラーが発生するかどうかを確認してください。

Dim sh1 As Worksheet
set sh1 = Workbooks.Add(filenum(lngPosition) & ".csv")

ワークシート オブジェクトを作成します。そのオブジェクトを作成するまでは、それで作業を開始したくありません。オブジェクトを取得したら、次の操作を実行できます。

sh1.Range("A69").Paste
sh1.Range("A69").Select

sh1. どのオブジェクトを使用するかを Excel に明示的に伝えます。そうしないと、このコードの実行中に他のワークシートを選択し始めると、間違った場所にデータを貼り付けてしまう可能性があります。

于 2013-11-06T16:42:02.117 に答える