[過去ログ] Excel VBA 質問スレ Part82 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
943
(1): 06/06(金)09:32 ID:rGtsPzUl(1) AAS
VBAでクラスモジュールを使っていろいろやるのもなしとは言わないけれど、それなら正直JavaとかPythonとかの普通の言語を勉強した方が良いような気もするかな。クラスモジュールって、よくある普通の言語とはちょっと違ったVBA固有の仕様に過ぎないし。
944: 06/06(金)09:44 ID:4a1tHPn5(1/2) AAS
>>943
JavaScript様のプロトタイプに喧嘩売る気か
945: 06/06(金)10:07 ID:NfW6LToZ(1) AAS
クラスモジュールはVBA固有というかCOMの仕様
COMの絡まない処理で無理に使う必要は全く無いし、COMを理解してないと不可解な仕様が多い
946: 06/06(金)10:45 ID:c6RrnkVo(1) AAS
他言語でクラス使ってたらクラスモジュール作りたくなる病
947
(1): 06/06(金)11:16 ID:FmZludjM(1) AAS
COMってどう勉強するんだろ
漠として簡潔な説明がなかなかなく
IUnknownやらなんやら、
948
(1): 06/06(金)11:35 ID:3VaYoART(1) AAS
InsideCOMを辛抱強く読むのが唯一の道
それ以上の資料もかみくだいた解説書もない
949: 06/06(金)18:33 ID:lAxJJHmL(1) AAS
外部リンク:learn.microsoft.com
外部リンク:learn.microsoft.com
950: 06/06(金)18:52 ID:4a1tHPn5(2/2) AAS
COMの解説
外部リンク:learn.microsoft.com
951
(1): 06/06(金)19:13 ID:fJneNGsq(1/2) AAS
>>939
TYPEは他のオブジェクトに引き渡せないとは聞いていました

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

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


外部リンク:learn.microsoft.com
962
(1): 06/07(土)13:25 ID:QQtzQfGp(2/6) AAS
外部リンク:qiita.com
↑ここの人がVBAで似たようなことやってますね
GetReferenceElementという関数の中に >>961 と同等のコードが書かれているから
hTaskBarの値がおかしいんじゃないの?

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

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

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 "終わり"
965
(1): 06/07(土)14:07 ID:QQtzQfGp(4/6) AAS
もうひとつの方もこれで動いた

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 "終わり"
966
(1): 06/07(土)15:15 ID:NHsDgqoS(3/4) AAS
>>965
あ、
Windows 11だと動かないな…

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

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

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

Path2 = GetPatternPath(Path1, Pattern1) As String

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

Path3 = FindPatternPath(Path2, Pattern2) As String

>そのフォルダ(Path3)の中に指定のフォルダ(Pattern3)があるか確認してなかった場合はフォルダを作成するコードです
省5
1-
あと 30 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.156s*