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

Excel 具有隐藏工作表名称的动态范围,excel,vba,range,hidden,worksheet,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

我正在尝试为一些手动输入创建一个归档选项。我有工作,但当档案被隐藏,然后我经历了一些问题

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
Sub-Archive()
Dim SDUMPSRANGE作为字符串
将图纸尺寸设为字符串
sDumpSheet=“活动存档”
如果范围(“C6”)为空,则
船首=图纸(sDumpSheet)。范围(“I1”)
如果船头>1,则
范围(“A2:E”和船头)。删除移位:=xlUp
其他的
如果结束
sDumpRange=“”&工作表(“活动存档”)和“!”&“A”和范围(“A5000”)。结束(xlUp)。行+1
'sDumpRange=“A”和范围(“A5000”)。结束(xlUp)。行+1
工作表(完成呼出)。范围(a10:e109)。副本
工作表(sDumpSheet).Range(sDumpRange).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank:=False,转置:=False
工作表(“完成呼出”)。范围(“a10:a109”)。ClearContents
工作表(“完成呼出”)。选择
范围(“A11”)。选择
其他的
MsgBox“数据未存档。请先选择您的姓名,然后重试。”
如果结束
端接头
有一个单元格计算有多少行的日期早于2个月,然后清除旧数据(删除带船头的部分)

我尝试了不同的方法,现在修改了
sDumpRange
,它不起作用,但当它起作用时,它看起来像是在错误的数据输入表中计算范围。这是从错误的单元(活动存档A11)复制到存档的10个。当刷新时,数据被覆盖,因为输入表也被清除。
键现在似乎在
sDumpRange
计算范围内。

隐藏工作表上的操作并非总是按预期完成。这当然适用于
PasteSpecial

要克服这一问题,您可以在脚本期间取消隐藏这些工作表,并在脚本完成后再次隐藏它们

在这一开始:

Sheets(sDumpSheet).Visible = xlSheetVisible
最后:

Sheets(sDumpSheet).Visible = xlSheetHidden
还知道,通过将值更改为
xlSheetVeryHidden
,可以从Excel中隐藏工作表,这样您只能从VBA代码或VBA窗口中取消隐藏它

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

这是显而易见的,因为它不再是
ActiveSheet
,因此我一直在唠叨

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

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

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


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

@Jean-FrançoisCorbett:Oh I will:D这条线路仍然给我带来问题。复制的单元格将复制到基于错误图纸计算的范围。我必须在某个地方添加一张正确的参考表。我移走了上面那一排。sDumpRange=“A”和Range(“A5000”)。结束(xlUp)。行+1
Range(“A5000”)
您没有正确限定它。它将始终引用活动表。请再次阅读我的答案。好的,那么如果该工作表被隐藏并且工作表受到保护,如何激活该工作表呢?我想我需要在s.DumpRange中添加工作表的详细信息。我以前在s.DumpSheet select中有一行,但在工作表被隐藏和保护时停止了工作。不确定如何更改我在上一条评论中提到的那一行以获得正确的范围dumprange。为什么需要激活它?你没有浏览我在上面的答案中给出的链接吗?我可以这样做,但我不希望在这个过程中看到其他的表单。此外,工作簿将受到保护,因此可能会崩溃。
Sheets(sDumpSheet).Range("A2:E" & pRow).Delete Shift:=xlUp