Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : その他)
CreateObject("Wscript.Shell")での処理が直後にブレークポイントを入れないとコードどおりの動作にならない
投稿日時: 20/06/10 16:37:54
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
「Cube PDF」というソフトを使用してPDFにしているのですが、通しで実行するとデフォルトの保存先パスに保存されてしまいます。
ブレークポイントを入れて動作確認すると正しく認識しますが、ブレークポイントを入れる場所によっても保存先のパスがデフォルトのままのケースがあります。
 
この処理を一番最後に回したりしていますが同様で対処方法に苦慮している為、こちらに書き込みをいたしました。
どなたかアドバイスを下さる方がいらっしゃると幸いです。何卒宜しくお願い致します。
 
※下記に作成中のコードとどこでブレークポイントを入れると保存先の認識が変わってしまうか記載致します。
 
〜〜途中割愛〜〜
 
print_name = Application.ActivePrinter '現在使用しているプリンター名を取得する
             
ActiveWindow.SelectedSheets.PrintOut ActivePrinter:="CubePDF" 'cubePDFで印刷
              
Application.ActivePrinter = print_name '現在使用しているプリンター名を元に戻す
             
                 'pdf用のファイル名作成するのに、拡張子を削除
                 RateWB = Left(RateWB, InStrRev(RateWB, ".") - 1)
                 '拡張子をpdfに変更
                 RateWB = RateWB & ".pdf"
                  
                     'クリップボードにPDFのフルパスを記憶
                    With CB
                        .SetText RateWB
                        .PutInClipboard
                    End With
                     
                'CubePDFウィンドウが開いたか確認
                Do
                  cuhw = FindWindow("WindowsForms10.Window.8.app.0.6e8caf_r9_ad1", vbNullString) Loop While cuhw = 0
                 
                SetForegroundWindow cuhw 'CubePDFのウィンドウをアクティブ化
 
                    With CreateObject("Wscript.Shell") '保存先の所まで移動して名前をつける
                        .SendKeys "{TAB}"
                         .SendKeys "{TAB}"
                         .SendKeys "{TAB}"
                         .SendKeys "{TAB}"
                         .SendKeys "{TAB}"
            .SendKeys "^v" '貼り付け
                        .SendKeys "{ENTER}"
                     End With
 
                  Sleep 3000 ←ここより上でブレークポイント入れて止めると指定のパスに保存
                  MsgBox ("test") ←×ここ以降ブレークポイントを入れると保存先がデフォルトのまま
 
Call TEST ←×ここでブレークポイントでもダメ

回答
投稿日時: 20/06/11 09:00:14
投稿者: WinArrow
投稿者のウェブサイトに移動

>SendKeys
は、動作不安定という記事をよく見ます。
 
あまり期待しない方がよいと思います。

回答
投稿日時: 20/06/11 17:56:36
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
>ブレークポイントを入れて
と表現していますが、
Sleep 3000
は、時間稼ぎです。
Application.Wait NOw() + TimeValue("0:0:3") と同じです。
 
最後の
>.SendKeys "{ENTER}"
は、「変換」ボタンと思います。
PDFに変換する処理が終了するまで待つ・・・ということです。

投稿日時: 20/06/23 09:07:32
投稿者: Alice87

WinArrow様
 
遅くなりましたが、コメントありがとうございます。
 
>SendKeys
>は、動作不安定という記事をよく見ます。
  
>あまり期待しない方がよいと思います。
 
→結局、「Cube PDF」のデフォルトのパス(使用しているPCのデスクトップ上)に保存されてしまう現実を受け入れて、そこに保存されたファイルを本来保存させたいパスに移動させることにしました。