0

我试图在上面插入一行,然后在过滤的电子表格中向上移动到下一个可见行。因为我想将操作应用于可见行(可以随机间隔),所以这行代码是不够的:

ActiveCell.Offset(-8, 0)

据我了解,这告诉 Excel 向上移动八行(因为我用来记录宏的单元格集恰好相隔八个单元格),而不是在当前过滤条件下移动到下一个可见行。

电子表格的摘录显示可见数据行在 这种情况下随机间隔 6 行,但它可以是任何数字。
在此处输入图像描述

宏代码:

ActiveCell.Rows("1:1").EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(-8, 0).Rows("1:1").EntireRow.Select

我希望将最后一行代码“上升八行”替换为“在给定当前数据过滤器的情况下上升到下一个可见行”。

过滤器显示列 R = 0 的行,但我更喜欢一种方法,即不将该指令合并到 VBA 代码中,而只查看可见数据而不是整个电子表格。

4

3 回答 3

0

您应该检查或隐藏行

If Rows(15).Hidden then 'we are checking is Row 15 Hidden
    'row is Hidden
Else
    'row is Visible
End If
于 2021-02-04T08:34:16.730 回答
0

根据蒂莫西的建议,这是我根据银行家的工作提出的代码:

    'row is Hidden
    ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
    'move up one cell
Else
    'row is Visible
    ActiveCell.Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
    'insert row above then move up one.
End If

尽管我发现上面 Michael Angelico 的帖子对于我的特定要求是一个更快的解决方案,但这是一个更通用的选择。

于 2021-02-04T10:52:57.163 回答
0

所以据我了解,您想在当前行上方插入一行,然后按 Ctrl-up 以便它跳到最后一行不是空白的?尝试这个:

r = Selection.Row: c = Selection.Column
Rows(LTrim(Str(r)) + ":" + LTrim(Str(r))).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
destrow = Range("A" & r).End(xlUp).Row
Cells(destrow, c).Select

对不起,我的编码风格孩子,我是在 GW-BASIC 上长大的,我对 21 世纪唯一的风格让步是我不会全部输入大写字母。

于 2021-02-04T10:01:47.437 回答