VBA初心者です。
VBAで自動化を進めていて、ダイアログでのファイル名入力で行き詰まっています。
実行したい事は、ファイル名を入力し、Webからダウンロードしたものを保存する動作です。
困っているのはAPI宣言文でコンパイルエラーになり、肝心の実行まで至っていないことです。
「VBAでファイル選択ダイアログを自動操作する」のWebを見つけ、その通り組み込んだところ、最初のAPI宣言のところでコンパイルエラーになり困っています。
どのように直したら良いのか教えてください。よろしくお願い致します。
1.エラー内容
下記のAPI宣言文で、FindWindowの箇所で「コンパイルエラー。ユーザ定義型は定義されていません」と表示される。
Webにある記述だけだとエラーになったので、FindWindowEx、FindWindow、SendMessageの3つ共、Functionの前にPrivate Declareを追加しています。
修正する箇所等、教えてください。
2.コード
'----------------- API宣言部分 -----------------
Private Declare Function FindWindowEx Lib "USER32.dll" _
Alias "FindWindowExA" ( _
ByVal hWndParent As Long, _
ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, _
ByVal lpszWindow As String) As Long
Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
'----------------- API宣言部分 -----------------
Private Declare Function SendMessage Lib "USER32.dll" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Any) As Long
'----------------- 処理部分 -----------------
Dim hInputBox As Long
Dim hButton As Long
Dim hWindow As Long
hWindow = FindWindow("#32770", "名前を付けて保存")
hInputBox = FindWindowEx(hWindow, 0&, "ComboBoxEx32", "")
hInputBox = FindWindowEx(hInputBox, 0&, "ComboBox", "")
hInputBox = FindWindowEx(hInputBox, 0&, "Edit", "")
hButton = FindWindowEx(hWindow, 0&, "Button", "保存(&S)")
'----------------- 処理部分 -----------------
'ファイルパス入力'
Call SendMessage(hInputBox, &HC, 0, DLfile) 'DLfile変数 ダウンロードするファイル名
'ボタン押下'
Call SendMessage(hButton, &H6, 1, 0&) 'ボタンをアクティブにする
Call SendMessage(hButton, &HF5, 0, 0&) 'ボタンをクリックする
No.2ベストアンサー
- 回答日時:
拾ってきたサンプルが間違ってますね。
LongPtr → Long
Webに転がっている情報は玉石混交ですので、検索したら必ず複数の情報源で確認しましょう。
No.1
- 回答日時:
>LongPtr
どこからサンプルを拾って来たのでしょう?
VBAを検索文字に加えておかないと、C言語のサンプルだったりします。
回答ありがとうございます。
サンプルは以下URLサイト「VBAでファイル選択ダイアログを自動操作する」から持ってきました。
http://rabbitfoot.xyz/file-dialog-autmation/
初心者でAPIの宣言文については良く分かりません。
教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
VBSでIEを起動し、拡大率を変更...
-
式はメソッドではありませんと...
-
vbscriptの変数宣言
-
イメージ表示
-
ダブルクォーテーションの吐き出し
-
十進BASICについて
-
名前が二重に定義されています
-
C# try-catch でcatchに飛ばす方法
-
ASP内で他のASPファイルを読み...
-
【C#】アップロード時に「アプ...
-
エラー 'ASP 0115'
-
VB6でのPL/SQLの実行について
-
データ受け渡し時のSessionの使...
-
<ASP.NET>DataGridでOnSelected...
-
WindowsでS.M.A.R.Tの情報取得...
-
Response.Redirectで引数2つの...
-
ASPの実行タイミングを設定したい
-
GridView表示の高速化
-
VBA RemoveDuplicatesで「アプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
VBSにてサーバー中のエクセルフ...
-
vbscriptの変数宣言
-
VBSでIEを起動し、拡大率を変更...
-
TCPサーバ bind関数のエラーに...
-
式はメソッドではありませんと...
-
golang 空文字判定について
-
名前が二重に定義されています
-
ACCESSのAutoKeysマクロでアク...
-
CreateObjectの同時実行時について
-
EXCEL VBA API宣言でコンパイル...
-
SumIFsとDateSerial vba
-
ASPエラー時の内容を任意で...
-
エクセル同一セル内の指定文字...
-
COBOLのPERFORM文
-
C# try-catch でcatchに飛ばす方法
-
FileCopy時のエラー
-
Response.Redirectで引数2つの...
-
EXECLマクロでshapeがグルーフ...
おすすめ情報