dosバッチのログはcmd >> log.txt 2>&1でexcel vbaツールのログはdebugprintモジュール(debug.printで変数の内容や状況を適宜、出力する)で取得する。 ログを取るのは自己防御のためである。正しい処理をしているのか、何かトラブルが発生してから対策するのではなく、日頃から自分が何をしたかトレースできる仕組みを構築しておくことが肝要である。 excel vbaの場合、application.statusbar="文字列"でツール画面の左下隅に進行状況を知らせる文字列を出力する。内部トレースのモジュール(debugprint)を作り、そのトレース情報をツールと同じフォルダのdebugprint.txtに出しつつ、application.statusbar=にも設定し、ツール画面の左下隅に出すのも面白いかもしれない。
2025年2月18日火曜日
2025年2月13日木曜日
昔はdir("*.xls*")でxlsやxlsxやxlsmも検出できたと記憶している。ところが今はdir("*.xlsx*")と書かないとxlsに加えてxlsxを検出できない。本当かな?
昔はdir("*.xls*")でxlsやxlsxやxlsmも検出できたと記憶している。ところが今はdir("*.xlsx*")と書かないとxlsに加えてxlsxを検出できない。本当かな?
2025年1月30日木曜日
vbaでAppActivate [title]とSendKeys {TAB} or {ENTER}等々で基幹システムへのログイン、検索といった様々な画面の操作を簡単に自在に操る。
SendKeysとAppActivateの組み合わせでRPAを実現してみた。ポイントは{TAB}と{ENTER}だ。{TAB}や{矢印キー}でカーソルを移動させ、{ENTER}でボタンを押下すれば良いのだ。そして、表示が出てくるのを待つのはApplication.Waitが簡単だが、WindowAPIで画面のボタンのハンドルIDをゲットし、ボタンの状態(アクティブか否か)を得ることができれば、確実に画面表示を待つことができる。
- まず、AppActivate [title(画面タイトル)]で操作したい画面を捕まえる。AppActivate "ログイン"
- そして、SendKeys {TAB}を繰り返し、目的の場所へカーソルを動かす。SendKeys (TAB 2] ・・・2回タブ
- さらに、SendKeys nn(数値)で設定したい値にする。
SendKeys ID001でロウインIDを設定する。 - ふたたびSendKey {TAB}を繰り返し、実行ボタンに辿り着く。SendKeys 1234でパスワードを設定する。
- そして、SendKeys {ENTER}で実行ボタンをクリックする。SendKeys {ENTER}でログインボタンをクリックする。
- 検索のボタンをクリックした後、検索結果の画面が表示されるのを待つには、Application.Waitを使うのが一番、簡単である。Application.Wait Now() + TimeValue("00:00:03")と書くと、3秒待つことができる。
- windowsAPIの関数を駆使し、検索のボタンのハンドルIDを探すと、確実にボタンの操作することができる。
- また、検索結果の表示ボタンのハンドルIDが取得できれば、そのボタンがアクティブか否かを検出することで、検索結果の画面を待つことができる。 以上のようなことをvbaのモジュールに記述すればよい。時々、Appactvateで操作したい画面が捕まらないとか、不可解な現象が発生することがあるので、過信は禁物だ。たまに動かないことがあるので、確認しながら使うのが宜しいと思う。
2025年1月22日水曜日
vba application.FileDialogでフォルダを設定する
menuシートのB5セルにファイルせんたくのダイアログを使用して、出力用のフォルダを設定する。
Sub SetFolder()
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
Worksheets("menu").Range("B5") = .SelectedItems(1)
End If
End With
End Sub
2025年1月14日火曜日
達人の「うどん」レシピ
達人のうどんレシピは、12%の塩水でコネて、ひと晩寝かせる。 分量をきちんと守る。これが鉄則だ。 作り方は、以下のとおりだ。 材料を揃えたら、全部、混ぜる。こねて、ひとつの玉(団子)にまとめる。ビニール袋(ジップロック)に入れて、新聞紙の上に置く。タオルを被せて、100回足で踏め。ビニール袋から取り出して、ひとつの玉にして、袋に戻す。タオルをかけて100回踏む。これをもう8回繰り返せ。つまり、1000回踏む事になる。タオルに巻いてひと晩寝かせよ。翌朝、取り出し、綿棒で伸ばせ。好みの太さで切れ。たっぷりのお湯で茹でよ。10分ぐらいかな。麺つゆを好みの濃さにお湯で薄めて、ネギに生姜、七味を加えて、茹でたうどんを浸して啜れ。旨いぞ、釜揚げうどんだ。
- 水 86g 塩 10g
- 強力粉 120g 薄力粉 80g
2024年12月14日土曜日
vbaツールはセキュリティソフトHP Sure Click Secure View環境では様々な意味不明なエラーが出る。
Gogle AIによると、
- HP Sure Click Secure Viewは、HP Sure Click Secure Browsing拡張機能やHP Sure Click Secure Browserでファイルを開いた際に表示されるメッセージです。ファイルはマイクロVM(仮想マシン)に隔離されて編集可能なモードで起動するため、マルウェアやウィルスなどの脅威から保護されます。
2024年11月21日木曜日
vba ファイルのフルパスはApplication.GetOpenFilenameでゲットせよ
vbaでファイルを扱うツールを作成する場合、入力となるファイルをmenuシートの特定セル(例えば、A10セル)にフルパスで書いてもらうといった作りになる。
ところが、フルパスのファイル名を指定することは、長々と文字列を書くことになり、意外と面倒くさい。そこで、A10セルの隣のセルに(ファイル)選択とか(フォルダ)参照とかいったボタンを作成し、サクッとGUI画面で設定できるようにしたい。
それを実現するため、ファイル選択ダイアログ(GUIだ)でファイルを選択し、そのファイルのフルパスを取得し、A10セルに設定するコードを書く。こんな感じで。
このコードを選択ボタン或いは参照ボタンにマクロ登録すれば、もう、完成だ。
Sub GetFileName()
Dim FileName as Variant
FileName = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx?")
If FileName = False Then Exit Sub
Range("A10").Value = FileName
End Sub
フォルダ選択ダイアログFileDialogとDir関数、ワイルドカード「*」を使う方法もある。