Excel VBA 質問スレ Part82

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2025/01/24(金) 03:31:15.25ID:l239yW+P
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

次スレは>>980が立てること
無理なら細かく安価指定

関連スレ
Excel VBA 質問スレ Part79(ワッチョイあり)
https://mevius.5ch.net/test/read.cgi/tech/1674875532/
Excel VBA 質問スレ Part80(ワッチョイあり)
https://mevius.5ch.net/test/read.cgi/tech/1700826110/

※前スレ
Excel VBA 質問スレ Part79
https://mevius.5ch.net/test/read.cgi/tech/1674874007/
Excel VBA 質問スレ Part80
https://mevius.5ch.net/test/read.cgi/tech/1685489018/
Excel VBA 質問スレ Part81
https://mevius.5ch.net/test/read.cgi/tech/1713416618/
2025/06/02(月) 15:03:33.91ID:DSKTrfoz
馬鹿はそんなことも判らないのか
2025/06/02(月) 15:07:32.82ID:OjGRkHiP
>>880
スレタイ読めない馬鹿w
882デフォルトの名無しさん
垢版 |
2025/06/02(月) 19:50:00.14ID:K2UVQp3e
>>614
ひとつのモジュールにはひとつの役割を
ひとつのプロシージャにもひとつの役割を
与えて書けばいいんじゃない?
もちろん、モジュールとプロシージャでは
与える役割が全然変わってくるけど

例えばモジュールに車という役割を与えたら
プロシージャには走る役割を与えたり

後はセンス
883デフォルトの名無しさん
垢版 |
2025/06/02(月) 20:06:38.96ID:Xhmb9taU
ありがとうございます
やはり on error goto ラベル名 なのですね
884デフォルトの名無しさん
垢版 |
2025/06/02(月) 20:25:45.14ID:gI3jZeU7
on error resume next
ヤバそうな処理
if err.number<>0 then
エラーリカバリー
end if
on error goto0
885デフォルトの名無しさん
垢版 |
2025/06/02(月) 20:45:44.86ID:Xhmb9taU
>>884
エラーが発生している、あるいはしそうな処理がある、というよりは、マクロ実行中にどんなバグでも発生したら、発生した時点で終了させる必要があります
2025/06/02(月) 21:35:59.74ID:nQl9pEtd
終了前に
err.number = エラー番号
をセットしてジャンプさせるハンドラがいる
こわー
2025/06/02(月) 22:06:18.54ID:ZCDsMgZ+
Sub Div0()
On Error GoTo Err
MsgBox 1 / 1
MsgBox 1 / 0
MsgBox 1 / -1
Err:
MsgBox "ゼロで割るな、クソが"
End
End Sub
2025/06/02(月) 22:26:41.07ID:ncJUEcFA
Err: の前で Exit Sub しないと
889デフォルトの名無しさん
垢版 |
2025/06/03(火) 07:35:55.27ID:o/OLh2ct
異常が起きる前にファイル開いてた場合、closeしないで終了してしまうとかある
890デフォルトの名無しさん
垢版 |
2025/06/03(火) 07:39:00.03ID:/ZJ1mBw3
VBAのツール作りは時間がかかるのが当たり前でしょうか?
作り方は分かっているし、作るツールもたいしたものではないのに、それでも1日2日では終わらないです
891デフォルトの名無しさん
垢版 |
2025/06/03(火) 10:48:59.43ID:Kk3A2bVT
ものによる、人による、まともにテストしてるかにもよる
2025/06/03(火) 10:57:06.67ID:Q0vXXWY4
どうせ著作権侵害や不正アクセスツールだろ
893デフォルトの名無しさん
垢版 |
2025/06/03(火) 19:25:30.47ID:gpacmpqZ
>>890
まぁそうだね
だから綺麗に部品化しておくことが大事なんだよ
それを後で使い回せるようにね
894デフォルトの名無しさん
垢版 |
2025/06/03(火) 20:26:44.49ID:/ZJ1mBw3
自分が勤めている会社で理解者や協力者を増やそうと、少しでもVBAに興味を示した人や、VBAを齧っている人を相手に勉強会を開催しても、結局VBAがわかる人は少ない
という話を聞きますが、やっぱりVBAといえど、難しいのでしょうか?
Power Queryでもそういう話を聞きます
2025/06/03(火) 21:02:42.93ID:cgHky4oh
VBAが難しくないんだったらさっさとVBA卒業して本職のITエンジニアになった方が稼げるからねえ
向上心がありすぎてもいけない、中途半端なツールなので
896デフォルトの名無しさん
垢版 |
2025/06/03(火) 21:09:44.47ID:Kk3A2bVT
チンタラ残業代稼いでる人にとって効率化は最大の敵
VBAにしろRPAにしろ最大の抵抗勢力よ
897デフォルトの名無しさん
垢版 |
2025/06/03(火) 22:04:21.82ID:gr7bEf2i
>>872 で愚痴って終わりなのもアレだから一応書いとく

・事象
 FileSystemObject.TextStream.ReadLine と ADODB.Stream.ReadText(adReadLine) が同じ結果にならない

・原因
 改行コードが CRLF と LF が混じったお行儀のよろしくないファイルだった

・対処
 LineSeparator = adLF として Replace(ReadText(adReadLine), vbCr, "")
 とやったらOKだった
2025/06/03(火) 23:26:25.06ID:aKU11sxP
>>897
Microsoftのマニュアルよりも詳しい説明
ADODB.Stream: https://atsumitm.iobb.net/its/its-050.php
TextStream:  https://atsumitm.iobb.net/its/its-051.php
899デフォルトの名無しさん
垢版 |
2025/06/03(火) 23:46:58.61ID:gpacmpqZ
>>894
VBAは比較的間口が広くてとっつき易い言語ではあるとは思うよ
ただ、何の言語でもそうだけど教える人がいると受動的になりがちで聞いてりゃ分かるようになると思ってしまうのはマズい
聞いてりゃ分かるようになる言語なんて存在しない
分かる人が少ないのは結局、VBAを本当に必要であることを迫られる立場に無いからだと思う
VBA出来なきゃ今いる会社をクビになるくらいに迫られたら大概の人は理解する
でも教えてくれる人がいるということは恵まれたことだと思うよ
このスレにいる大多数の人は恐らく独学で仕事場で使えるようにならざるを得なかった立場なんじゃないかな
900デフォルトの名無しさん
垢版 |
2025/06/03(火) 23:58:42.71ID:/ZJ1mBw3
>>899
私も完全独学で覚えました
というプログラミングは独学で学んでいる人ばかりではないのですか?
プログラミングスクールは役に立たないし、かと言って会社は教えてくれない
901897
垢版 |
2025/06/04(水) 00:06:22.21ID:/Ak3M73b
>>898
このサイトぐぐるとよく見かけるようになったけど、詳しすぎて理解できないw
2025/06/04(水) 00:40:57.38ID:b8XC2mTd
自学できない人はダメだよね
2025/06/04(水) 05:30:19.54ID:3c6clsCg
独学って、大半の人は言語に固有の文法と、開発環境に依存する実行方法を覚えただけでしょ
だからデータ型の違いとか文字コードとかアルゴリズムとかファイルシステムとか、基本がわかってないから別の言語に手を出せない
904デフォルトの名無しさん
垢版 |
2025/06/04(水) 06:02:44.09ID:/hC9EQXc
ここ見てりゃわかるけど、コピペで動いて偉くなったつもりの馬鹿ばっかだから
905デフォルトの名無しさん
垢版 |
2025/06/04(水) 07:11:35.77ID:jKpT1SFo
>>903
そうね
それはその通りだと思うわ
だから>>894の言ってる教えている人が
そもそものVBAの基本的な型やら
分岐や演算とかよく使うObjectの扱いとかを
最初に教えていることを切に願うわ
906デフォルトの名無しさん
垢版 |
2025/06/04(水) 07:34:51.95ID:BFbm2+Cn
>>900
覚えるのは自分、教わったのに覚えてないようでは学べてない
あと文法は覚えてもアルゴリズムは考えるもの
教わってないからできないって言ってるのは初心者以下な
907デフォルトの名無しさん
垢版 |
2025/06/04(水) 07:44:26.54ID:f2CAL3f8
やる必要性がないからやらないけど、Pythonが簡単というならPythonだってわかる気がするし、C言語がFor eachもない様な単純な言語だというならそれはそれでできそうな気もする(Copilotがあるから尚更)。
ローコードにしろスクラッチにしろそれは同じ。

既製品のソフトウェアを導入するか、VBAで作成するかならどちらが安いと思いますか?
もしVBAの方が安いなら世の中マクロだらけだと思うのです。
2025/06/04(水) 08:21:45.39ID:B6zQeN2g
誰も責任を負いたくない、率先して矢面に立ちたくない方々だらけだから
2025/06/04(水) 08:50:54.30ID:yTwvetl9
>>907
マクロだらけだよ
それらを管理する人(作成者)が抜けていくから管理不能になる
そういった事象を解決する銀の弾丸としてRPAやノーコードツールが喧伝されたけど、
管理する人がいないって意味では同じなので同じことが繰り返されてる
2025/06/04(水) 10:16:27.04ID:pOYKhOcI
>改行コードが CRLF と LF が混じったお行儀のよろしくないファイル

CSVなら普通にあるな
行儀の問題じゃない
2025/06/04(水) 10:36:26.59ID:yTwvetl9
行儀だよ
少なくともRFC上においては行末がCRLFであると規定されてる
ファイルの最後のみがどうでもよい
2025/06/04(水) 11:22:31.03ID:ZuFYF6Nx
>>907
どっちが安いって、保守コストまで考えて言ってる?
そりゃ作りっぱなしならVBAのが安上がりだけど、それじゃ後で困るって話をしてるんでしょ
913デフォルトの名無しさん
垢版 |
2025/06/04(水) 12:21:29.23ID:pOYKhOcI
LFは行末じゃないよ
914デフォルトの名無しさん
垢版 |
2025/06/04(水) 14:36:42.79ID:p0LJP29f
CSVの行改行と項目内改行が使い分けられてないわけが無い
使い分けられてなければ復元不可能になる
915デフォルトの名無しさん
垢版 |
2025/06/04(水) 14:39:56.22ID:p0LJP29f
>>914
"あれば可能だが無いの見たことあるのよね…
2025/06/04(水) 16:28:29.01ID:3c6clsCg
標準の改行コードはOSによって違う
CR、LF、CR+LF、LF+CR、すべてのパターンが実在する
フィールドに改行やコンマを含めたい場合、レコードの区切りと違うコードを割り当てる場合もあれば、クォートなどの記号でフィールドの範囲を明示する場合もある
Windows版Excelはダブルクォートでフィールドの範囲を指定するのが基本
2025/06/04(水) 16:30:20.58ID:3c6clsCg
>>915
それは固定長かセパレータ(コンマ)の数をカウントしてるかどっちかかな
2025/06/04(水) 18:23:31.04ID:RQn0r/Lq
>>916
CR MacOS(UNIX化前)
LF UNIX、MacOS(UNIX化後)
CR+LF Windows、DOS
LF+CR ← なんてOS?
919デフォルトの名無しさん
垢版 |
2025/06/04(水) 18:39:20.47ID:f2CAL3f8
>>909
RPAにしろ、ノーコードにしろ、なんにしろ、そうなりますよね。
結局社内でどれだけ学習意欲のある人を揃えるかによりそう。
2025/06/04(水) 19:22:49.50ID:7S8kDVf/
>>913
由来のタイプライターを鑑みたらLFは本来行頭に来るべきものだけど、
現実的には行末
2025/06/04(水) 19:55:51.24ID:frrYvMiA
頑張ってVBA勉強したところでプログラミングスキルとしては流石に時代遅れ&最底辺だし、
事務員としてスキルアップしたいならツールに入れ込むより業務知識を強化した方がいいし、
組織の中で出世したいなら自分でVBA書くより他人に書かせて継続的にスケールする仕組みを作るべき
そして、めでたく業務効率化できたとして、いず」行き着く先は「脱Excelで属人化解消&業務効率化」でVBA職人は悪者扱いだ
本当にVBAを広めたいのなら、個人の意欲に頼るのではなく、組織として適切なインセンティブを設けることだな
922デフォルトの名無しさん
垢版 |
2025/06/04(水) 20:02:53.71ID:f2CAL3f8
>>921
結局、経営者次第だよね
まるでITや業務効率化に興味がないなら何もできない
社員の進言に耳を傾けないなら騙されもするし、せっかく導入したツールは社員にとって非常に使いづらい
923デフォルトの名無しさん
垢版 |
2025/06/05(木) 00:29:50.41ID:Nu77Yg2O
>>921
そっか
あなたはこのスレ卒業だね
2025/06/05(木) 08:17:29.72ID:FSpPjL7A
四行目までは自虐だろ? 言いたいのは五行目だけって意味と捉えたが、どうなんだ
まあ、ちょっと過剰に反応し過ぎなきらいは否めないが
2025/06/05(木) 08:45:28.01ID:Lp1WVm/I
>>921
組織の中で継続してスケールする仕組み作ったなら属人化してないんだから悪者になる理由なくない?
2025/06/05(木) 09:07:39.20ID:FSpPjL7A
お利口さんに成ろうとしてアタマでっかちに成り過ぎ
大工だっていろんなレベルもあるし色んな層が大工してる
その場しのぎのやっつけ大工も居れば、客の要望を叶えるために青写真から描ける熟練大工もいる
新人大工なら木の特性とか部材同士の相性とかもよく理解しないまま最新部材使って威張ってみたり
ガルバリウムには使ってはいけない釘平気で使って1〜2年後にはその部分からサビを拡げる原因作って顰蹙買うし
それでも世の中は回ってる
改善なんか数年で変化してくものだ、という前提を踏まえてれば、それに見合うコストで運用出来てれば御の字
2025/06/05(木) 10:31:37.20ID:1teg7ITB
>>925
コンサルはいわゆるExcelバケツリレーの非効率さを指摘してくるのが常道
VBAで個々人の作業が省力化されてようとフローは変わらないので、実際非合理だから仕方ない
その上で現行業務の調査として関係者全員にヒアリングして介在するワークシートやマクロをつぶさに調査するのにかかる莫大な費用の見積りを提示されると、
もう経営層からはVBA職人なんて非効率な業務を助長するだけの排除すべき敵としか見えなくなるわけよ
2025/06/05(木) 10:49:41.34ID:1teg7ITB
あと、業務を見直してシステム化しようとした際にVBAが悪者になる大きな原因として、
一見簡単な処理に見えて蓋を開けたらたまに複雑怪奇な難攻不落の化け物が出てくる、ってのがある
これ、Excel中心のワークフローをシステム化する際にはよくある話で、スケジュール遅延や予算超過を引き起こすことが多い
そうなるとシステム部門や現場が経営層に頭下げるのは当然として、上場企業だと株主に経営層が謝罪なんてケースもある
ここまでくるともうVBAなんて悪者もいいとこよ
2025/06/05(木) 10:55:09.32ID:Lp1WVm/I
それらは継続してスケールする仕組みを作れていない場合の話じゃないの?
複雑怪奇な難攻不落の化け物って、それスケールできる仕組み作れてなくない?
そもそもの話が噛み合ってないよ
2025/06/05(木) 11:09:55.37ID:1teg7ITB
>>929
隅々まで適切にガバナンスを効かせながら使うならいいんじゃない?
それができるほどの優秀なリーダーがVBAを選ぶかは疑問だけどな
どんな組織でも、人が増えれば馬鹿も増えるし目も行き届かなくなるものだ
2025/06/05(木) 11:27:50.93ID:Z5osrhWk
Excelバケツリレーは業務や人員を追加していく分にはスケールするよ
後から変更するのが困難でありシステム化が前提なら極めて非合理だけ
932デフォルトの名無しさん
垢版 |
2025/06/05(木) 17:48:57.22ID:lb5raFks
>>928
IR出すレベルのVBAは確実に一見簡単そうな処理では無いと思います。
そこまでの規模のシステムなら、それこそ何かしらの製品やサービスを導入してください。
933デフォルトの名無しさん
垢版 |
2025/06/05(木) 17:54:18.01ID:lb5raFks
ローコードツールや多言語の方がいいのはその通りだと思います
VBAはOfficeしか扱えないのだから
2025/06/05(木) 18:20:52.21ID:uYkJABQ4
> VBAはOfficeしか扱えないのだから
AutoCAD、SOLIDWORKS、・・・
2025/06/05(木) 18:33:57.70ID:Lp1WVm/I
>>933
そうなんだ?知らなかった
936デフォルトの名無しさん
垢版 |
2025/06/05(木) 20:15:40.58ID:r0Qxvap7
そもそもパッケージやクラウドサービス使えば、中身は全くわからない
手の出しようがない
自前なら何とかなる
そこをどう捉えるかよ
そもそも基幹システムをVBAで作らないし
(小企業は知らんが)
作っても枝葉よ
937デフォルトの名無しさん
垢版 |
2025/06/05(木) 20:29:53.99ID:lb5raFks
>>936
C、CSVで吐き出せればなんとか(震え声)

TYPEを全く使ってこなかったのです。
しかし、この度同じモジュールで多数のstring型の変数を宣言する必要があります。
TYPEデビューしようと思うのですがどうでしょうか?
938デフォルトの名無しさん
垢版 |
2025/06/05(木) 23:29:45.76ID:fxlZJI+h
ここで聞かなきゃいけないような馬鹿はやめとけ
939デフォルトの名無しさん
垢版 |
2025/06/05(木) 23:53:54.23ID:r0Qxvap7
>>937
type稀にしか使わないので調べたら
CollectionやDictionaryに格納できないと
マジか、知らなかったわ
これに使うならクラスにしたらいいかもね
2025/06/05(木) 23:57:55.29ID:0HOZWCXV
>>920
リアルタイプライターではLFの位置は任意だよ
行頭とか行末とか関係なく、行の途中でも好きな所でline feedは可能
2025/06/06(金) 01:00:59.18ID:gfk/0ela
>>940
CRLFはCRが来る時点でLFが行末じゃなくなるって話
2025/06/06(金) 08:39:00.12ID:cx/TERMm
Enterキーの矢印ってLF-CRだよね
  ↓

CR-LFならこういう向きじゃないとおかしい
  ←
2025/06/06(金) 09:32:23.47ID:rGtsPzUl
VBAでクラスモジュールを使っていろいろやるのもなしとは言わないけれど、それなら正直JavaとかPythonとかの普通の言語を勉強した方が良いような気もするかな。クラスモジュールって、よくある普通の言語とはちょっと違ったVBA固有の仕様に過ぎないし。
2025/06/06(金) 09:44:39.10ID:4a1tHPn5
>>943
JavaScript様のプロトタイプに喧嘩売る気か
2025/06/06(金) 10:07:22.76ID:NfW6LToZ
クラスモジュールはVBA固有というかCOMの仕様
COMの絡まない処理で無理に使う必要は全く無いし、COMを理解してないと不可解な仕様が多い
2025/06/06(金) 10:45:07.80ID:c6RrnkVo
他言語でクラス使ってたらクラスモジュール作りたくなる病
2025/06/06(金) 11:16:07.96ID:FmZludjM
COMってどう勉強するんだろ
漠として簡潔な説明がなかなかなく
IUnknownやらなんやら、
948デフォルトの名無しさん
垢版 |
2025/06/06(金) 11:35:48.78ID:3VaYoART
InsideCOMを辛抱強く読むのが唯一の道
それ以上の資料もかみくだいた解説書もない
949デフォルトの名無しさん
垢版 |
2025/06/06(金) 18:33:04.93ID:lAxJJHmL
https://learn.microsoft.com/ja-jp/cpp/mfc/ole-in-mfc?view=msvc-170
https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/module-2--using-com-in-your-windows-program
2025/06/06(金) 18:52:09.71ID:4a1tHPn5
COMの解説
https://learn.microsoft.com/ja-jp/windows/win32/com/component-object-model--com--portal
951デフォルトの名無しさん
垢版 |
2025/06/06(金) 19:13:06.68ID:fJneNGsq
>>939
TYPEは他のオブジェクトに引き渡せないとは聞いていました

結局ディクショナリーで登録しました
952デフォルトの名無しさん
垢版 |
2025/06/06(金) 20:17:15.03ID:tc8PGxli
>>951
ディクショナリだとインテリ使えんけど、まあそれでいいなら
2025/06/06(金) 20:34:48.52ID:2QLQ97JJ
たまにいる勘違い人間 「自分、CやJavaできるから低レベルのVBA(笑)なんてすぐマスターできるし」とか豪語するヤツ
954デフォルトの名無しさん
垢版 |
2025/06/06(金) 21:03:29.16ID:fJneNGsq
私はファイルパスやフォルダパスの取得や設定、ファイル名やフォルダ名の作成に冗長なコードを書いている気がしてならないのですが、何かいいコードはないでしょうか?
955897
垢版 |
2025/06/06(金) 21:52:26.62ID:CfJ/EVmD
Typeの代わりにRecordSet使ったりする Field設定いちいちするの面倒だけど
Filterとか使えるしCopyFromRecorSetとかできるし
956デフォルトの名無しさん
垢版 |
2025/06/07(土) 01:20:40.40ID:hTJ86lb5
>>954
昔はdirやnameだったけど、今はfso使ってればいいんじゃね
2025/06/07(土) 04:19:49.26ID:GCIZhVy1
>>954
その程度の処理なら、冗長で困ることなんかほとんどないよ
自分に理解できる形で書くのが、長い目で見れば一番保守性が高いんだから
ちゃんと動いてる物を直そうとして壊すことも多いから、そっとしとけ
2025/06/07(土) 07:03:08.54ID:QQtzQfGp
>>954
末尾の円マーク有無で毎回処理を分岐させてるのならBuildPathを使え
2025/06/07(土) 09:36:28.54ID:zGsllLLl
>>954
その冗長なコードとやらを貼ってみれば何が悪いか指摘してもらえると思うぞ
2025/06/07(土) 10:26:27.74ID:pGBLBsE0
.netの文字列操作ライブラリとか見たらいたせりつくせりで贅沢過ぎるわ!って怒り出しそう
2025/06/07(土) 12:33:58.98ID:NHsDgqoS
タスクバーのアイコンを取得したくて、下記のサイトのC#をVBAに移植しても、Excelがハングアップする
C#ではちゃんと動く
なぜ?

Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hTaskBar)


https://learn.microsoft.com/en-us/answers/questions/115440/how-to-find-taskbar-button-screen-rect-of-a-window
2025/06/07(土) 13:25:32.25ID:QQtzQfGp
https://qiita.com/Mrs_P/items/5c8070fd880b9deb284a
↑ここの人がVBAで似たようなことやってますね
GetReferenceElementという関数の中に >>961 と同等のコードが書かれているから
hTaskBarの値がおかしいんじゃないの?

これでブラウザの自動操縦できるのかぁ 便利そうだな
2025/06/07(土) 13:32:49.76ID:NHsDgqoS
>>962
このサイトも見た
hTaskBarの値は、C#版とVBA版で同じ値だったので、正しいと思う。

Chromeのウィンドウハンドルでやった場合は、ちゃんと動いた
2025/06/07(土) 13:58:10.47ID:QQtzQfGp
これで最後の行まで動いたよ

Dim hWndTray As LongPtr: hWndTray = FindWindow("Shell_TrayWnd", vbNullString)
Dim hWndRebar As LongPtr: hWndRebar = FindWindowEx(hWndTray, 0, "ReBarWindow32", vbNullString)
Dim hWndMSTaskSwWClass As LongPtr: hWndMSTaskSwWClass = FindWindowEx(hWndRebar, 0, "MSTaskSwWClass", vbNullString)
Dim hWndMSTaskListWClass As LongPtr: hWndMSTaskListWClass = FindWindowEx(hWndMSTaskSwWClass, 0, "MSTaskListWClass", vbNullString)

Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndMSTaskListWClass)
MsgBox "終わり"
2025/06/07(土) 14:07:56.34ID:QQtzQfGp
もうひとつの方もこれで動いた

Dim hWndTray As LongPtr: hWndTray = FindWindow("Shell_TrayWnd", vbNullString0)
Dim hWndTrayNotify As LongPtr: hWndTrayNotify = FindWindowEx(hWndTray, 0, "TrayNotifyWnd", vbNullString)
Dim hWndSysPager As LongPtr: hWndSysPager = FindWindowEx(hWndTrayNotify, 0, "SysPager", vbNullString)
Dim hWndToolbar As LongPtr: hWndToolbar = FindWindowEx(hWndSysPager, 0, "ToolbarWindow32", vbNullString)

Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar)
MsgBox "終わり"
2025/06/07(土) 15:15:58.64ID:NHsDgqoS
>>965
あ、
Windows 11だと動かないな…

>>964のタスクバーのボタンは動いたけど、
>>965のトレイアイコンは、最後の1行で、やっぱExcelごとハングアップで強制終了するわ
(Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar))

C#版は、>>965のトレイアイコンもちゃんと動くんだけど…
967デフォルトの名無しさん
垢版 |
2025/06/07(土) 16:04:31.64ID:I++ihMYF
>>959
例えばファイルシステムで
フォルダ1の中から指定の文字列を含むフォルダを探して
見つかったフォルダのパスを取得して
さらにそのフォルダの中から指定の文字列を含むフォルダを探して
見つかったフォルダのパスを取得して
そのフォルダの中に指定のフォルダがあるか確認してなかった場合はフォルダを作成するコードです
2〜3回同じ様な事を繰り返しているので冗長な気がしてなりません
2025/06/07(土) 16:09:10.87ID:WTKqP7i+
>>967
それそのままAIに投げたら一瞬で書いてくれるよ
969947
垢版 |
2025/06/07(土) 16:28:51.74ID:ADmBeqPj
>>948, 949, 950
ありがとうございます

マイクロソフトのサイトは機械翻訳がどうも…、と敬遠していましたが、参照してみます
それから洋書、かぁ…
970デフォルトの名無しさん
垢版 |
2025/06/07(土) 17:36:52.86ID:hTJ86lb5
>>967
それを平で書いてるなら冗長
再帰処理でやるのがあるべき姿
まずは指定フォルダ下の全フォルダを出力する再帰処理書いてみ
(全てが再帰処理ではない。呼び出し元処理と再帰処理の2つ書くことになる。念の為)
2025/06/07(土) 17:47:31.26ID:QQtzQfGp
>>966
Windows11はタスクバーに使われてるクラスが変わってるらしいから関係あるかもよ
https://www.autohotkey.com/boards/viewtopic.php?style=19&t=108539
AHKにクラス名を調べるツールがついてたような
2025/06/07(土) 17:55:49.45ID:nK7i38Q0
>>967
こんなのかな
>フォルダ1(Path1)の中から指定の文字列を含むフォルダ(Pattern1)を探して見つかったフォルダのパス(Path2)を取得する

Path2 = GetPatternPath(Path1, Pattern1) As String

>さらにそのフォルダ(Path2)の中から指定の文字列(Pattern2)を含むフォルダを探して
>見つかったフォルダのパス(Path3)を取得する

Path3 = FindPatternPath(Path2, Pattern2) As String

>そのフォルダ(Path3)の中に指定のフォルダ(Pattern3)があるか確認してなかった場合はフォルダを作成するコードです

result = CheckPatternPath(Path3, Pattern3) As Boolean
If result Then
Call MakePatternPath(Path3, Pattern3)
End If
あとは関数の中身を書くだけ
2025/06/07(土) 18:21:21.32ID:QQtzQfGp
>>967
ShiteiNoMojiretsu = "指定の文字列"
Shitei = "指定"
Path = "C:\フォルダ1"
Path = Path & "\" & Dir(Path & "\*" & ShiteiNoMojiretsu & "*", vbDirectory)
Path = Path & "\" & Dir(Path & "\*" & ShiteiNoMojiretsu & "*", vbDirectory)
If Dir(Path & "\" & Shitei, vbDirectory) = "" Then
MkDir Path & "\" & Shitei
End If
2025/06/07(土) 18:49:45.58ID:NHsDgqoS
>>971
んー

でも、C#ではちゃんと動くので、VBA側の問題な気が…
クラスが変わってるのも知ってる。
975デフォルトの名無しさん
垢版 |
2025/06/07(土) 22:19:45.07ID:I++ihMYF
>>970
やっぱりそうですよね
再帰処理を頑張って覚えます
976デフォルトの名無しさん
垢版 |
2025/06/08(日) 02:30:07.18ID:bVJzS0fI
>>975
そやね
たったこれだけでフォルダ階層どこまでも潜れるのかと感動すると思う
(かもしれないw)
フォルダ再帰ができたら各全ファイル名列挙も再帰処理の中に追加しとき
いつか使う時が来る
977デフォルトの名無しさん
垢版 |
2025/06/08(日) 03:49:16.50ID:kACuu3za
こんなので偉そうにする馬鹿
978デフォルトの名無しさん
垢版 |
2025/06/08(日) 10:13:48.24ID:szoadHGe
>>977
わざわざ「私バカです」って手を挙げて出てきてどうした
979897
垢版 |
2025/06/08(日) 10:59:09.81ID:BE7fUg1L
>>976
昔だったら stack overflowとか心配してたけど今はあまり気にしなくて良さそうだね
2025/06/08(日) 11:01:04.08ID:j4jIPbHU
.netのAPIラッパー関数もソース見ると大抵泥臭い事やってんのよね
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況