[英]VBA ActiveCell.Offset unexpected results - skipping cells
在工作表模塊中,下面的代碼段使我得到了意外的結果。
它可以正確執行“標簽5”和“數量”單元格,但“描述”放置在單元格L22
而不是在B22
我在每個階段的行號上執行了debug.print
,並且它們正在遞增。 A21
是合並的單元格。 如果重要的話, L22
也在工作表的打印區域之外。
如果我取消注釋ActiveCell.Offset(lineNumber, 0).Select
它將選擇A22
的正確單元格,然后將“ Qty
和“ Description
放入單元格A23
和B23
,這些單元格在正確的列中但行錯誤。
Sub test()
On Error Resume Next
Dim lineNumber As Integer
lineNumber = 0
Worksheets(1).range("A21").Select
ActiveCell.Offset(lineNumber, 0).value = "Label 5" 'A21
lineNumber = lineNumber + 1
ActiveCell.Offset(lineNumber, 0).value = "Qty" 'A22
ActiveCell.Offset(lineNumber, 1).value = "Description" 'B22 -- Prints to L22
lineNumber = lineNumber + 1
End Sub
這就是為什么您不應該使用Active*
, Select
和Offset
。 分別使用硬對象引用{null}和Cells
或Range
。 您正在編寫固定布局,因此只需對其進行硬編碼即可:
Sub test()
With Worksheets(1)
.Range("A21").Value = "Label 5" `On merged ranges, just use the top left cell.
.Range("A22").Value = "Qty"
.Range("B22").Value = "Description"
End With
End Sub
如果需要重用此參數,則可以向其傳遞行參數,以獲取合並的“標題”單元格所在的位置:
Private Sub WriteHeaders(targetSheet As Worksheet, titleRow As Long, heading As String)
With targetSheet
.Cells(titleRow, 1).Value = heading
.Cells(titleRow + 1, 1).Value = "Qty"
.Cells(titleRow + 1, 2).Value = "Description"
End With
End Sub
然后您可以這樣稱呼它:
WriteHeaders Worksheets(1), 21, "Label 5"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.