プロが教えるわが家の防犯対策術!

いままで問題なく動いていたVBAが標記のようなメッセージをだして動かなくなりました。
ネットで調べるとDecareにPtrSateを付加すれば良いとのことです。
ところがソースにはDecareステートメントはありません。

どうすればよろしいでしょうか、ご教示ください。
なお赤字で
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
というメッセージもエディタに表示されています。

OSは windows10Pro64ビット
Excelは Microsoft 365 mosです。

A 回答 (5件)

No4 です。

わかりました。画像添付をお待ちしております。
ちなみに Windows API の Beep 館数は、指定した単一の周波数の音をミリ秒単位の指定時間だけ発します。
    • good
    • 0
この回答へのお礼

皆様、ありがとうございました。

回答が締め切られてしまいましたので、画像も含め、情報を再度とりまとめの上、質問をあげるようにします。ぜひ次もご教示いただきますようお願いいたします。

お礼日時:2021/02/25 07:02

Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _


(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
上の2行を単なる赤いメッセージと勘違いされていらっしゃいますが、Windows API の関数に接続するために記述された列記としたコードなのです。プロシージャ内で使われる API関数のコードと密接な関わりを持っている重曹なコードです。そして Decare ステートメントではなく、Declare ステートメントになります。

Declare ステートメント (VBA) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/lang …

モジュールレベルで記述する決まりなので、プロシージャの上に記述されています。赤く表示されているのは、コンパイルエラーの箇所が赤く強調されているためですが、 Declare ステートメントは Excel を 32bit版 から 64bit版 に変更したら書き換える必要があります。
Beep関数(プロシージャ内では BeepAPI と記述されているはずです)に接続するコードは、以下のように修正すればコンパイルエラーは解消されます。
Declare PtrSafe Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

【参考まで】
Beep 関数 - Win32apps | Microsoft Docs(英語)
https://docs.microsoft.com/ja-jp/windows/win32/a …
    • good
    • 0
この回答へのお礼

ご教示ありがとうございます。

>Declare ステートメントは Excel を 32bit版 から 64bit版 に変更したら
>書き換える必要があります。

そのようですね。
ただDeclareステートメントは全く使用していないのです。
というより、私自身が初心者ですのでDeclareステートメントがあるということを今回初めて知りました。

エラーメッセージの画像などを職場にいったときにとるようにします。
引き続きご教示よろしくお願いします。

お礼日時:2021/02/17 06:58

#2です。


>VBAエディタの上部に赤色で表示されており、エディタでは修正できません。 
そうなんですね。コードウィンドに表示されているのではないのですね。

VBEは表示されているのですか?

既に行っていると思いますが、一応、念のため
Alt+F11でVBEを開き
編集タグ、検索 検索する文字に Declare 対象のオプションボタンを
カレント プロジェクト で 次を検索を押して検索してみてください。
もし見つからない場合は、プロジェクトウィンドウにある違うプロジェクトでも探してみてください。
(アドインや個人用マクロブックPERSONAL.XLSBの可能性があります)
他のプロジェクトに保護などが設定されている場合、修正が難しいので、最新のものに変えるか、使用を外す事になると思います。

>いままで問題なく動いていた
との事なので最近入れたアドインの可能性もありますね。64bitに対応していないものを入れたとか、、です。

上記に当てはまる事柄がなく解決できない場合は、
私が回答できるか分かりませんが、画像を掲示されるとわかり易いと思います。
簡単な画像作成手順
Shift+Windowsキー+Sキー で Window表示範囲を選択
画像ソフトの新規キャンパスにペースト、必要に応じて加工し画像保存、 画像添付でUP

あと、最近疎くてごめんなさい。
Microsoft 365 mos ってどのバージョン?
    • good
    • 0
この回答へのお礼

くりかえしのご教示ありがとうございます。

職場に行くのが不定期なのですが、今週中にいって画像をアップするようにします。

>アドインや個人用マクロブックPERSONAL.XLSBの可能性があります

職場でVBAを作成できるのは私ひとりですので、この可能性はないと思います。

お礼日時:2021/02/17 06:53

ごめんなさい。

ご質問文読み間違えました。
#1忘れてください。
>ソースにはDecareステートメントはありません。
>メッセージもエディタに表示されています。
エディタのどこに表示されているのでしょう?
その表示?(デバッグ)? を書き換えられるなら、

#If VBA7 And Win64 Then
Private Declare PtrSafe Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As LongPtr, ByVal dwDuration As LongPtr) As Long
#Else
Private Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
#End If

環境がそろっていないので検証していません。
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。

>エディタのどこに表示されているのでしょう?
>その表示?(デバッグ)? を書き換えられるなら、

Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
  ↑
VBAエディタの上部に赤色で表示されており、エディタでは修正できません。

お礼日時:2021/02/16 21:21

こんばんは、


違ってらごめんなさいね。
Declare PtrSafe Function ・・・で解消されますでしょうか?

ちゃんと確認していないので、参考サイトを
https://excel-databace.hatenablog.com/entry/64bi …
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。

>Declare PtrSafe Function

これで解消されると思うのですが、そもそもソースにDeclareという単語がありません。ですのでどう追加すれば良いのかがわからないのです。

お礼日時:2021/02/16 21:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています