[過去ログ]
Excel VBA 質問スレ Part82 (1002レス)
Excel VBA 質問スレ Part82 http://mevius.5ch.net/test/read.cgi/tech/1737657075/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
949: デフォルトの名無しさん [] 2025/06/06(金) 18:33:04.93 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1737657075/949
950: デフォルトの名無しさん [sage] 2025/06/06(金) 18:52:09.71 ID:4a1tHPn5 COMの解説 https://learn.microsoft.com/ja-jp/windows/win32/com/component-object-model--com--portal http://mevius.5ch.net/test/read.cgi/tech/1737657075/950
951: デフォルトの名無しさん [] 2025/06/06(金) 19:13:06.68 ID:fJneNGsq >>939 TYPEは他のオブジェクトに引き渡せないとは聞いていました 結局ディクショナリーで登録しました http://mevius.5ch.net/test/read.cgi/tech/1737657075/951
952: デフォルトの名無しさん [] 2025/06/06(金) 20:17:15.03 ID:tc8PGxli >>951 ディクショナリだとインテリ使えんけど、まあそれでいいなら http://mevius.5ch.net/test/read.cgi/tech/1737657075/952
953: デフォルトの名無しさん [sage] 2025/06/06(金) 20:34:48.52 ID:2QLQ97JJ たまにいる勘違い人間 「自分、CやJavaできるから低レベルのVBA(笑)なんてすぐマスターできるし」とか豪語するヤツ http://mevius.5ch.net/test/read.cgi/tech/1737657075/953
954: デフォルトの名無しさん [] 2025/06/06(金) 21:03:29.16 ID:fJneNGsq 私はファイルパスやフォルダパスの取得や設定、ファイル名やフォルダ名の作成に冗長なコードを書いている気がしてならないのですが、何かいいコードはないでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1737657075/954
955: 897 [] 2025/06/06(金) 21:52:26.62 ID:CfJ/EVmD Typeの代わりにRecordSet使ったりする Field設定いちいちするの面倒だけど Filterとか使えるしCopyFromRecorSetとかできるし http://mevius.5ch.net/test/read.cgi/tech/1737657075/955
956: デフォルトの名無しさん [] 2025/06/07(土) 01:20:40.40 ID:hTJ86lb5 >>954 昔はdirやnameだったけど、今はfso使ってればいいんじゃね http://mevius.5ch.net/test/read.cgi/tech/1737657075/956
957: デフォルトの名無しさん [sage] 2025/06/07(土) 04:19:49.26 ID:GCIZhVy1 >>954 その程度の処理なら、冗長で困ることなんかほとんどないよ 自分に理解できる形で書くのが、長い目で見れば一番保守性が高いんだから ちゃんと動いてる物を直そうとして壊すことも多いから、そっとしとけ http://mevius.5ch.net/test/read.cgi/tech/1737657075/957
958: デフォルトの名無しさん [sage] 2025/06/07(土) 07:03:08.54 ID:QQtzQfGp >>954 末尾の円マーク有無で毎回処理を分岐させてるのならBuildPathを使え http://mevius.5ch.net/test/read.cgi/tech/1737657075/958
959: デフォルトの名無しさん [sage] 2025/06/07(土) 09:36:28.54 ID:zGsllLLl >>954 その冗長なコードとやらを貼ってみれば何が悪いか指摘してもらえると思うぞ http://mevius.5ch.net/test/read.cgi/tech/1737657075/959
960: デフォルトの名無しさん [sage] 2025/06/07(土) 10:26:27.74 ID:pGBLBsE0 .netの文字列操作ライブラリとか見たらいたせりつくせりで贅沢過ぎるわ!って怒り出しそう http://mevius.5ch.net/test/read.cgi/tech/1737657075/960
961: デフォルトの名無しさん [sage] 2025/06/07(土) 12:33:58.98 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1737657075/961
962: デフォルトの名無しさん [sage] 2025/06/07(土) 13:25:32.25 ID:QQtzQfGp https://qiita.com/Mrs_P/items/5c8070fd880b9deb284a ↑ここの人がVBAで似たようなことやってますね GetReferenceElementという関数の中に >>961 と同等のコードが書かれているから hTaskBarの値がおかしいんじゃないの? これでブラウザの自動操縦できるのかぁ 便利そうだな http://mevius.5ch.net/test/read.cgi/tech/1737657075/962
963: デフォルトの名無しさん [sage] 2025/06/07(土) 13:32:49.76 ID:NHsDgqoS >>962 このサイトも見た hTaskBarの値は、C#版とVBA版で同じ値だったので、正しいと思う。 Chromeのウィンドウハンドルでやった場合は、ちゃんと動いた http://mevius.5ch.net/test/read.cgi/tech/1737657075/963
964: デフォルトの名無しさん [sage] 2025/06/07(土) 13:58:10.47 ID: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 "終わり" http://mevius.5ch.net/test/read.cgi/tech/1737657075/964
965: デフォルトの名無しさん [sage] 2025/06/07(土) 14:07:56.34 ID: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 "終わり" http://mevius.5ch.net/test/read.cgi/tech/1737657075/965
966: デフォルトの名無しさん [sage] 2025/06/07(土) 15:15:58.64 ID:NHsDgqoS >>965 あ、 Windows 11だと動かないな… >>964のタスクバーのボタンは動いたけど、 >>965のトレイアイコンは、最後の1行で、やっぱExcelごとハングアップで強制終了するわ (Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar)) C#版は、>>965のトレイアイコンもちゃんと動くんだけど… http://mevius.5ch.net/test/read.cgi/tech/1737657075/966
967: デフォルトの名無しさん [] 2025/06/07(土) 16:04:31.64 ID:I++ihMYF >>959 例えばファイルシステムで フォルダ1の中から指定の文字列を含むフォルダを探して 見つかったフォルダのパスを取得して さらにそのフォルダの中から指定の文字列を含むフォルダを探して 見つかったフォルダのパスを取得して そのフォルダの中に指定のフォルダがあるか確認してなかった場合はフォルダを作成するコードです 2〜3回同じ様な事を繰り返しているので冗長な気がしてなりません http://mevius.5ch.net/test/read.cgi/tech/1737657075/967
968: デフォルトの名無しさん [sage] 2025/06/07(土) 16:09:10.87 ID:WTKqP7i+ >>967 それそのままAIに投げたら一瞬で書いてくれるよ http://mevius.5ch.net/test/read.cgi/tech/1737657075/968
969: 947 [sage] 2025/06/07(土) 16:28:51.74 ID:ADmBeqPj >>948, 949, 950 ありがとうございます マイクロソフトのサイトは機械翻訳がどうも…、と敬遠していましたが、参照してみます それから洋書、かぁ… http://mevius.5ch.net/test/read.cgi/tech/1737657075/969
970: デフォルトの名無しさん [] 2025/06/07(土) 17:36:52.86 ID:hTJ86lb5 >>967 それを平で書いてるなら冗長 再帰処理でやるのがあるべき姿 まずは指定フォルダ下の全フォルダを出力する再帰処理書いてみ (全てが再帰処理ではない。呼び出し元処理と再帰処理の2つ書くことになる。念の為) http://mevius.5ch.net/test/read.cgi/tech/1737657075/970
971: デフォルトの名無しさん [sage] 2025/06/07(土) 17:47:31.26 ID:QQtzQfGp >>966 Windows11はタスクバーに使われてるクラスが変わってるらしいから関係あるかもよ https://www.autohotkey.com/boards/viewtopic.php?style=19&t=108539 AHKにクラス名を調べるツールがついてたような http://mevius.5ch.net/test/read.cgi/tech/1737657075/971
972: デフォルトの名無しさん [sage] 2025/06/07(土) 17:55:49.45 ID: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 あとは関数の中身を書くだけ http://mevius.5ch.net/test/read.cgi/tech/1737657075/972
973: デフォルトの名無しさん [sage] 2025/06/07(土) 18:21:21.32 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1737657075/973
974: デフォルトの名無しさん [sage] 2025/06/07(土) 18:49:45.58 ID:NHsDgqoS >>971 んー でも、C#ではちゃんと動くので、VBA側の問題な気が… クラスが変わってるのも知ってる。 http://mevius.5ch.net/test/read.cgi/tech/1737657075/974
975: デフォルトの名無しさん [] 2025/06/07(土) 22:19:45.07 ID:I++ihMYF >>970 やっぱりそうですよね 再帰処理を頑張って覚えます http://mevius.5ch.net/test/read.cgi/tech/1737657075/975
976: デフォルトの名無しさん [] 2025/06/08(日) 02:30:07.18 ID:bVJzS0fI >>975 そやね たったこれだけでフォルダ階層どこまでも潜れるのかと感動すると思う (かもしれないw) フォルダ再帰ができたら各全ファイル名列挙も再帰処理の中に追加しとき いつか使う時が来る http://mevius.5ch.net/test/read.cgi/tech/1737657075/976
977: デフォルトの名無しさん [] 2025/06/08(日) 03:49:16.50 ID:kACuu3za こんなので偉そうにする馬鹿 http://mevius.5ch.net/test/read.cgi/tech/1737657075/977
978: デフォルトの名無しさん [] 2025/06/08(日) 10:13:48.24 ID:szoadHGe >>977 わざわざ「私バカです」って手を挙げて出てきてどうした http://mevius.5ch.net/test/read.cgi/tech/1737657075/978
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 24 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.019s