繁体   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