0

A2:A13にその年の月を入力しようとしています。明らかに、月を入力するだけで済みますが、フォルダー内の12個のワークブックから派生した文字列を使用して月を入力しています。これを行うのは、他の列にも他のデータを入力するため、同じ方法が適用され、便利な演習になると思います。

コードは、含まれているフォルダー内のすべてのブックをループするように設定されています。以下のようにforループを使用して、各ブックから派生した文字列をA2:A13に入力します。ただし、現時点では、各セルには12月が入力されています。

 Option Explicit
 Sub CompileRandomCheckingData()
    Dim MyPath As String, strfilename As String, mnth As String
    Dim EOYR As Workbook, indv As Workbook
    Dim psdsht As Worksheet, eoyrsht As Worksheet
    Dim LRow As Long
    Dim i As Integer

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

'--> Set Containing Folder
MyPath = "C:\Documents and Settings\alistairw\Desktop\temppsdreports2011"
strfilename = Dir(MyPath & "\*.xls", vbNormal)

    '--> If folder is empty then exit
    If Len(strfilename) = 0 Then Exit Sub

    Do Until strfilename = ""

    '--> Define each workbook
    Set EOYR = ThisWorkbook
    Set eoyrsht = EOYR.Sheets("Sheet1")
    Set indv = Application.Workbooks.Open("C:\Documents and Settings\alistairw\Desktop\temppsdreports2011\" & strfilename)

    '--> Working with individual workbooks
    Set psdsht = indv.Sheets("Sheet1")
    With psdsht
        LRow = .Range("D" & Rows.Count).End(xlUp).Row
    End With

    '--> Set Month from Workbook Title
    mnth = Split(strfilename, " ")(3)

    For i = 2 To 13
        With eoyrsht
            .Cells(i, 1) = mnth
        End With
    Next

    '--> Copy No. Items
    '--> Copy Gross Value
    '--> Copy Final Error Value
    '--> Tidy Up
    indv.Close

    strfilename = Dir()
    Loop

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
 End Sub

編集:

Forループがメインループで合計12回実行されているので、なぜそれらすべてに12月が入力されているのか理解しています。私は自分で解決策に近づいているかもしれませんが、コメントを歓迎します。

4

1 に答える 1

2

それは理にかなっている:

For i = 2 To 13
    With eoyrsht
        .Cells(i, 1) = mnth
    End With
Next

2行目から13行目までの最初の列に同じを入力しmnthます。これは、DoUntilループで開いたスプレッドシートの月です。したがって、おそらく12月のスプレッドシートを開く最後のループは、以前に行ったことをすべてオーバーライドします。

あなたはおそらく次のようなことを意味しました:

i = 2
Do Until ...
    ....
    With eoyrsht
        .Cells(i, 1) = mnth 'puts the month of the spreadsheet you are looking at in line i
    End With
    i = i + 1 'increments i for the next spreadsheet's month
    ....
Loop
于 2012-06-26T15:33:58.880 に答える