2017-05-01 145 views
0

我意識到我無法複製和粘貼任何東西,因爲我的宏存儲其他東西或清除我的剪貼板。運行宏影響複製/粘貼(剪貼板)

我的宏與我的機器上的其他任務和應用程序「交互」,並不奇怪,就像關閉num-lock;這是SendKeys的結果,您可以閱讀關於它herethread。或者正如我所說的那樣,它會影響我的剪貼板或關閉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.我很清楚選擇/激活的缺點。

+1

爲什麼你必須複製/粘貼並且不能直接將數據/內容/格式寫入目標單元格/範圍?在這裏發佈代碼,也許我們可以幫助您重寫代碼,避免使用複製/粘貼? – Ralph

+0

@Ralph我正在過濾我的表格,出於某種原因,當我複製/粘貼時,我沒有在目標表單中獲取過濾的值,但是直接寫入時,它最終忽略了過濾器。 – Masoud

+0

然後複製「可見單元格」。你的問題很不清楚/很難回答,因爲有很多事情可以「重置」剪貼板,而且你沒有向我們展示任何東西。一般的經驗法則,如果你需要複製+粘貼東西,在你複製之後立即粘貼*不要去打開工作簿或者做其他20件事:一旦你複製了你想要的東西,接下來要做的事情是粘貼它。這就是說我不知道​​這與你的問題有什麼關係。請[edit]澄清。接近1K代表似乎你現在應該知道這些事情。 –

回答

0

經過一段時間的處理這個問題之後,我開始意識到如果您需要複製/粘貼範圍(不僅僅是值),那麼對於這個問題沒有簡單的解決方法。

如果您需要移動格式或邊框或其他任何內容,而不是僅處理複製/粘貼,這會影響剪貼板,或嘗試迭代範圍並應用格式。格式如下所示;

Range("Destination1").NumberFormat = VarType(Range("Source1")) 
Range("Destination2").NumberFormat = VarType(Range("Source2")) 
'... 

但是,如果你不需要它們,那麼你可以這樣做如下:

Range("Destination").Value = Range("Source").Value 

在格式條款中,你也可以把它硬編碼的模塊中:

Range("Destination").NumberFormat = "hh:mm:ss" 

因此,基本上你需要將你正在做的事情複製/粘貼成片斷,並避免複製到剪貼板內存沒有問題。

+0

*你被複制範圍並粘貼它所詛咒*這在技術上並非如此。假設您可以識別*您想要複製的內容。當然,您可以對源執行單元格迭代並將所需的屬性從源分配到目標。 –

+0

@DavidZemens對於大約30萬行和50列,技術上並不合理。 – Masoud

+0

@DavidZemens但我會考慮你的評論和編輯我的答案。謝謝。 – Masoud