1

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

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计算之中。

4

2 回答 2

2

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

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

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

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

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

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

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

于 2013-11-07T10:16:23.603 回答
0

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

为了克服这个问题,您可以做的是在脚本执行期间取消隐藏这些工作表,并在脚本完成后再次将它们隐藏起来。

在这开头:

Sheets(sDumpSheet).Visible = xlSheetVisible

最后是:

Sheets(sDumpSheet).Visible = xlSheetHidden

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

于 2013-11-07T10:12:51.517 回答