VBA ActiveCell.Offset意外结果 - 跳过单元格

时间:2017-02-28 15:26:07

标签: excel vba excel-vba

我在工作表模块中使用下面的代码段获得了意外的结果。

它正确地做了"标签5"和"数量"但是"描述"放在单元格B22中,而不是debug.print

我在每个阶段的行号上做了A21并且它们正在递增。 L22是合并的单元格。如果重要的话,ActiveCell.Offset(lineNumber, 0).Select也在工作表的打印区域之外。

如果我取消注释A22,则会选择Qty的正确单元格,然后将DescriptionA23放入单元格B23Sub 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 在正确的列但错误的行。

<nav class="navbar navbar-default navbar-fixed-top">
    <div class="container">
        <div class="row">
            <div class="col-sm-4">
                <div class="navbar-header">
                    <img src="../images/Image1.png" width="280" height="80" alt="">
                </div>
            </div>
            <div class="col-sm-4" style="text-align: center">
                <form class="navbar-form navbar" role="search">
                    <div class="input-group">
                        <input type="text" class="form-control" placeholder="Suche" name="suche">
                        <div class="input-group-btn">
                            <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button>
                        </div>
                    </div>
                </form>
            </div>
            <div class="col-sm-4">
                <ul class="nav navbar-nav navbar-right">
                    <img src="../images/Image2.jpg" width="330" height="80" alt="">
                </ul>
            </div>
        </div>
    </div>
</nav>

offsetissue

1 个答案:

答案 0 :(得分:2)

这就是您不应该使用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"