20年くらいまえにネットで拾った「指定したフォルダにあるファイルを書き出す」マクロを愛用していたのですが、Office365にして以降(?)か、以下のエラーが出て実行できなくなりました。
//ここから
コンパイル エラー: このプロジェクトのコードは、64 ビット システムで使用するために更新する必要があります。Declare ステートメントの確認および更新を行い、次に Declare ステートメントに PtrSafe 属性を設定してください。
//ここまで
・・・具体的には上記エラー+以下の8行目の「Declare Function 」全体が赤字にハイライトされて止まります。
ファイル名一覧という動作をするプログラム自体は世の中に数多ありますが、シンプルな動作で気に入っており、修正が可能なら方法をご教示いただけますと幸いです。XLSのプロパティをみたら、1998年に某大学の研究室で作られたもののようですが、
なお、投稿文字数制限の関係で、全体は画像で示します。
Type SHFileInfo ' ユーザー定義型を作成します。
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * 260
szTypeName As String * 80
End Type
Declare Function SHGetFileInfo Lib "shell32.dll" _
Alias "SHGetFileInfoA" _
(ByVal pszPath As String, _
ByVal dwFileAttribute As Long, _
psfi As SHFileInfo, _
ByVal cbFileInfo As Long, _
ByVal uFlags As Long) As Integer
Public Const SHGFI_TYPENAME = 1024
Public Const SHGFI_DISPLAYNAME = 512
' ファイルの情報を返す
' s:ファイル名
' index: 情報の種類
' 0: ファイルの種類
' 1: エクスプローラで表示されるファイル名
Function SHInfo(s As String, index As Integer) As String
Dim info As SHFileInfo
Dim r As Integer
:
:以降投稿文字数制限の関係で省略、画像ご参照
No.1ベストアンサー
- 回答日時:
こんにちは
エラー文章の示す通りです。
>Declare Function SHGetFileInfo Lib "shell32.dll" ~~
の部分を、
Declare PtrSafe Function SHGetFileInfo Lib "shell32.dll" ~~
のようにしてみて下さい。
(他にもあるかもしれませんが、ご提示の範囲内で…)
意味合いとしては、64ビット環境でdll等を使用する際の指定項目です。
https://docs.microsoft.com/ja-jp/office/vba/lang …
以下ご参考までに。
・Windows10でVBA(32bit)実行エラー「DeclareステートメントにPtrSafe属性~」対処法
https://eijiman.com/windows10-declare-ptrsafe/
早速ご教示いただきありがとうございました。そういう現象だったのですね。
他にも4か所、サブルーチン?の部分で引っかかったのですが、以下の【PtrSafe】の書き方では合ってないようで、実行すると無限ループか何かで「応答なし」になってしまいます、何か記述にお心当たりありますでしょうか?
'[フォルダの参照]ダイアログを呼び出すAPI
Public Declare 【PtrSafe】 Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBROWSEINFO As BROWSEINFO) As Long
'SHBrowseForFolderで得られた値からフォルダのパスを取得するAPI
Public Declare 【PtrSafe】 Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
'ウィンドウハンドルを返す
Declare 【PtrSafe】 Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
'SHBrowseForFolderで得られた値のメモリを開放するAPI
Public Declare 【PtrSafe】 Function SHFree Lib "shell32" Alias "#195" _
(ByVal pidl As Long) As Long
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- 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
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
コンパイルできません。
-
Excelのエラーで困ってます。
-
Excel VBAのCSVファイルマージ...
-
左側がクラス、構造体、共用体...
-
visual C++ でビルドの中止がで...
-
fortranでプログラムを実行する...
-
エラー 'iostream.h' : No su...
-
sys/time.hのインクルードがで...
-
LINKエラーについて
-
レコードセットをcloseする所で...
-
error C3867 関数呼び出しには...
-
右オペランドを扱う演算子は定...
-
デバッグ中のエラーのことで教...
-
RightとLeft関数のライブ...
-
ccコマンド時の0711-317エラー
-
ヘッダファイルでのFILE型引数...
-
OPMLファイルの作り方
-
キーの自動入力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
Excelのエラーで困ってます。
-
Handlesについて
-
HEWを使用しているのですが、こ...
-
バッチからsqlplusの接続エラー...
-
デバッグ中のエラーのことで教...
-
VB2008で定数に色の設定をした...
-
コンパイルできません。
-
sys/time.hのインクルードがで...
-
multiple definitionというエラー
-
HANDLEの宣言でのエラー
-
BC30002: 型 'ListItem' が定義...
-
visual C++ でビルドの中止がで...
-
RightとLeft関数のライブ...
-
ビルド失敗 指定されたファイ...
-
Visual Studioのstrcpy_sについて
-
エクセルでマクロを実行すると...
おすすめ情報