隐藏工作表名称的动态范围

时间:2013-11-07 10:07:03

标签: excel vba range hidden worksheet

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

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计算范围内。

2 个答案:

答案 0 :(得分:2)

  

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

这很明显,因为它不再是ActiveSheet因此我一直在努力THIS

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

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

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

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

同样,请在每个地方进行更改,并根据我上面提到的链接纳入建议。

答案 1 :(得分:0)

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

您可以采取哪些措施来解决这个问题,在脚本执行期间取消隐藏这些工作表,并在脚本完成后再将其隐藏起来。

在开头的时候:

Sheets(sDumpSheet).Visible = xlSheetVisible

最后这个:

Sheets(sDumpSheet).Visible = xlSheetHidden

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