
以前質問をしたのですが、結局解決しないままとなっています。
再度VBAがとまったときの画面を添付して再度おたずねします。
Declareのスペルがまちがっていました。
いままで問題なく動いていたVBAが標記のようなメッセージをだして動かなくなりました。
ネットで調べるとDelcareにPtrSateを付加すれば良いとのことです。
ところがソースにはDlecareステートメントはありません。
私自身、初心者ですので「Dlecare」というステートメントを初めて知りました。
どうすればよろしいでしょうか、ご教示ください。
なお、職場のものですので、Officeの再インストールはできません。
職場に行くのが不定期ですので、お礼が遅れますことご容赦下さい。
なお赤字で
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
というメッセージもエディタに表示されています。
OSは windows10Pro64ビット
Excelは Microsoft 365 mosです。
なお、家のHome64ビットでは問題なく動きます。

No.7ベストアンサー
- 回答日時:
北ウイングです。
条件付きコンパイルの表示色について補足します。
エクセル64bit版では、#Else から下にある 32bit用の Declareステートメントは赤く表示されますが、64bit版では実行されない行なので赤いままでも問題ありません。
また、エクセル32bit版でも #Else から上にある 64bit用の Declareステートメントが赤く表示されますが、32bit版では実行されない行なので赤いままでも問題ありません。
北ウィングさんのご指摘のコードをいれたら、無事うごきました。月曜日には名簿をきちんと出力しなければならなかったのですが、おかげさまで間にあいました。
本当に、前回の質問から丁重にご指導いただきありがとうございました。
No.6
- 回答日時:
No.3回答の補足>どうソースを修正すればよいのかがわかりません。
北ウイングさんの回答どおりに、API宣言を64ビット対応修正するのが手っ取り早いかと。
上記対応が難しければ、Declare消して、代わりに同様な関数を定義してあげるとか。
試してないけど、こんな感じ:
Public Function BeepAPI(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
BeepAPI=0
Beep
End Function
No.4
- 回答日時:
画像の貼り付け、ありがとうございます。
お待ちしておりました。まず先に回答します。画像から判断した結果、赤字の箇所
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
を
#If Win64 Then
Declare PtrSafe Function BeepAPI Lib "kernel32" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
#Else
Declare Function BeepAPI Lib "kernel32" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
#End If
に書き換えれば、会社の64ビット版でも、ご自宅の32ビット版でも走ります。これは「条件付きコンパイル」と呼ばれている記述方法です。
#If Win64 Then ~ #End If までをコピーアンドペーストして使ってください。
なお、If ステートメントの条件になっている条件定数「Win64」は【エクセルが64ビット版だったら】という意味です。勘違いし易い名称になっていますので使う時には注意が必要です。
> なお、家のHome64ビットでは問題なく動きます。
という事は、ご自宅のエクセルは32ビット版だと思われます。
[Windows API] という分野を扱うには、OSアーキテクチャーの違いでは無く、エクセル自体が32ビット版のエクセルなのか、64ビット版のエクセルなのかが決め手になってきます。
[Windows API] は [Win32 API] とも呼ばれ、32ビットでしか動作しません。[Windows API] を 64bitエクセルで呼び出した場合は、必ず SysWow64フォルダー(System Windows 32-bit On Windows 64-bit の略)内の32bitエミュレーター用DLLを参照します。
[Windows API] が読み書き可能なデーター型の大きさは32bit分しかないので、呼び出し元のエクセルで64bit分の大きさに変換する必要性が出てきます。それを行う記述が PtrSafe 属性なのです。
> ところがソースにはDlecareステートメントはありません。
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
もソースなんです。そのソースの記述が文法的に間違っているからこそ、訂正すべき箇所が反転表示されて、且つ、コンパイル出来ない行を赤く表示させています。
初心者の方がプロシージャーの外はソースコードではないと誤解してしまうのは仕方ないとも思いますが、モジュールに記述されている文字列はコメント以外すべてソースコードと解釈されます。これは Visual Basic Editor の仕様です。
最後に、私の過去の回答が修正の参考になればと思い、リンクを載せておきます。
https://detail.chiebukuro.yahoo.co.jp/qa/questio …
丁重なご教示ありがとうございます。
赤色のメッセージがでているところにはりつけましたが、
コンパイルエラー
プロシージャの外では無効です、とのメッセージがでています。
No.1
- 回答日時:
問題なく動いていたってのはエラーが出た時に何も環境を変えていないのにって事ですか?
Excel には、[32ビット版]と[64ビット版]が存在する?
https://www.cellnets.co.jp/column/excel64bit_err …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- Visual Basic(VBA) M365環境での動作エラー、及び対応相談 1 2023/01/27 04:18
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- 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でfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c++ , template , ファイル分割...
-
VBAを何回も作り直して、容量が...
-
「fatal error C1189」を回避す...
-
drand48()が使えない
-
VB6とInputManソフトの関係
-
windowsでLinuxで作成したソー...
-
gdbデバッグのためのmakefile作成
-
デコンパイル?について
-
アクセス2003 ファイルの...
-
PRO*C コンパイルエラー
-
ヘルプましんについて教えて下...
-
ILSpyで、デコンパイルできない。
-
C言語でmからnまでの合計を求め...
-
cc hello.cってやっても、、、
-
【VC++6.0(MFC)】警告「LINK : ...
-
ビルドから除外されたソースの...
-
” OS ビルド ” の意味が分か...
-
サンプルスケッチをそのまま使...
-
C++コンパイル時に『 C1083: in...
-
関数形式マクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
1 つ以上の複数回定義されてい...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
外部シンボル "_main"は未解決です
-
C++コンパイル時に『 C1083: in...
-
ビルドとリビルドの違いを教え...
-
コンパイルエラー:ユーザ定義...
-
「DeclareステートメントにPtrS...
-
戻り値について
-
pyc 編集 閲覧
-
PRO*C コンパイルエラー
-
【VC++6.0(MFC)】警告「LINK : ...
-
漢字のコメントをはずすとコン...
おすすめ情報
エラーメッセージが写真では見にくいのでタイプします。
コンパイルエラー
このプロジェクトのコードは64ビットシステムで使用するために更新する必要があります。Delcareステートメントの確認及び更新を行い、次にDelcareステートメントにPtrSafe属性を設定して下さい。
ご多忙にもかかわらず、皆様ご教示ありがとうございます。
明日、職場に行きますので、ご指摘のあった部分をやってみます。
北ウィングさま、お手数をおかけしています。
メッセージのとまった状態の画像をアップします。
皆様、ありがとうございました。
ネットにも情報が掲載されておらず途方にくれていたところです。
この質問を通じてあらたな知識も得ることができました。
ご教示いただいた皆様がたに感謝申し上げます。
また、困ったときはご教示いただければ幸いです。