2

従業員ごとに 1 つの Excel ワークブックを含むフォルダーがあります (ワークブック内のワークシートは 1 つだけです)。各従業員ワークブックを開いて $A$1 のセルを読み取り、別のワークシートに書き込みたいと思いました。最終的に、各ワークブックのすべての $A$1 セルを含むワークシートが作成されます。次のコードを書きましたが、指定した行が何らかの理由で機能しません。これを行う方法を提案できますか?ありがとう

Private Sub CommandButton1_Click()
Const FOLDER As String = "c:\Junk\Employee Files\"

On Error GoTo ErrorHandler

Dim i As Integer
i = 0

Dim fileName As String

fileName = Dir(FOLDER, vbDirectory)
   Do While Len(fileName) > 0

    If Right$(fileName, 4) = "xlsx" Then
        i = i + 1

        Dim currentWkbk As Excel.Workbook
         Set currentWkbk = Excel.Workbooks.Open(FOLDER & fileName)
         Cells(i, 1) = "Employee " & 1
        'The line above works perfectly
         Cells(i, 2) = currentWkbk.Range("A1").Value   
        'The line doesn't work.  above works perfectly
    End If
    fileName = Dir
  Loop

ProgramExit:
   Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit

End Sub
4

3 に答える 3

2

ブラッドにはポイントがありますが、指定されたワークシートがないためにエラーが発生する可能性が高いと思います。これを使用してみてください。

Cells(i, 2) = currentWkbk.worksheets(1).Range("A1").Value   

これの代わりに

Cells(i, 2) = currentWkbk.Range("A1").Value

ただし、Bradsの提案を使用することも検討する必要があります;)

ワークシートの選択に動的なソリューションを使用することを提案する人もいるかもしれません。明示的に言ったので、私は1つを使用しませんでした。ワークシートは1つだけです。ただし、もちろん、動的にすることも、必要に応じてシートの代わりに実際のシート名を使用することもでき1ます。

于 2012-10-29T14:26:18.913 に答える
0

範囲参照を完全に修飾する必要があります。2 つのワークブックを参照しているため、次のような用語を使用することはできませんcells(i,2)。これは、デフォルトでアクティブなブックを参照するためです。これは通常、必要なものではありません。この場合、特に新しいファイルを開いてSet currentWkbk = Excel.Workbooks.Open(FOLDER & fileName)アクティブなブックになった場合に特にそうです。

代わりに、ルーチンの最初にこのようなことを試してください

Dim destWorksheet as Worksheet
Set destWorksheet = Thisworkbook.Sheets("Name of sheet")

次に、次のように使用します

If Right$(fileName, 4) = "xlsx" Then
    i = i + 1

    Dim currentWkbk As Excel.Workbook
     Set currentWkbk = Excel.Workbooks.Open(FOLDER & fileName)
     destWorksheet.Cells(i, 1) = "Employee " & 1
    'The line above works perfectly
     destWorksheet.Cells(i, 2) = currentWkbk.Range("A1").Value   
    'The line doesn't work.  above works perfectly
End If
于 2012-10-29T14:22:48.710 に答える
0

100 個の Excel ファイルを受け取ったという新しい課題に取り組みました。セル A3:A3 のファイルには、ファイル名の要求者がいます。したがって、特定のリクエスタのデータのみをロードする必要があり、データはセル A35 のファイルから始まります。

ここに画像の説明を入力

そのループで for each ループを作成しました。ファイル名とシート名を変数に保存し、変数からデータを読み取るときにその変数を使用しています。ここで、別の変数を作成し、式で次の構文を使用しました:"SELECT "+ "["+@[User::SheetName]+"A3:A3]"+".F1" +" AS COL1 FROM "+ " ["+@[ユーザー::シート名]+"A3:A3]"

ここに画像の説明を入力

ここで ResultSet=Single Row を設定し、結果セットを別の変数である P_id に割り当てます。優先順位の制約では、値が一致する場合はその変数を同等と見なし、フローを渡します。それ以外の場合は、条件に基づいてそのファイルを移動または削除できます。

ここに画像の説明を入力

于 2019-09-13T05:21:12.420 に答える