2021年8月31日火曜日

vbaでEXCELのウィンドウ左下隅にあるステータスバーに進行状況(例:処理中ファイル名など)を表示し、今やってますよと説明責任を果たす。

Application.StatusBar = "処理中..." & fileName(例とし、処理対象のファイル名)で進行状況を出し、終わったら、Application.StatusBar = False でクリアしておく。

face












2021年8月25日水曜日

Windows DOSコマンドでできるワンラインコマンド :特定フォルダのtxtファイルを結合する1発コマンド、しかもファイル名付きで。そして、末尾の2>&1は暗号のようにワンラインぽっく絶妙。

 type *.txt > all.txt 2 >&1


WhiteSuitsBoy202108
 vbaのスニペットをイミディエート・ウィンドウに出す方法をググッたら、スニペットにしたいコードの塊をFunctionとして、1行ずつをdebug.print で” (ダブルクォーテーション)で挟んだモジュールを作成する(Funtionの頭文字をユニークな文字列にしておく)というノウハウが紹介されていた。
 その際、コードの中に” (ダブルクォーテーション)があれば、それをエスケープしれおくという注意書きがあった。それは、” (ダブルクォーテーション)を2回続けることだ。その隣に文字列の「開始」或いは「終了(締め)」としての” (ダブルクォーテーション)があると、3回 ” (ダブルクォーテーション)が連続することになるという訳だ。


2021年8月21日土曜日

vbaでタイム計測


 基本のコードは、以下のとおり。

Debug.print Time&"-XXXXXXXX(Process Name) started"
    (VBA codes)
Debug.print Time&"-XXXXXXXX(Process Name) completed

  VBAデバッグのイミディエートウィンドウには200行ぐらいしか出力(ログ)できないので、テキストファイルに出力する、自分専用のログ出力ルーチンを作るのが良い。

 こんな感じでもいいかも

Dim sTime,eTime,pTime as Double
    sTime = Time
    (procces)
    eTime = Time
    pTime = eTime - sTime
    Debug.Print "所要時間:" & Minute(pTime) & "分" & Second(pTime) & "秒"

  ベランダ菜園の唐辛子は、花が咲き始めているのに8月の長雨というか、今年二度目の梅雨?のために、唐辛子の実がつかない。自然は思う通りにならない。

後日談。長雨の後、虫にやられました。全滅。こまめに面倒見ないと駄目ですね。虫が出たら、木酢液を掛けないとね。来年、リベンジします。

boy202108

2021年8月20日金曜日

DOSバッチのSET 文で「無効な数字です」と怒られたが、それは先頭0 を勝手に8進数とみなし08は8進数じゃないよと怒るマイクロソフトのバグ。でも直すのは、ワタシのバッチという矛盾に辿り着き、100を足して100を引くまでの物語。

  これまで快調に動作していた、ワタシのDOSバッチ。2021年08月になると、突然、動かなくなってしまった。新型コロナウィルスのせいではない。ワンステップずつ、動かして見ると、

SET /A MM=%DATE:~5,2%*1

のSET文で、

SET /A MM=08*1
「無効な数値です。数値定数は10進(17桁)、16進(0x11桁)、または8進(021桁)です」

というエラーが出る。昨日までちゃんと動いていたのにだ。早速、ググってみた。そして、また、先人たちの教えに助けられた。どうも、先頭に0が付くと、8進数とみなすようだ。つまり、8月になり、DATE関数から得た月を示す定数となる部分である「%DATE:~5,2%」が08という定数になってしまった。先頭に0が付いてる8進数の定数なのに、08とはけしからんというわけだ。08は8進数じゃないよと怒っているのだ、(マイクロソフト)なので、先人の教えどおりに、100を足して、100を引いてみた。つまり、

SET /A MM=1%DATE:~5,2*1-100

とワタシの方が変更してみた。これで定数部分が08になることを回避する訳だ。そしたら、見事に動いた。ここまで辿り着くのに、色々、あって半月も要した。

  先頭に0があるから、8進数だと思うのは、マイクロソフトのバグ(コンピュターの黎明期の低級な言語ではよくある陳腐な前提だが、今の時代でも開き直ってる)だが、結局、直すのは、いつも、ワタシの方で、ワタシのDOSバッチである。 もう1つ疑問なのは、昨年の08月にワタシのバッチは異常を訴えなかった。もしかして、マイクロソフトは、パッチで1回修正したのに、それが最近、ハズレたのかなぁ。

  ここでちょっと一息のコーナー。ベランダ菜園の唐辛子の隣に見慣れない蔓草。パプリカかと思つて引き抜いたら、じゃがいもみたいなので、戻しておいた。しばらく、様子を見ることにする。

  もう1つ。関東圏からから関西圏へ引越し、はや2年。関東の醤油ラーメンが恋しい。あのキレのある、しっかりした醤油味のラーメンは、関西にはない。とても残念だ。なぜ、関西の醤油ラーメンは甘たるい醤油味なんだろうね。

canbusgirl20211001




2021年8月12日木曜日

vba で「byRef引数の型が一致しません。」を解決するまでの物語

 EXCEL vba でツールを作っていたら、「byRef引数の型が一致しません。」というエラーが出た。しかし、自分のコードを何回、確認しても型の不一致は見当たらない(不幸にも型の不一致がある場合には型を合わせれば良いだけだ)。そこで、ググってみた。型をなんでもOKのvariantにするといいらしい。やってみたら、文句は言わなくなった。果たして、それでいいのか?納得がいかない。そこで、再び、ググってみた。これらのページに辿り着き、回避できた。

http://blog.subnetwork.jp/?p=1298

http://tsuchida0815.blogspot.com/2008/03/excelvba.html

 結論は、マイクロソフトのバグのようだ。

 そして、上記のページで示されていた解決方法に従い、Dim 変数1,変数2 As Stringと1行にまとめていた宣言をDim 変数1 As Stringと Dim 変数2 As Stringの2行にしてみた。文句が出なくなった。動いた。

 ちなみに、マイクロソフトの説明は、以下で、つまりは、呼び出し元と呼び出し先で型宣言が異なるというものしかなく、そうでない場合に対しては、説明が珍紛漢紛(チンプンカンプン)だ。なんのこっちゃ。https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/byref-argument-type-mismatch

 ここで、一息のコーナー。姫女苑(ヒメジョオン)は、キク科の雑草だ。似たものにハルジオンというのがあるそうだ。ググって見たら、とてもよく似ている。それは、区別できそうでもあり、そうできそうにもない。

carrot20211019

 ロバート・ゴダードの「惜別の賦」(Beyond Recall,1997)を読んだ。他人を簡単に信用すると騙されてエラい目に遭うことになる。