
エクセルのマクロでプリンタ名を取得しています
エクセルの32ビット版と64ビット版で共用できるように下記の記述をしたのですが
32ビット版は問題ないのですが、64版ではエラーが発生します
エラーの原因がわかれば教えて下さい
Option Explicit
'このEnumprintersとMoveMemoryがWin32 API の宣言です。
#If VBA7 And Win64 Then
Type PRINTER_INFO_1
flags As LongPtr
pPDescription As LongPtr
pName As LongPtr
pComment As LongPtr
#Else
Type PRINTER_INFO_1
flags As Long
pPDescription As Long
pName As Long
pComment As Long
End Type
#End If
Private Const PRINTER_ENUM_LOCAL = &H2
#If VBA7 And Win64 Then
Private Declare PtrSafe Function Enumprinters Lib "WINSPOOL.DRV" Alias "EnumPrintersA" _
(ByVal flags As LongPtr, ByVal Name As String, ByVal Level As LongPtr, pPrinterEnum As Any, _
ByVal cdBuf As LongPtr, pcbNeeded As LongPtr, pcReturned As LongPtr) As Long
Private Declare PtrSafe Sub MoveMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(Dest As Any, Source As Any, ByVal length&)
#Else
Private Declare Function Enumprinters Lib "WINSPOOL.DRV" Alias "EnumPrintersA" _
(ByVal flags As Long, ByVal Name As String, ByVal Level As Long, pPrinterEnum As Any, _
ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Sub MoveMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(Dest As Any, Source As Any, ByVal length&)
#End If
No.1ベストアンサー
- 回答日時:
こんにちは。
どちらもコンパイルエラーということで宜しいでしょうか?
とりあえずTypeステートメントの方は、
' ' ///
#If VBA7 And Win64 Then
Type PRINTER_INFO_1
flags As LongPtr
pPDescription As LongPtr
pName As LongPtr
pComment As LongPtr
End Type
#Else
Type PRINTER_INFO_1
flags As Long
pPDescription As Long
pName As Long
pComment As Long
End Type
#End If
' ' ///
End Typeが漏れているという単純なミス。
64ビットVBA7(Office2010)/64ビットWin7環境では
正しくコンパイルされることを確認しました。
Declareの方は
64ビットVBA7ではPtrSafeキーワード抜きでDeclare文を記述するだけで、
条件付きかどうかを問わず、問答無用でコンパイルエラーとなります。
対策があるかどうかは残念ながら存じ上げません。
ただ、32ビット用のDeclare分だけをコメントブロックすれば、
条件付きのDeclareがコンパイルされていることは確認できました。
従って問題点は、32ビット用のDeclareを
64ビットVBA7で如何にして条件付きコンパイルに組み込むか
の一点に整理されます。
私はこれまで出来ないものと思い込んでいましたし、
これといって情報も持ってないのですが、
何かの情報をお持ちで、それを元に着手した、ということなら、
そこら辺を紹介なさったら、識者のコメントが付く可能性は高まるかと思います。
私はプリンターの扱いも不得手なので、例えば、
代替え案を提示するにも至りません。
お役に立てず、すみません。
回答ありがとうございました。
End Typeを追加することで、コンパイルエラーは解消されました。(単純なミスなのに気が付きませんでした)
プリンタ選択VBAとしてはまだエラー箇所があり、完成までには程遠いのですがまた相談させて頂きます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- 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ランキング
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
「fatal error C1189」を回避す...
-
” OS ビルド ” の意味が分か...
-
C言語でヘッダファイルにグロー...
-
[c++] <pthread.h>がinclude で...
-
マクロ コンパイルがグレーバック
-
<math.h>があるのにsqrtが・...
-
ビルドとリビルドの違いを教え...
-
drand48()が使えない
-
漢字のコメントをはずすとコン...
-
1 つ以上の複数回定義されてい...
-
うまくコンパイルできません
-
フォトショップでPanorama Tool...
-
fortran:includeできないとエラ...
-
PRO*C コンパイルエラー
-
extern "C" の利用方法に関して
-
ILSpyで、デコンパイルできない。
-
Borland C++ Builderで簡単なC...
-
ExcelVBAで『ByRef 引数の型が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
外部シンボル "_main"は未解決です
-
<math.h>があるのにsqrtが・...
-
ILSpyで、デコンパイルできない。
-
クリティカルエラー Expressio...
-
【VC++6.0(MFC)】警告「LINK : ...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
複数のサブディレクトリを一緒...
-
C言語のコンパイルができません
-
PRO*C コンパイルエラー
-
ExcelVBAで『ByRef 引数の型が...
-
コンパイルエラー:ユーザ定義...
-
プリコンパイルエラーについて
おすすめ情報