[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『イミディエイトウィンドウのクリア(VBA)につきまして』(すす)
お世話になります
件名:
イミディエイトウィンドウのクリア(VBA)につきまして
クリア方法の2種類を質問1、2にしました。
1の案は一行で短いので解決できればと思います。
もし、解決ができれば2の案としました。
1の案:
Application.SendKeys "^g ^a {DEL}" の所を一度、中断(ブレーク)します。
中断しましたらF8キーで継続(ステップ)しますとイミディエイトウィンドウはクリアされます。
※中断をF5キーで継続しますとイミディエイトウィンドウはクリアされませんでした。
質問1
Application.SendKeys "^g ^a {DEL}"
一行で短いのF8キーで中断(ブレーク)しないでイミディエイトウィンドウがクリアできればと思います。
※Excel2019 64bitを使用しています。OS Windows10
参考サイト
excel - Use VBA to Clear Immediate Window? - Stack Overflow
https://stackoverflow.com/questions/10203349/use-vba-to-clear-immediate-window
動作確認環境
Excel2016 16.0.7571.7063 64bit
2の案:
http://hasikure.blogspot.com/2016/12/excel2016.html
Set wd = Application.VBE.Windows("イミディエイト")の所で以下のエラーになります。
↓
実行時エラー '1004':アプリケーション定義またはオブジェクト定義のエラーです。
質問2
定義のエラーになるのか分かりません。
※「Microsoft Visual basic for Application Extensibility 5.3」にチェックを付けました。
※Excel2019 64bitを使用しています。OS Windows10
以上につきまして、宜しくお願い致します。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
直接の回答ではありませんので、スキップいただいて結構です。
不安定なSendkeysを使用しない案を参考までに。
Sub test() With Excel.Application.VBE .MainWindow.Visible = True With .Windows.Item("イミディエイト") .Visible = True .SetFocus End With .CommandBars.FindControl(msoControlButton, 756).Execute .CommandBars.FindControl(msoControlButton, 478).accDoDefaultAction End With End Sub
実行に際しては、 Excelのオプション − トラストセンター − トラストセンターの設定 VBAプロジェクト オブジェクトモデルへのアクセスを信頼する にチェックを入れる 必要があります。
なお、 (1)この設定はマクロウイルスに対して脆弱なので実行後元に戻すべきという意見と、 (2)そういうコードでCtrl+A Deleteを代替するのは開発者だけだろうから、 さほど心配することもないという意見 があるようです。
私はそもそも、コードの実行の前に、手でCtrl+A Deleteすることで十分というアナログ派です。
(γ) 2020/01/16(木) 09:39
ご返答して頂きまして、ありがとうございました。
1の案:
Application.SendKeys "^g ^a {DEL}"
一行で短いのF8キーで中断(ブレーク)しないでイミディエイトウィンドウがクリアできればと思います。
自分なりにイミディエイトウィンドウがクリアされない理由が分かりました。
理由:
推測になりますが、F8キーではイミディエイトウィンドウ 選択状態ですがF5キーではイミディエイトウィンドウが選択できなくなったと思われます。
そこでApplication.SendKeys "^g ^a {DEL}" の前に[ イミディエイトウィンドウ ] を選択する [ Ctrl ] + [ G ] ボタンApplication.SendKeys "^c ^g"を追加しましたらイミディエイトウィンドウがクリアできました。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
(1)この設定はマクロウイルスに対して脆弱なので実行後元に戻すべきという意見と、
(2)そういうコードでCtrl+A Deleteを代替するのは開発者だけだろうから、
さほど心配することもないという意見があるようです。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
イミディエイトウィンドウの使用は作成者ですので、それほど心配の必要は無いと思われました。
情報提供は参考にさせてもらいます。感謝申し上げます。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
私はそもそも、コードの実行の前に、手でCtrl+A Deleteすることで十分というアナログ派です。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
そうですか、はい分かりました。
自分なりにクリアされない理由が分かりましたので解決と致します。
ありがとうございました。
(すす) 2020/01/16(木) 11:04
| そこでApplication.SendKeys "^g ^a {DEL}" の前に[ イミディエイトウィンドウ ] を選択する [ Ctrl ] + [ G ]
| ボタンApplication.SendKeys "^c ^g"を追加しましたらイミディエイトウィンドウがクリアできました。
今のコードでも、Ctrl+g は命令を送っているわけですが、
その前に重ねてやらないとダメということなんですか?
SendKeysはタイミングに依存するのでハンドリングが難しい側面があります。
私の提示したものは、SendKeysを使わずに実現できるはずです。
(γ) 2020/01/16(木) 13:29
度重ね、ご返答して頂きまして、ありがとうございました。
| そこでApplication.SendKeys "^g ^a {DEL}" の前に[ イミディエイトウィンドウ ] を選択する [ Ctrl ] + [ G ]
| ボタンApplication.SendKeys "^c ^g"を追加しましたらイミディエイトウィンドウがクリアできました。
| 解決されたようですが、確認のため。
はい、済みません。解決出来ていませんでした。
| そこでApplication.SendKeys "^g ^a {DEL}" の前に[ イミディエイトウィンドウ ] を選択する [ Ctrl ] + [ G ]
| ボタンApplication.SendKeys "^c ^g"を追加しましたらイミディエイトウィンドウがクリアできました。
イミディエイトウィンドウがクリアされた後にイミディエイトウィンドウに指定セルデーターが一瞬表示されますが、即イミディエイトウィンドウがクリアされます。
Application.SendKeysをkeybd_eventに変更して試しても同じく一瞬表示されますが、即イミディエイトウィンドウがクリアされます。
調べていますが分かりません。
| SendKeysはタイミングに依存するのでハンドリングが難しい側面があります。
はい、keybd_eventも同じくタイミングに依存するのでハンドリングが難しいものと考えました。
| 私の提示したものは、SendKeysを使わずに実現できるはずです。
はい、以下で試しました。トラストセンター (セキュリティセンター)初めて知りました。
使い方、説明、誤りがありましたら申し訳ありません。
手順1:
Excel2019 Excelのオプション − トラストセンター − トラストセンターの設定 − マクロの設定 − [開発者向けのマクロ設定] VBAプロジェクトオブジェクトモデルへのアクセスを信頼するにチェックを入れました。
Sub test()
With Excel.Application.VBE .MainWindow.Visible = True With .Windows.Item("イミディエイト") .Visible = True .SetFocus End With .CommandBars.FindControl(msoControlButton, 756).Execute '※1 .CommandBars.FindControl(msoControlButton, 478).accDoDefaultAction End With End Sub
Private Sub CommandButton8_Click()
test
手順2:
CommandButton8_Clickを実行しますと以下の様になりました
※1 .CommandBars.FindControl(msoControlButton, 756).Executeの実行後 イミディエイトウィンドウの上のウィンドウがCommandButton2に変わりウィンドウ全部が範囲選択されました。
済みません。お手数をお掛けしております。
(すす) 2020/01/16(木) 16:28
ご返答をして頂きまして、ありがとうがざいました。
| すまない、私の手元ではそうしたことが再現できないので、わかりません。
いいえ、こちらこそ申し訳ありませんでした。
| 私はそもそも、コードの実行の前に、手でCtrl+A Deleteすることで十分というアナログ派です。
私も、コードの実行の前に、手でCtrl+A Deleteすることにします。
知らないことを、ご指導してもらい色々お世話になりました。深く感謝申し上げます。
すす
(すす) 2020/01/16(木) 17:03
訂正、お詫び申し上げます。
訂正:
各ボタン毎に設定しますと※1は発生しませんでした。
| ※1 .CommandBars.FindControl(msoControlButton, 756).Executeの実行後 イミディエイトウィンドウの上のウィンドウがCommandButton2に変わりウィンドウ全部が範囲選択されました。
イミディエイトウィンドウのクリアとデータ表示を同時に考えていましたのでCommandButton1にしました。
仕様なのかよく分かりませんがCommandButton1にしますとVBEのイミディエイトウィンドウがクリアされデータ表示しますが即、表示が消えます。
以下の様にイミディエイトウィンドウのクリア及びデータ表示を各ボタン毎に設定しますと問題なくイミディエイトウィンドウがクリアされました。
With Excel.Application.VBE
.MainWindow.Visible = True With .Windows.Item("イミディエイト") .Visible = True .SetFocus End With .CommandBars.FindControl(msoControlButton, 756).Execute .CommandBars.FindControl(msoControlButton, 478).accDoDefaultAction End With
Private Sub CommandButton1_Click()
CommandButton2_Click()'イミディエイトウィンドウのクリア
CommandButton3_Click()'イミディエイトウィンドウに指定セルデータ表示
End Sub
Private Sub CommandButton2_Click()
'イミディエイトウィンドウのクリア
With Excel.Application.VBE .MainWindow.Visible = True With .Windows.Item("イミディエイト") .Visible = True .SetFocus End With .CommandBars.FindControl(msoControlButton, 756).Execute .CommandBars.FindControl(msoControlButton, 478).accDoDefaultAction End With
End Sub
Private Sub CommandButton3_Click()
'イミディエイトウィンドウに指定セルデータ表示
Dim SS(10) As String Dim S As String Dim II As Long Dim III As Long
S = Range("C984").Value
Debug.Print " ";
Debug.Print S Debug.Print " "; "HEX →"; " ";
For II = 1 To Len(S)
SS(II) = Mid$(S, II, 1) Debug.Print Hex(Asc(SS(II))); " ";
Next II
Debug.Print vbLf; " DEC →";
For III = 1 To Len(S)
SS(III) = Mid$(S, III, 1) 'Debug.Print vbLf;
Debug.Print Asc(SS(III));
Next III
Debug.Print vbLf End Sub
(すす) 2020/01/17(金) 08:06
テストで試しました。
Private Sub CommandButton1_Click()
CommandButton2_Click()'イミディエイトウィンドウのクリア
CommandButton3_Click()'イミディエイトウィンドウに指定セルデータ表示
End Sub
実際は以下の様に使用していました。
↓
Private Sub CommandButton8_Click()
イミディエイトウィンドウのクリア
・ ・ ・ イミディエイトウィンドウに指定セルデータ表示 ・ ・ End Sub
(すす) 2020/01/17(金) 09:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.