我正在尝试为一些手动输入创建一个存档选项。我让它正常工作,但是当归档文件被隐藏时,我遇到了一些问题。
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被修改了,它不工作了,但当它工作时,它看起来像是在错误的数据输入表中计算范围。这是从错误的单元(活动归档A11)复制到归档的10个。并且当刷新时,数据被覆盖,因为输入表也被清除。现在,关键似乎在sDumpRange计算范围内。
发布于 2013-11-07 18:16:24
但是当归档文件被隐藏时,我遇到了一些问题。
这是显而易见的,因为它不再是ActiveSheet,因此我不断地谈论THIS
您需要完全限定range对象。例如,更改
Range("A2:E" & pRow).Delete Shift:=xlUp至
Sheets(sDumpSheet).Range("A2:E" & pRow).Delete Shift:=xlUp否则,它将从错误的工作表中删除行。
同样,请在每个地方进行更改,并结合我上面提到的链接的建议。
发布于 2013-11-07 18:12:52
隐藏工作表上的操作并不总是按预期完成。这对于PasteSpecial来说无疑是正确的。
为了克服这个问题,您可以在脚本执行期间取消隐藏这些工作表,并在脚本完成后再次隐藏它们。
在开始的时候:
Sheets(sDumpSheet).Visible = xlSheetVisible最后是这样的:
Sheets(sDumpSheet).Visible = xlSheetHidden还可以通过将值更改为xlSheetVeryHidden来隐藏工作表,这样您只能在VBA代码或VBA窗口中取消隐藏它。
https://stackoverflow.com/questions/19833046
复制相似问题