我對 VBA 沒有太多經驗,但我最近接到了為我作業的公司開發大量 Excel 檔案的責任。我的目標是創建一個宏,它將創建一個新作業表并根據下拉串列中的值重命名它,并為串列中的每個“是”回圈它。這是我目前得到的。最后一個字串不起作用,我不知道如何回圈重命名程序并確保它獲取正確的名稱。
例如:如果單元格 I65 的值為“AP”,我希望將新生成的作業表命名為 A65 中的值。先感謝您。
Dim rng As Range, cell As Range, was As Worksheet
Set rng = Range("A1:A3")
Sheets("Setup").Select
For Each cell In Range("I48:I85")
If cell = "AP" Then
Sheets("AP").Select
Sheets("AP").Copy Before:=Sheets(1)
Dim AP(2) As Worksheet
Set AP(2) = ActiveWorkbook.Sheets("AP (2)")
AP(2).Name = Worksheets("Setup").Range("A48:A85").Value
End If
Next cell
uj5u.com熱心網友回復:
雖然我不完全理解您要做什么,但此陳述句看起來很可疑: AP(2).Name = Worksheets("Setup").Range("A48:A85").Value 您正在嘗試重命名作業表一系列值?-不允許。使用像這樣的單個單元格或在重新調整之前連接范圍內的值。AP(2).Name = Worksheets("Setup").Range("A48").Value
uj5u.com熱心網友回復:
看看下面的代碼。
(1)Range("A48:A85").Value回傳一個不能用作名稱的值陣列。我已經使用Offset- 函式來獲取A同一行的col中的單元格。
(2) 無需使用Select. 閱讀(并理解)如何避免在 Excel VBA 中使用 Select
(3) 始終限定所有作業表、范圍等。換句話說:告訴 VBA 您正在使用哪個作業簿中的哪個作業表。
(4) 我ActiveWorkbook在-With子句中使用過,但我不喜歡它。決定您正在使用哪個作業簿。如果它是代碼所在的作業簿,請ThisWorkbook改用。它是另一個作業簿,最好將其分配給作業簿變數(例如,當您打開它時)。特別是在較大的專案中,不要依賴Activeworkbook.
(5) 您將變數宣告AP為具有 2 個元素的陣列。我猜您只是想命名類似于新創建的作業表的變數,但是使用陣列和寫入AP(2)非常令人困惑。只需命名AP2(或newWs或APCopy)
Dim ws As Worksheet, cell As Range
With ActiveWorkbook ' <-- Better change that.
Set ws = .Sheets("Setup")
For Each cell In ws.Range("I48:I85")
If cell = "AP" Then
.Sheets("AP").Copy Before:=.Sheets(1)
Dim AP2 As Worksheet
Set AP2 = .Sheets("AP (2)")
AP2.Name = cell.Offset(0, -8).Value
End If
Next cell
End With
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345278.html
