带有隐藏工作表名称的dynamic范围

我正在尝试为某些手动input创build归档选项。 我有这个工作,但是当存档被隐藏时,我遇到了一些问题。

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 

有一个单元格计算有多less行与旧的date比2个月,然后旧数据正在清除(删除部分与pRow)。

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

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

这是显而易见的,因为它不再是ActiveSheet ,所以我一直在这个问题上

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

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

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

否则它会从错误的表中删除行。

同样,请在每个地方进行更改,并在上面提到的链接中joinbuild议。

隐藏工作表上的操作并不总是按预期完成。 这确实适用于PasteSpecial

你可以做些什么来克服这个问题是在你的脚本期间取消隐藏这些表,并在你的脚本完成后再隐藏它们。

在这个开始的时候:

 Sheets(sDumpSheet).Visible = xlSheetVisible 

而这最后:

 Sheets(sDumpSheet).Visible = xlSheetHidden 

也知道你可以通过将值更改为xlSheetVeryHidden来隐藏从Excel中看不到的表单,这种方式只能从VBA代码或VBA窗口中取消隐藏…