【问题标题】:Dynamic range with hidden worksheet name具有隐藏工作表名称的动态范围
【发布时间】:2013-11-18 22:15:42
【问题描述】:

我正在尝试为一些手动输入创建存档选项。我有那个工作,但是当存档被隐藏时,我遇到了一些问题。

Sub Archive()
Dim sDumpRange  As String
Dim sDumpSheet As String
sDumpSheet = "Active archive"
If Range("C6") <> Empty Then
    pRow = Sheets(sDumpSheet).Range("I1")
       If pRow > 1 Then
          Range("A2:E" & pRow).Delete Shift:=xlUp
       Else
       End If
    sDumpRange = "'" & Sheets("Active archive") & "'!" & "A" & Range("A5000").End(xlUp).Row + 1
   ' sDumpRange = "A" & Range("A5000").End(xlUp).Row + 1
    Sheets("call-outs completed").Range("a10:e109").Copy
    Worksheets(sDumpSheet).Range(sDumpRange).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("call-outs completed").Range("a10:a109").ClearContents
    Sheets("call-outs completed").Select
    Range("A11").Select
Else
    MsgBox "Data not archived. Please select your name first and try again."
End If
End Sub

有一个单元格计算有多少行日期超过 2 个月,然后清除旧数据(使用 pRow 删除部分)。

我尝试了不同的东西,现在 sDumpRange 已修改但无法正常工作,但当它正常工作时,它看起来像是在计算错误的数据输入表中的范围。那是十个被从错误的单元格(Active Archive A11)复制到存档。刷新时,数据被覆盖,因为输入表也被清除。 关键现在似乎在sDumpRange 计算范围内。

【问题讨论】:

    标签: excel vba range hidden worksheet


    【解决方案1】:

    但是当存档被隐藏时,我遇到了一些问题。

    这很明显,因为它不再是ActiveSheet,因此我一直在喋喋不休地谈论THIS

    您需要完全限定范围对象。例如,改变

    Range("A2:E" & pRow).Delete Shift:=xlUp
    

    Sheets(sDumpSheet).Range("A2:E" & pRow).Delete Shift:=xlUp
    

    否则它将从错误的工作表中删除行。

    同样,请在任何地方进行更改,并结合我上面提到的链接给出的建议。

    【讨论】:

    • @Jean-FrançoisCorbett:哦,我会的:D
    • 这条线仍然给我带来了问题。复制的单元格被复制到基于错误工作表计算的范围内。我必须在某处添加 sDumpSheet 作为正确的参考。我删除了上面的行。 sDumpRange = "A" & Range("A5000").End(xlUp).Row + 1
    • Range("A5000") 你没有正确限定它。它将始终引用活动表。请再次阅读我的回答。
    • 好的,那么如果该工作表被隐藏并且工作表受到保护,如何激活该工作表?我想我需要以某种方式添加到 s.DumpRange 工作表详细信息。我以前曾与 s.DumpSheet 选择一致,但当工作表被隐藏和保护时停止工作。不知道如何更改我之前评论中提到的那一行以使范围转储范围正确。
    • 为什么需要激活它?您没有浏览我在上面的答案中提供的链接吗?
    【解决方案2】:

    隐藏工作表上的操作并不总是按预期完成。 PasteSpecial 肯定是这样。

    解决此问题的方法是在脚本执行期间取消隐藏这些工作表,并在脚本完成后再次隐藏它们。

    在此开头:

    Sheets(sDumpSheet).Visible = xlSheetVisible
    

    最后是这个:

    Sheets(sDumpSheet).Visible = xlSheetHidden
    

    还知道您可以通过将值更改为xlSheetVeryHidden 来隐藏工作表,使其无法从 Excel 中看到,这样您只能从 VBA 代码或 VBA 窗口中取消隐藏它...

    【讨论】:

    • 我可以这样做,但我不希望在此过程中与其他一些床单一起眨眼。此外,工作簿将受到保护,因此可能会崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多