[英]Excel VBA - Not looping through my while loop
所以我有一個將數據粘貼到 excel 列中的代碼,然后我嘗試遍歷該列中的數據,並從 B 列中的每個值的數據創建一個新工作表,但它在完成此操作一次后停止,而不是循環通過列。
有任何想法嗎?
i = 4
Do While Cells(i, 2).Value <> ""
Worksheets("Front").Cells(5, 3).Value = Cells(i, 2)
Worksheets("Front").Select
Range("C2:M35").Select
Selection.Copy
Sheets("PlaceHolder").Select
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Dim wks As Worksheet
Set wks = ActiveSheet
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
ActiveSheet.Name = wks.Range("C5").Value
i = i + 1
Loop
代碼中的“單元格”和“范圍”都指 ActiveWorksheet,它可能以 Worksheets("Front") 開頭,然后使用Worksheets("Placeholder").Select語句將 ActiveWorksheet 更改為 Worksheets("Placeholder") . 我不確定創建新工作表是否將 ActiveWorksheet 設置為新工作表,我不應該知道使代碼工作。 您應該使用像這樣的顯式引用,而不是依賴對 ActiveWorksheet 的隱式引用。
'Style note: Always put Option Explict at the top of the module
'and declare all your variables at the top of the subroutine.
Dim wsFront As Worksheet
Dim wsPlaceholder As Worksheet
Dim wsNewSheet As Worksheet
Dim i As Integer
Set wsFront = Worksheets("Front")
Set wsPlaceholder = Worksheets("Placeholder")
i = 4
Do While wsFront.Cells(i, 2).Value <> ""
' Copy data from Worksheets("Front")
wsFront.Cells(5, 3).Value = Cells(i, 2)
wsFront.Select
wsFront.Range("C2:M35").Select
Selection.Copy
' Paste data to Worksheets("Placeholder")
wsPlaceholder.Select
wsPlaceholder.Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
' Copy Worksheets("Placeholder") to new worksheet
wsPlaceholder.Copy After:=Worksheets(Sheets.Count)
'Get a reference to the new worksheet
Set wsNewSheet = Worksheets(Worksheets.Count)
wsNewSheet.Name = wsPlaceholder.Range("C5").Value
i = i + 1
Loop
在 Excel 中使用 VBA 時,通常不需要 select 或激活任何東西(盡管宏記錄器可能會嘗試建議)
If you plan on doing much VBA work in Excel then this is highly-recommended reading: How to avoid using Select in Excel VBA
Dim wsData As Worksheet, wsFront As Worksheet, wsPH As Worksheet, v
Dim wb As Workbook, i As Long
Set wb = ThisWorkbook
Set wsData = ActiveSheet 'or some other specific sheet
Set wsFront = wb.Worksheets("Front")
Set wsPH = wb.Worksheets("PlaceHolder")
i = 4
Do While wsData.Cells(i, 2).Value <> ""
v = wsData.Cells(i, 2).Value
wsFront.Cells(5, 3).Value = v
wsFront.Range("C2:M35").Copy
With wsPH.Range("C2")
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End With
wsPH.Copy After:=wb.Worksheets(Sheets.Count)
wb.Worksheets(Sheets.Count).Name = v
Loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.