簡體   English   中英

VBA ActiveCell.Offset意外結果-跳過單元格

[英]VBA ActiveCell.Offset unexpected results - skipping cells

在工作表模塊中,下面的代碼段使我得到了意外的結果。

它可以正確執行“標簽5”和“數量”單元格,但“描述”放置在單元格L22而不是在B22

我在每個階段的行號上執行了debug.print ,並且它們正在遞增。 A21是合並的單元格。 如果重要的話, L22也在工作表的打印區域之外。

如果我取消注釋ActiveCell.Offset(lineNumber, 0).Select它將選擇A22的正確單元格,然后將“ Qty和“ Description放入單元格A23B23 ,這些單元格在正確的列中但行錯誤。

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

offsetissue

這就是為什么您不應該使用Active*SelectOffset 分別使用硬對象引用{null}和CellsRange 您正在編寫固定布局,因此只需對其進行硬編碼即可:

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.

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