【问题标题】:Hidden row "unhides" after running macro运行宏后隐藏行“取消隐藏”
【发布时间】:2012-07-27 13:59:31
【问题描述】:

我有一个工作表,其中第 2 行被隐藏。一个宏粘贴到这一行。每当我运行这个宏时,隐藏的行就会重新出现。

有没有办法防止该行再次出现?

这是我的代码,它仍然不隐藏第 2 行

子 Update2029()

Dim LSearchRow As Integer
Dim LCopyToRow As Integer
Dim LSearchValue As String

On Error GoTo Err_Execute
Application.ScreenUpdating = False

LSearchValue = InputBox("Please enter a serial number to search for.", "Enter value")

'Start search in row 5
LSearchRow = 5

'Start copying data to row 2 in "Master" (row counter variable)
LCopyToRow = 2

While Len(Range("A" & CStr(LSearchRow)).Value) > 0

    'If value in column A = LSearchValue, copy entire row to "Master"
    If Range("A" & CStr(LSearchRow)).Value = LSearchValue Then

        'Select row in "Master" to copy
        Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
        Selection.Copy

        'Paste row into "Master" in row 2
        Sheets("Master").Select
        Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
        ActiveSheet.PasteSpecial


    End If

    LSearchRow = LSearchRow + 1

Wend

'Position on cell A3
Application.CutCopyMode = False
Range("A3").Select

MsgBox "All matching data has been copied to 2029."

Exit Sub

Err_Execute: MsgBox "发生错误。" Sheets("Master").Rows("2:2").EntireRowHidden = True ApplicationScreenUpdating = True

End Sub

【问题讨论】:

    标签: excel excel-2003 vba


    【解决方案1】:

    这取决于您在该行中粘贴的方式。

    如果你这样做

     Sheet1.Rows(2).Copy Sheet2.Rows(5)
    

    第 5 行隐藏的位置,粘贴后将取消隐藏。这样做的原因是第 5 行继承了第 2 行的属性。

    如果您使用特殊粘贴,则不会。看这个例子

     Sheet1.Rows(2).Copy
     Sheet2.Rows(5).PasteSpecial xlValues
    

    如果您想执行 PasteAll(场景 1),那么您将不得不再次隐藏该行,否则继续执行第二段代码。

    【讨论】:

    • +1 唯一解释为什么会发生这种情况以及如何预防的帖子。
    • 谢谢,这似乎是最好的答案。将使用粘贴特殊代码。
    【解决方案2】:

    假设您要隐藏的行位于名为“Sheet1”的工作表上,以下代码行将隐藏该行:

    Sheets("Sheet1").Rows("2:2").EntireRow.Hidden = True
    

    【讨论】:

    • 感谢您的帮助,我会在星期一回来工作时尝试。
    【解决方案3】:

    没有看到您的代码,我们无法判断是什么让 Row2 显示。但是如果你想让它在没有实际解决原因的情况下不显示,你可以执行以下操作:

    在宏的开头插入Application.ScreenUpdating = false

    然后在宏的末尾插入此替换 [SheetName] 作为工作表的实际名称:

    Sheets("[SheetName]").Rows("2:2").EntireRow.Hidden = True
    Application.ScreenUpdating = true
    

    这样该行将在更新屏幕之前再次隐藏,就像从未发生过一样。

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2023-01-12
      • 2019-01-11
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多