簡體   English   中英

Excel VBA不寫入摘要表

[英]Excel VBA Not Writing to Summary Sheet

我正在嘗試編寫代碼以將某些范圍的數據從每個工作表復制到摘要工作表。 我已經嘗試過很多版本(對於我來說,太多了​​,不能全部放在這里),但是每個摘要表都有空值。 我不明白出了什么問題,也沒有任何理論。

這是我自己寫的版本。 我嘗試過的所有其他變體都可以在Internet上找到:

注意:實際的摘要表是在代碼的其他地方創建的。 另外,為什么我的sheetIndex從6開始是因為這是我要從中獲取數據的第一張紙。

Sub PopulateSummary()
Dim nmbrParts As Integer
Dim partIndex As Integer
Dim sheetIndex As Integer
Dim sheetCount As Integer

sheetCount = ThisWorkbook.Sheets.Count
for sheetIndex = 6 To sheetCount
    With Sheets(sheetIndex)
        .Activate
        .Range("B2").Select
        Call SelectFirstToLastInColumn
        nmbrParts = Selection.Count
        Sheets("Summary").Activate
        for partIndex = 1 To nmbrParts
            row = partIndex + 1

            Sheets("Summary").Cells(row, 1).Value = .Cells(row, 1).Value
            Sheets("Summary").Cells(row, 2).Value = .Cells(row, 2).Value
            Sheets("Summary").Cells(row, 3).Value = .Cells(row, 4).Value
            Sheets("Summary").Cells(row, 3).Value = .Cells(row, 3).Value
            Sheets("Summary").Cells(row, 5).Value = .Cells(row, 6).Value

        Next partIndex
    End With
Next sheetIndex

結束子

編輯:我想通了一些東西。 由於我正在從另一個工作簿中調用這些宏,因此我將ThisWorkbook更改為ActiveWorkbook,因此它計算正確的工作表數。 但是,問題仍未解決。

將其分成幾部分,並一次遍歷一行代碼。 這將告訴您是否選擇了您想選擇的內容,行是否是您認為的內容,等等。此外,當代碼到達您的第一個Sheets(“ Summary”)。Cells ...行和使用立即窗口(Ctrl + G)輸出目標單元格的值

?.Cells(row, 1).Value

另外,由於您具有With塊,因此您實際上並不需要激活和選擇單元格(並且無論如何您都不應該在VBA中大部分時間都選擇,因為工作表中的內容很慢),並且您也無需激活Sheets(“ Summary”),因為您直接引用了它。 您可以執行以下操作:

With Sheets(sheetIndex)
    nmbrParts = .Range("B:B").Find(what:="*",searchDirection:=xlPrevious).Row
    for ...
    .
    . 
    .
End With

代碼越簡單越短,測試起來就越容易。

我想到了....

我在將變量名放在錯誤的位置時遇到了一些問題。 我的宏應該看起來像這樣:

Sub PopulateSummary()
Dim nmbrParts As Integer
Dim partIndex As Integer
Dim sheetIndex As Integer
Dim sheetCount As Integer
Dim row As Integer
row = 2
sheetCount = ActiveWorkbook.Sheets.Count
For sheetIndex = 6 To sheetCount
    With Sheets(sheetIndex)
        .Activate
        .Range("B2").Select
        nmbrParts = .Range("B:B").Find(what:="*", searchDirection:=xlPrevious).row
        For partIndex = 1 To nmbrParts
             destRow = partIndex + 1
             Sheets("Summary").Cells(row, 1).Value = .Cells(destRow, 1).Value
             Sheets("Summary").Cells(row, 2).Value = .Cells(destRow, 2).Value
             Sheets("Summary").Cells(row, 3).Value = .Cells(destRow, 4).Value
             Sheets("Summary").Cells(row, 4).Value = .Cells(destRow, 3).Value
             Sheets("Summary").Cells(row, 5).Value = .Cells(destRow, 6).Value
             row = row + 1
        Next partIndex
    End With
Next sheetIndex
End Sub

所不同的是,我使用了不同的名稱來指代我所取圖紙上的行。 因此,我可以將數字分開。 我還發現了我在“編輯”中提到的錯誤,在該錯誤中,我必須將ThisWorkbook更改為ActiveWorkbook,以便工作表計數正確。

感謝redOctober13提供測試建議。 您已經教會我使用調試器的重要性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM