2021年9月3日金曜日

EXCELをパスワード保護すると出てくる「ファイルは次のユーザーによって保護されています」のユーザー名の文字列に個人名を出したくない場合には、EXCELのオプションで基本設定のMicrosoft Officeのユーザー設定の文字列を個人名でないものへ変更し、その後にパスワード保護を行えば良い。

 EXCELをパスワード保護すると出てくる「ファイルは次のユーザーによって保護されています」のユーザー名の文字列に個人名を出したくない場合には、EXCELのオプションで基本設定のMicrosoft Officeのユーザー設定の文字列を個人名でないものへ変更し、その後にパスワー ド保護を行えば良い。

 一度、設定したものは変更できないので、新たに設定することになるだろう。既にパスワードを設定したファイルの場合、パスワードを変更した時点で、その時点の「EXCELのオプション基本設定のMicrosoft Officeのユーザー設定の文字列に」変更されるのかもしれない。



 例えば、EXCELを第3者に提供する場合、パスワードをかけた個人の名前(図の中の黒塗りの箇所だ。ファイル名が個人名になっていて、ややこしいが、そこじゃないよ)になっていると、個人情報漏洩みたいで、実に具合が悪い。格好悪い。

 そこで、会社の略称なんぞにしたい。

 そんなときには、EXCELのオプションにある、基本設定のMicrosoft Officeのユーザー設定にある個人情報っぽい文字列を会社の略称みたいな文字列に変更した後、EXCELの保存メニューのツールでパスワードを指定し、新規ファイル保存すれば良いのだ。



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)を読んだ。他人を簡単に信用すると騙されてエラい目に遭うことになる。

 

2021年7月8日木曜日

accessのクエリで2つのフィールドの和や差をとるといった四則演算ができない現象を解決する物語

  accessのクエリで2つのフィールド(A,B)の和(A+B)や差(A-B)といった四則演算ができない現象に遭遇した。何故、たかが足し算や引き算が出来きんのかなぁ、何が原因なのだろうといろいろと試行錯誤した。計算ができない事態が起きている。その原因は何だろう。そして、突然、閃いた。クエリーで取ってきたフィールドの値がNullになっている箇所があり、それが故に計算できないのではないかと仮定してみた。何故、そんな都合よく、思いついたのか、わからない。

 兎も角、そこで、Nz(A,0)+Nz(B,0)1とかNz(A,0)-Nz(B,0)1という具合にNz関数を使用し、和や差をとってみた。そして、見事に計算できた。

 Nz(A,0)はフィールドAがNull以外ならば Aの値を、Nullならば0をセットする関数だ。つまり、Nullの代替値として0をセットし、Nullがあるが故に演算できないという事態を回避できる訳だ。

 逆に言えば、accessはNullが混じると四則演算といった単純な演算ができず、おまけに出来ないことを知らせるエラーメッセージさえも出さない(出せない)ヤツなので、自分で気が着くしかないということだ。    

 このNz関数が使いこなせるようになれば、access名人に向けて、「ワンランク昇格」だ。

 ここで、一息のコーナーは、ステーキの焼き方だ。

 1センチの肉を焼く時間は、片面1分30秒、もう片面は45秒。1センチ増すごとに+30秒だ。強火で、肉は常温に戻さない。フライパンに蓋をして、2分余熱で通す。