我意识到我无法复制和粘贴任何东西,因为我的宏存储其他东西或清除我的剪贴板。运行宏影响复制/粘贴(剪贴板)
我的宏与我的机器上的其他任务和应用程序“交互”,并不奇怪,就像关闭num-lock;这是SendKeys
的结果,您可以阅读关于它here和thread。或者正如我所说的那样,它会影响我的剪贴板或关闭Adobe Acrobat,或者如果我没有重启机器一段时间,就停在代码中间。我认为这是正常的,因为它吸收了大量的内存,并且超出了我正在打印的PDF格式,或者编辑导致“复杂格式化”的警告错误的图表,这些错误无法通过Application.DisplayAlerts = False
或甚至SendKeys {Enter}
来处理。
除了所有这些,我需要在宏运行时编辑报表,以及在运行时无法复制/粘贴的事实难以忍受。值得一提的是我需要复制一个范围并粘贴它(不能将范围分配给另一个范围),所以我在我的代码中复制/粘贴。我不确定究竟是什么导致了这一点,所以只是说在我的代码中Application.CutCopyMode
设置为False
。
编辑:这是一个过滤器和数据移动到新的工作表的一部分:
Sub Data_Filter(ic As Integer, sDate As Date, eDate As Date)
'Needs setup
ap.CutCopyMode = False
cr1 = ">=" & sDate
cr2 = "<=" & eDate
wsh.Range("$A$2:$AZ$315746").AutoFilter
wsh.Range("$A$2:$AZ$315746").AutoFilter Field:=1, Criteria1:= _
cr1, Operator:=xlAnd, Criteria2:=cr2
wsh.Range("$A$2:$AZ$315746").AutoFilter Field:=ic, Criteria1:="<>-"
wsh.Range(wsh.Cells(1, 1), wsh.Cells(1, 2).End(xlDown)).Copy
wsh1.Activate
wsh1.Range("A1").PasteSpecial xlPasteAll
For xx = 0 To 2
wsh.Activate
wsh.Range(wsh.Cells(1, ic + xx), wsh.Cells(1, ic + xx).End(xlDown)).Copy
Select Case wsh.Cells(2, ic + xx).Value
Case "Flow (MGD)"
ix = 1
Case "Depth (in)"
ix = 2
Case "Velocity (fps)"
ix = 3
End Select
wsh1.Activate
wsh1.Cells(1, 2 + ix).PasteSpecial xlPasteAll
Next xx
wsh.ShowAllData
wsh.Range("$A$2:$AZ$315745").AutoFilter
End Sub
问题:我认为问题是由拷贝将被保存在我的剪贴板该范围内造成记忆。纠正我,如果我错了。有没有办法解决这个问题,比如将复制的范围存储在其他地方而不是剪贴板内存中,以便我可以继续在我的机器上工作?
p.s.我很清楚选择/激活的缺点。
为什么你必须复制/粘贴并且不能直接将数据/内容/格式写入目标单元格/范围?在这里发布代码,也许我们可以帮助您重写代码,避免使用复制/粘贴? – Ralph
@Ralph我正在过滤我的表格,出于某种原因,当我复制/粘贴时,我没有在目标表单中获取过滤的值,但是直接写入时,它最终忽略了过滤器。 – Masoud
然后复制“可见单元格”。你的问题很不清楚/很难回答,因为有很多事情可以“重置”剪贴板,而且你没有向我们展示任何东西。一般的经验法则,如果你需要复制+粘贴东西,在你复制之后立即粘贴*不要去打开工作簿或者做其他20件事:一旦你复制了你想要的东西,接下来要做的事情是粘贴它。这就是说我不知道这与你的问题有什么关系。请[edit]澄清。接近1K代表似乎你现在应该知道这些事情。 –