[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『大きな範囲を値貼り付けすると残像(?)が表示される』(てつ)
マクロで、あるブックから別の同じ名前のシートに大きな範囲を 値貼り付けをしたところ 一部のセルに残像(?)が見られました。 残像は、別のセルにあった文字列です。 Workbooks(ファイル名).Worksheets(シート名).Activate Set WWR1 = Range(Cells(3, 10), Cells(最終行, 85)) Set WWR2 = Workbooks(ブック名).Worksheets(シート名).Cells(3, 10) WWR1.Copy WWR2.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'データをすべて値貼り付け
残像(?)は、プレビューして戻ると消えます。 また、改ページプレビューして 標準に戻ると消えます。 しかし、これらを記録したマクロを組み込んでも、 残像(?)は残ったままです。 もちろん、いったん閉じて、再び開くと消えています。 どのようなマクロを組み込めば、残像(?)の表示をなくすことができるでしょうか? よろしくお願いします。 なお、プロセッサは i5 で8ギガのメモリです。
< 使用 Excel:Excel2010、使用 OS:Windows8 >
こちらのxl2010で試しましたが、特に「残像」というものは見えませんが? こちらでは10000行ぐらいで試しました。
そちらの実行では、どのシートのどこに残像が残るのですか?
(β) 2015/07/04(土) 18:33
単に画面の再描画が追い付いてないだけでは? 一旦ウィンドウを最小化して再び表示させたらリフレッシュ されてませんか? (カリーニン) 2015/07/04(土) 18:59
K列の一部がCB列に表示されています。 手動でウィンドウを最小化して再び表示させたら 残像が消えます。 Application.WindowState = xlMinimized Application.WindowState = xlMaximized をマクロの中に挿入しても残像は残っています。 どのようなマクロを入れればよいでしょうか (てつ)
プロシジャの先頭に Application.ScreenUpdating = False を記述してみると、どうなりますか?
(β) 2015/07/04(土) 20:55
先頭に Application.ScreenUpdating = False を記述しても 残像は同じです。 一つ訂正です。 K列の一部がCB列に表示されています。(誤り) CC列の一部がCB列に表示されています。(正しい) 画面を再描画させるマクロが入れば、うまくいきそうなのですが... (てつ)
CC列をクリックすると、縮小化されていた文字が大きく出てきました。 その一部がCB列に残っていたことが分かりました。 どうすれば、マクロで表示させなくできるでしょうか? (てつ)
>>画面を再描画させるマクロが入れば、うまくいきそうなのですが...
じゃぁ、下手な鉄砲数打ちゃあたるで、
Application.ScreenUpdating = True をいれるとか。
再描画が原因ならば という前提ですが。 こちらでは、そういったことが、そもそも発生していないので。 別に原因があるのかもですよ。
(β) 2015/07/04(土) 22:13
Application.ScreenUpdating = True をいれてみたのですが... 同じです。 (てつ)
わかりませんねぇ・・・(繰り返しますが、こちらでは、そういった現象がでていないので)
・あえて、転記元か転記先かわからないのですが、残像の出るブックではないほうのブックをアクティブブックにして処理。 ・あるいはコピペではなく、配列に転記元領域をいれ、そこから転記先に落とし込む。
こうされてはいかがですか?
(β) 2015/07/04(土) 22:38
・アクティブブックを変えてみましたが、同じです。 ・配列のやり方が分かりません。調べてみます。 なお、CC列がセルの幅に比べて文字列が長くて、隣のCBセルが空欄になっている時、 CBセルに残像が残るようです。 (てつ)
>>配列のやり方が分かりません。調べてみます。
こんな感じです。
Sub Sample() Dim v As Variant Dim shF As Worksheet Set shF = Workbooks("転記元ブック名.xlsx").Sheets("転記元シート名") v = shF.Range("J3", shF.Cells(最終行, "CG")).Value Workbooks("転記先ブック名.xlsx").Sheets("転記先シート名").Range("J3").Resize(UBound(v, 1), UBound(v, 2)).Value = v End Sub
(β) 2015/07/04(土) 23:14
配列の Sample ありがとうございます。 やってみましたが、やはり残像の残る部分があります。
(てつ) 2015/07/05(日) 09:14
Application.WindowState = xlMinimized doevents:doevents Application.WindowState = xlMaximized doevents:doevents
なんて入れてみるとどうでしょうか?
ハード(ヴィデオカードやデバイスドライバ)の故障(又は、Vramメモリ不足)も疑ってみては?
(ichinose) 2015/07/05(日) 10:02
>手動でウィンドウを最小化して再び表示させたら >残像が消えます。
これが本当だとしたら、考えられるのは、
標準モジュールに
Sub Test() ' 残像がある処理 Application.WindowState = xlMinimized Application.OnTime Now() + TimeValue("00:00:01"), "app_max" End Sub Sub app_max() Application.WindowState = xlMaximized End Sub
こんなところでしょうか
(ichinose) 2015/07/05(日) 20:27
Testを組み込んでみました。 app_maxが動作しないで、最小化されたままで、 デスクトップからエクセルがなくなりました。 タスクバーのエクセルをクリックすると出てきましたが、 残像は残っていました。
やはり、これはハードの故障ということでしょうか。
(てつ) 2015/07/05(日) 21:16
>app_maxが動作しないで、最小化されたまま 貼付けが何かOntimeの邪魔をしているのでしょうかねえ!!
手動でウィンドウを最小化して再び表示させる代わりに
Sub app_min() Application.WindowState = xlMinimized Application.OnTime Now() + TimeValue("00:00:01"), "app_max" End Sub Sub app_max() Application.WindowState = xlMaximized End Sub
上記のapp_minを実行させると 残像現象がなくなりますか?
これも駄目なら、私の方法では駄目ですね!!
ハードの問題は確かに疑うべきですが、 手動操作でできるなら、VBAでも可能ではないか
と思い、色々と思いついたことを試行していただいています。
(ichinose) 2015/07/06(月) 08:54
(てつ) 2015/07/06(月) 17:57
では、2例ほど・・・。
例1
Sub Test() ' 残像がある処理 doevents:doevents Application.OnTime Now() + TimeValue("00:00:01"), "app_min" End Sub Sub app_min() Application.WindowState = xlMinimized Application.OnTime Now() + TimeValue("00:00:01"), "app_max" End Sub Sub app_max() Application.WindowState = xlMaximized End Sub
例2
Option Explicit Private Declare Function SetTimer Lib "user32" _ (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" _ (ByVal hWnd As Long, ByVal uIDEvent As Long) As Long Private id As Long Private cnt As Long 'コールバック処理 Sub app_min_max(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long) If cnt Mod 2 = 0 Then Application.WindowState = xlMinimized Else Application.WindowState = xlMaximized KillTimer 0, idEvent End If cnt = cnt + 1 End Sub Sub exec_min_max() cnt = 0 id = SetTimer(0, 0, 10, AddressOf app_min_max) Debug.Print "id = " & id End Sub Sub kill_min_max() '終わらなかったら これを実行 KillTimer 0, id End Sub
Sub Test() ' 残像がある処理 doevents:doevents exec_min_max End Sub
例1 例2 共に Testを実行
これで駄目なら 撃沈です(こっちで試せないので)
(ichinose) 2015/07/07(火) 01:36
ともに試してみましたが、 うまくいきませんでした。 とりあえず、手動で消すことができますので、 それで間に合わせようと思います。 色々とありがとうございました。 (てつ) 2015/07/07(火) 22:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.