2017-05-01 10 views
0

マクロが何か他のものを保存したり、クリップボードをクリアしたりして、何もコピー&ペーストできないことに気付きました。マクロを実行するとコピー/ペースト(クリップボード)が影響を受けます

私のマクロは、num-lockをオフにするのと同じように、私のマシン上の他のタスクやアプリケーションと "対話"します。それはSendKeysの結果です。これについてはhereとなり、これはthreadとなります。または私が言ったように、それは私のクリップボードに影響を与えたり、Adobe Acrobatを閉じたり、私のマシンをしばらく再起動しなければコードの途中で停止したりするだけです。私はこれが普通のことだと思います。それ以上のメモリを吸い取って、PDFに印刷したり、複雑な書式設定の警告エラーを引き起こす図表を編集しています。Application.DisplayAlerts = FalseまたはSendKeys {Enter}で処理することはできません。

これら以外にも、マクロの実行中にレポートを編集する必要があります。また、実行中にコピー/ペーストできないという事実には耐えられません。

私は範囲をコピーして貼り付ける(範囲を別のものに割り当てることはできません)ので、コード内にコピー/貼り付けが必要です。私は正確に何が原因であるか分からないので、ちょうどApplication.CutCopyModeが私のコードでFalseになると言っています。

EDIT:

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もの作業をしたりしないでください。それを貼り付ける。それはあなたの質問にどのように関連しているのか分かりませんでした。明確にするために[編集]してください。 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技術的には、およそ300,000行と50個の列について考えられません。 – Masoud

+0

@DavidZemensしかし、私はあなたのコメントを検討し、私の答えを編集します。ありがとう。 – Masoud

関連する問題