VBA 腳本從一張紙複製到另一張紙

VBA 腳本從一張紙複製到另一張紙

我有一個用於工作表功能測試程式 (FTP) 的工作 VBA 腳本,它將獲取儲存在 32 個單獨命名的範圍中的值,並將它們貼到單獨的工作表「結果」中。當我嘗試使用相同的腳本進行驗收測試程序 (ATP) 時,它會重複 FTP 的結果並將它們複製到原始 FTP 結果下方。我對 VBA 還是個新手,不太了解,但我了解其他程式語言。我不明白為什麼這對 ATP 不起作用,就像對 FTP 一樣。

功能測試程式腳本

Sub Copy_Filtered_Sections()

    Dim Section As Long, NextRow As Long

    For Section = 1 To 32

        NextRow = Sheets("Results").Range("A" & Rows.Count).End(xlUp).Row + 1 'Next empty row

        Sheets("Function Test Procedure").Select

        Range("FTPSec" & Section).Columns("A:H").SpecialCells(xlCellTypeVisible).Copy _
        Destination:=Sheets("Results").Range("A" & NextRow)

'        Range("FTPSec" & Section).Columns("G:H").SpecialCells(xlCellTypeVisible).Copy _
'            Destination:=Sheets("Results").Range("N" & NextRow)

    Next Section

End Sub

驗收測試程序腳本

Sub Copy_ATP_Tables()

    Dim SectionATP As Long, NextRow As Long

    For SectionATP = 1 To 32

        NextRow = Sheets("Results").Range("A" & Rows.Count).End(xlUp).Row + 1 'Next empty row

        Sheets("Acceptance Test Procedure").Select

        Range("ATPSec" & SectionATP).Columns("A:H").SpecialCells(xlCellTypeVisible).Copy _
        Destination:=Sheets("Results").Range("A" & NextRow)

'           Range("FTPSec" & Section).Columns("G:H").SpecialCells(xlCellTypeVisible).Copy _
'                Destination:=Sheets("Results").Range("N" & NextRow)

    Next SectionATP


End Sub

第二個函數傳回以下錯誤訊息:

「執行階段錯誤 '1004':物件 '_Global' 的方法 'Range' 失敗」行上的「Range("ATPSec" & SectionATP).Columns("A:H").SpecialCells(xlCellTypeVisible).Copy _ Destination : =Sheets("結果").Range("A" & NextRow)

答案1

我認為問題在於工作簿為 FTP 指定了範圍,但沒有為 ATP 指定範圍。在功能測試程式碼中,在第一次迭代時類似的行

Range("FTPSec" & Section).Columns("A:H").SpecialCells(xlCellTypeVisible).Copy _
    Destination:=Sheets("Results").Range("A" & NextRow)

呼叫命名範圍 A 至 H 列中的可見單元格FTPSec1。據推測,您的工作簿中存在命名範圍FTPSec1, FTPSec2, ..., 。FTPSec32

在驗收測試過程程式碼中,透過模倣此處的語法,您假設工作簿中定義了命名範圍ATPSec1, ATPSec2, ..., 。ATPSec32如果不是,您的程式碼將拋出錯誤,因為 Excel 不知道Range("ATPSec1")所指的是什麼。

要檢查這確實是問題所在,請按Ctrl+開啟 Excel 中的名稱管理員F3。在這裡您將看到工作簿中的所有命名範圍。我懷疑您會看到 FTP 範圍,但看不到 ATP 範圍。

要解決此問題,您必須執行以下操作之一:

  • 在工作簿中定義範圍ATPSec1, ATPSec2, ...。ATPSec32透過名稱管理器建立新的命名範圍來完成此操作;或者

  • 更改 ATP 程式碼,以便 VBA 識別相關範圍,大概使用與最初定義範圍相同的標準。

答案2

為了消除歧義,您應該在使用範圍時參考該工作表。合併兩行程式碼

    Sheets("Acceptance Test Procedure").Select
    Range("ATPSec" & SectionATP).Columns("A:H").SpecialCells(xlCellTypeVisible).Copy _
    Destination:=Sheets("Results").Range("A" & NextRow)

對此:
Sheets("驗收測試程序").Range("ATPSec" & SectionATP).Columns("A:H").SpecialCells(xlCellTypeVisible).Copy _ Destination:=Sheets("Results").Range(" A" 和下一行)

因此,您可以像限定目的地一樣限定來源。
如果這不能消除錯誤,您必須手動調試。在 VBA 編輯器中,單步執行 (F8) 來初始化變數。然後點擊進入直接存取視窗並輸入

SetctionATP = 1
? Sheets("Acceptance Test Procedure").Range("ATPSec" & SectionATP).address

這應該會傳回一個有效範圍。下一個

? Sheets("Acceptance Test Procedure").Range("ATPSec" & SectionATP).Columns("A:H").address

您可以透過改變 來測試其他命名範圍SectionATP

相關內容