フィブログ

うさんくさいプログラムの備忘録とか。

【EXCELVBA】セルの背景色を変更しようとしてちょっとハマった話

ふぃぶです。

 

ExcelVBA、使ってますか。

今回はフォームオブジェクトのチェックボックスをシートに配置して、チェックが切り替わったら背景色を変更するという単純な処理を書いてました。

 

チェックボックス変更時の関数をVBAで書いてスイッチオンしたらいきなりとまるデバッグモード

 

「1004:アプリケーション定義またはオブジェクト定義のエラーです」

 

 

・・・なんでやねん。

ThisWorkbook.WorkSheets("Sheet1").Range("A1:B20").Intertor.Color = 3

してるだけなんだけど・・・。

参照が違うのかと思いウォッチ式で見てみてもオブジェクト自体はとれる。

なんだろう、なんだろう・・・と小一時間ハマりました。

 

で、原因が何だったかというと

_人人人人人人人人_
> シートの保護 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄

そういやユーザがいじくれないように新たにシート保護を付けたんでした。
セルが保護されてるから色も変えられないようになっててエラー履いてたみたいです。
解除したら難なく通りました。

時間を返してくれ・・・


 

AWSランブックと戦う

ふぃぶです。

 

AWSのランブックと戦っているので戦闘ログを記載します。

現行試してるのはコレ。

----------------------------------------------------

Start

|

<ステップA(Describle LoadBarancers)>

|

<ステップB(Describle Listener)>

|

…

----------------------------------------------------

 

前ステップ(ステップA)の出力結果を次ステップ(ステップB)で使うにはどうすんの?

前ステップのoutputsパラメータに全部かけ。

全部一括で吐いたり、定義を飛ばすことはできないのか?

結論、無理そう。大人しく全部描きましょう。

→Selectorに$で型をStringMapに指定すればそれっぽいのがいけそうだった。

 

OutputのSelectorでLoadBarancer[*].LoadBarancerArnみたいな書き方すると怒られる

なんかダメぽ。JsonPath形式?で書くとうまくいくらしいよ。LoadBarancer..LoadBarancerArnって書くとStringList形式で持てるっぽい。

 

StringList形式のOutputがある場合、こいつの長さがほしい。

簡単に取得する方法は無さそうな雰囲気。

aws:executeScriptを活用してPythonスクリプトを書いてどうにかするしかないみたい。

スクリプト書くって結論だと何でもこれで解決できるじゃん・・・

 

Arnの数だけJSON定義動的に増やしたい。出来る?

無理(通常では)。やっぱスクリプト書けって事みたい。

 

 

 

 

 

ExcelVBAのレコードセット内にある文字列をセルにセットすると途中で切れる

ふぃぶです。

 

ExcelVBAからDB情報を取得して結果をセルに転記するなんてマクロを良く作ると思いますが、たまーにレコードセットの中身が全部セルに貼り付けられてない時があります。

 

ウォッチ式で確認するとレコードセットの中身はちゃんと取れてる。

でもセルに貼り付けるとセルには途中までしか貼れてない。

謎です・・・。

 

そんなわけで原因を調査しました。

文字列データはありふれたもので「申請します。よろしくおねがいします。」みたいな感じでした。

 

DBからコピペしてテキストに貼り付けたところ特におかしなところはなし。

ウォッチ式上のレコードセット値では「申請しま す。よろしくおねがいします。」

と、「ま」と「す」の間で謎の空白が入っていました。

(・だったか空白だったか忘れた)

これじゃね?

 

VB上のReplaceを使って空白除去などをしてみたが除去されない。

これ、何????

 

Mid関数で該当箇所を取り出しAsc関数でコードを確認したところ値が0でした。

0・・・NULLでした!

 

何かよくわからんですがNull文字が混入されていてこいつが悪さしてるっぽいです。

 

VBAではChrW関数を使えばコード値に応じた文字を取得できるので

Replace(  レコードセット, ChrW(0), "")

をして除去すればOKのはず。

 

というわけで問題解決!

なんなんだよこのnullは・・・。

 

AWS ChangeManagerの変更リクエスト作成する際、ランブックパラメータをプルダウンにできない

AWSのChangeManagerを使って変更リクエストを作成する際

事故防止のためのランブックのパラメータを手入力じゃなくてプルダウン選択しきにできないかなぁと模索してました。

(手打ちだと入力間違いが怖い)

 

ChatGPTに質問してみたところ雰囲気てきにはできそうでした。

 

手順に示された通り実装してみましたが、AllowValuesを設定しても何かプルダウンにならない。

「オートメーションの実行」からランブックを直に叩くときはプルダウン化してるので設定間違いではなさそう。

何が悪いのか・・・。

悩んだところ、AWS公式が用意しているランブックを確認してみることにしました。

公式ランブックでちゃんとできるなら自分の設定が間違ってることを切り分けできる!

 

今回採用したランブックは

AWS-BulkEditOptItems

です。

こいつはパラメータにAllowValuesを使ってるやつがあるのでこいつでテンプレートを作成して変更リクエストを作ってみました。

 

結果・・・!

 

プルダウンにならない!!

 

変更リクエスト時のパラメータプルダウン化は雰囲気的に無理っぽいです。

GPT嘘じゃん!残念。

 

出来るよ!という実績がある人は是非教えてほしい。

 

BigQueryのエラーと付き合う(EXISTS subquery is not spported inside join predicate.)

ふぃぶです。

 

最近BigQueryと付き合い始めました。

わんわんエラーで泣くやつでしたが最近ようやく慣れてきたので色々メモ書き。

 

EXISTS subquery is not spported inside join predicate.

なにこれ?

直訳すると「EXISTS サブクエリは結合述語内ではサポートされません。」

 

どうやらBigQueryでは、JOIN条件内で直接EXISTS句を使用することはサポートされていないっぽいです。

 

MAXレコードをLEFT JOINするときにめっちゃ不便やん・・・

 

 

 

 

 

FireFoxでYoutubeのトップ画面がローディングで固まる問題

ふぃぶです。

 

標題の件でクソみたいな時間を過ごしました。

何かわかりませんが、Firefoxでyoutubeのトップ画面が読み込みで固まってしまい何も表示されなくなりました。

 

症状分析

・Youtubeのホームに行くと固まってしまう。

・Firefox以外のブラウザでは正常に表示できる。

・Firefoxのプライベートブラウザを使用すれば正常に表示できる。

・F12でブラウザのコンソール確認(何かjsファイルでエラーが発生してる。原因はこれ?)

 

よくあるクッキーとかキャッシュの問題かしらと思い色々やってみましたが全然解決島線でした。

 

やってみたこと

youtube.comのクッキー、キャッシュ履歴削除

→変化なし

ブラウザの全期間履歴削除(履歴とデータ全項目指定)

→変化なし

ブラウザの再起動

→変化なし

about:configなどの設定変更

→どれもこれも変化なし。

アドオンなどを全部OFF

→変化なし。

 

どうにもならねぇ・・・。

 

最終的な解決法

再インストールを使用かと思いましたが、FireFoxのリフレッシュ機能を先に使ってみました。

メニュー→ヘルプ→他のトラブルシューティング情報→Firefoxのリフレッシュ

 

リフレッシュが完了したら何とか起動しました。

ホントいい加減にしてほしい・・・そろそろChromeに移行し時なのかな。

一応ブラウザのパスワード情報などは飛んでないですが、ログイン情報すっ飛んだので各所にINし直しです。

めんどーい・・・!

 

 

klist purge がコマンドラインから打てない罠。

ふぃぶです。

 

企業等のファイルサーバにアクセスする際、一回ログインすると資格情報がキャッシュされて別のアカウントでアクセスできなくなることが多々あります。

 

大体PC自体を再起動するかnet use [パス] /DELETE コマンドを叩けばなんとかなるんですが、net useで削除しても資格情報キャッシュが消せなくてどうにもならない時が多いです。

そういった時に即時反映するコマンドがklist purgeとなりますが

これがコマンドラインから叩くと上手く動かないことがありました。

 

その原因がJDKに存在しているklistツールでした。

 

klistコマンドを叩くとjava側のklistツールのほうが選ばれてしまい

javaのklistが引数不正でヘルプ情報を出力してきます。

 

これに気づくのがだいぶかかりました。

じゃあwindowsのklist使うにはどうするかと言うと、exeをフルパスで指定します。

C:\Windows\System32 に klist.exeがあるのでこいつを叩いてあげればOK

 

 

Windowsコマンドと同じもん作らないでほしい…。