質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2181閲覧

VBAのエラーの意味がわかりません。

qqfsdfsafd

総合スコア599

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

0クリップ

投稿2021/09/28 08:10

編集2021/10/01 09:37

VBA

1Private Sub Workbook_BeforeClose(Cancel As Boolean) 2 3On Error GoTo ERROR_ 4 ' 5 'ここに100行くらい書いたわけですよ。 6 ' 7 Cancel = False 8 Exit Sub 9ERROR_ 10 Cancel = True 11End Sub

Private Sub Workbook_BeforeClose(Cancel)を使うと「Sub または Function が定義されていません。」という意味不明なエラーが出ます。

綴りも大文字、小文字も間違っていません。
どうすれば良いでしょうか?

補足
ソースコードは間違っていません。
エクセルがおかしいのです。
どうすれば良いでしょうか?

補足
考えていたら何がおかしいのかわかってきたような気がします。
エラーが出ている行は間違っていません。
関係ないところが間違っていると思います。
エクセルは馬鹿なので。

補足
エクセルがエラーメッセージを出したら、自分が間違えていると思って調べるとわけがわからなくなってイライラします。
エクセルが間違っていると考えなくてはなりません。

今回は、関数を呼び出したら、関数名を定義している行にエラーが出ましたが、そこに間違いがあると思うとわけがわからなくなってイライラしました。

たぶん、関数の中身を全部切り取ってメモ帳に貼り付けて関数の中身を空っぽにして、メモ帳から1行ずつ元に戻しては実行を繰り返すというアホみたいなことをすれば解決します。

補足
1行ずつ元に戻すのはアホみたいなので、二分探索法を使います。
最初は上半分だけ戻して実行してエラーが出たら、上半分にエラーがあると確定します。そんな感じで半分ずつ戻すことを繰り返すと早く解決します。

補足
>>エクセルは馬鹿なので。
>コードは書いた通りにしか動きません。
>書いたのは誰ですか?

間違ったエラーを出したのはエクセルです。エクセルが馬鹿なので。

補足
>要件に対して間違ったコードなのかどうか第三者が分かる情報を提示しないまま言えることではないです。「百聞は一見に如かず」と言うでしょう?

いや、最初に「Sub または Function が定義されていません。」という意味不明なエラーが出ます。」と最大限の必要十分な情報を提示しています。VBAに精通している人なら「それはfunctionの中身がどこか間違っているだけです。」と的確な回答が出来たハズです。

補足
>ということなら、y_waiwaiさんの
>「意味不明、と切り捨てずに、エラーメッセージを理解し、正しく修正すればいいです」
>がベストアンサーでいいんじゃないの?

いや、そうではありません。
「エクセルのエラーメッセージは間違っています。エクセルのエラーメッセージを真に受けてはいけません。また、エクセルのデバッガは馬鹿なのでステップ実行もあきらめましょう。関数の中身を全部切り取ってメモ帳に貼り付けて関数の中身を空っぽにして、メモ帳から1行ずつ元に戻しては実行を繰り返すというアホみたいなことをすれば解決します。」が正解です。

補足
>コードを示さず「この部分です」って言えるわけないだろ。

エラーが出ていたコードは示しています。
Private Sub Workbook_BeforeClose(Cancel)
↑デバッグ実行すると、この行でエラーになります。

補足
>じゃあそこ直せよ。
>そこに問題があるんだろ?
>問題がある個所を示したんだよな?
>解決だな。

だから!この行には何も問題ないのに、この行でエラーが出るからエクセルが馬鹿だって言ってるんだよ!

もういいです。
明日も明後日も会社休みだからソースコード見れるのは金曜日なんで。

補足
>結局、問題というのは
>ブックを閉じたときに動くイベント処理を書きたくて、ネットで検索したコードを見よう見まねで貼り付けてみたけど、うまく動かなくて、よくよく調べてみたら標準モジュールじゃなくてThisWorkbookに書かないといけないという説明を見落としていた、というのが原因でした、正しい場所に移動させたら動くようになりました、ということでいいの??

違います。
その問題は解決して、呼ばれるようになったけど、Private Sub Workbook_BeforeClose(Cancel)の行で「Sub または Function が定義されていません。」という意味不明なエラーが出てイラッとしたので、ここに書き込んで会社を出ました。

補足
将棋に例えるなら封じ手をして2日間お休みする感じです。

補足(解決した)
コンパイルエラー
コンパイルエラー

デバッガが止まるところ
デバッガが止まるところ

追記
エラーラベルのコロンは付け忘れていませんでした。
自分のフォルダ名取得にこのサイトを参考にしたのが間違いでした。
https://lilia-study.com/excel/excel-sample/cell-folbosh.html

jmdajmw👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2021/09/28 08:58

どのサイトのサンプルコードを真似して、どんなコードを書いて実行したのか、を書くと きっと適切なアドバイスがもらえると思います。
Zuishin

2021/09/28 11:00 編集

> たぶん、関数の中身を全部切り取ってメモ帳に貼り付けて関数の中身を空っぽにして、メモ帳から1行ずつ元に戻しては実行を繰り返すというアホみたいなことをすれば解決します。 すればいいじゃない。 コードを隠して人に尋ねるよりはよほど賢い。
m.ts10806

2021/09/28 11:00

他者が再現可能な情報提示しないと「エラー見て直して」くらいしか応えようがないです。 >エクセルは馬鹿なので。 コードは書いた通りにしか動きません。 書いたのは誰ですか?
m.ts10806

2021/09/28 11:08

>間違ったエラーを出したのはエクセルです。エクセルが馬鹿なので。 要件に対して間違ったコードなのかどうか第三者が分かる情報を提示しないまま言えることではないです。「百聞は一見に如かず」と言うでしょう?
gentaro

2021/09/28 11:34

こんなん狙ってやってる荒らしアカウントか、知能に何らかの重大な問題がある人だろうから、相手する方もどうかと思う。
Zuishin

2021/09/28 11:39

> 「それはfunctionの中身がどこか間違っているだけです。」と的確な回答が出来たハズです。 それは function の名前が間違っているだけです。 そうでなければスコープの問題です。 こんなんでいいの? コードを示さず「この部分です」って言えるわけないだろ。
jinoji

2021/09/28 11:44

ということなら、y_waiwaiさんの 「意味不明、と切り捨てずに、エラーメッセージを理解し、正しく修正すればいいです」 がベストアンサーでいいんじゃないの?
m.ts10806

2021/09/28 12:02

エクセルに精通している人≠VBAに精通している人 どっちにしても「精通している人」は「あなたの書いたコードを知っている人」ではないからねぇ。100人いたら100通りのコードが出来上がるし。 まぁエラー読んで頑張ってください。他者を頼るなら再現可能な情報を出すこと。以上。
Zuishin

2021/09/28 13:59

> エラーが出ていたコードは示しています。 じゃあそこ直せよ。 そこに問題があるんだろ? 問題がある個所を示したんだよな? 解決だな。
jinoji

2021/09/28 14:12

結局、問題というのは ブックを閉じたときに動くイベント処理を書きたくて、ネットで検索したコードを見よう見まねで貼り付けてみたけど、うまく動かなくて、よくよく調べてみたら標準モジュールじゃなくてThisWorkbookに書かないといけないという説明を見落としていた、というのが原因でした、正しい場所に移動させたら動くようになりました、ということでいいの??
Zuishin

2021/09/28 14:12

> だから!この行には何も問題ないのに、この行でエラーが出るからエクセルが馬鹿だって言ってるんだよ! だから問題のある個所を掲載してないということだろう。 掲載してないのに示せるわけがないじゃないか。
jinoji

2021/09/28 15:20

(最初からその絵を作って貼れよと言いたい気持ちをこらえつつ) 実際にコードを実行する前に、「デバッグ(D)→VBAProjectのコンパイル(L) 」を行うと、 今回のようなエラーなんかは事前に発見できるのでおすすめです。 ([Alt]+[D]→[L]のショートカットが便利です。)
Zuishin

2021/10/01 09:45

結局私の言う通り、呼び出した関数名が間違っていたということじゃないか。 どう間違っていたのかは掲載していないので示せるわけがない。
guest

回答3

0

意味不明、と切り捨てずに、エラーメッセージを理解し、正しく修正すればいいです

投稿2021/09/28 08:11

y_waiwai

総合スコア87778

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qqfsdfsafd

2021/09/28 09:39

Excel VBA マヂ意味不明なんで。
y_waiwai

2021/09/28 09:51

そこんところのコードを提示してくれればこっちでも見れるんだけどねー
qqfsdfsafd

2021/09/28 10:18

ソースコードは業務機密なので掲載出来ません。
y_waiwai

2021/09/28 10:26

そんな業務機密に関わることをこんなところで聞いて大丈夫?w
qqfsdfsafd

2021/09/28 10:28

autocloseとかbeforecloseは別に業務機密でも何でもないので。
jinoji

2021/09/28 10:36

autocloseとかbeforecloseを使うと、とありますが、 なにか別の処理からautocloseとかbeforecloseを呼び出そうとしているのですか?
qqfsdfsafd

2021/09/28 10:47

Workbook_BeforeClose(Cancel)です。 ブックを閉じるとき自動的に呼ばれます。 最初はこれを標準モジュール内に書いてて呼ばれなくてわけがわかりませんでした。 ThisWorkbookの中に書かないといけないとか意味不明です。
jinoji

2021/09/28 10:51

ThisWorkbookの中に書かないといけないことを、 以前は知らなかったが、今は理解したのですね?
qqfsdfsafd

2021/09/28 10:57

というか、「Workbook_BeforeClose 呼ばれない」で検索すると、Application.EnableEvents = True にしろというやつばっかり出てきてなかなか解決しませんでした。 ThisWorkbookの中に書け!という説明が最初に出てくるべきです。
jinoji

2021/09/28 10:59

あなたがWorkbook_BeforeCloseをはじめて知ったときのページには、 ちゃんと書いてありましたよ、きっと。
hatena19

2021/09/28 13:06

「Workbook_BeforeClose」でググると最初に出てくるページの最初に 「VBEの「Microsoft Excel Objects」内の「ThisWorkbook」に記述します。」 と書いてありました。次のページにも、3番目のページにも、同様の記述がありました。
qqfsdfsafd

2021/09/28 13:10

うん。そのページは見たけどスルーした。
hatena19

2021/09/28 13:18

「Workbook_BeforeClose 呼ばれない」でググってみた。最初に出てくるページでも、 【Workbook_BeforeClose】 「ThisWorkbook」に記述する としっかり書いてある。
qqfsdfsafd

2021/09/28 13:26

そのページも見たよ。 書き方が悪過ぎ。 「不具合内容」の先頭に「標準モジュール内に記述すると呼ばれない」って書いてくれないとわからない。
jinoji

2021/09/28 13:28

書いたとおりにしか動かないExcelと 書いてあってもスルーする人間との仲を取り持つのは まあなかなか難儀なことですな。
hatena19

2021/09/28 13:30

「ねこは電子レンジであたためてはいけない」と取説に書くべきと主張するのと同レベル。
qqfsdfsafd

2021/09/28 13:35

だいたい30分で100行くらい書くペースなので仕方ありません。
Zuishin

2021/09/28 14:15

動かないものを何行書こうが遊んでるのと同じ。
guest

0

これはVBAのデバッガがおかしいですね。
ちゃんと On Error Goto ERROR_ の行まで進んで止まるべきです。

投稿2021/09/28 22:14

jmdajmw

総合スコア302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2021/09/28 23:07

それぞれのSubモジュールは、その実行の直前ではじめてコンパイルされ、 コンパイルエラーがある場合は、そこですぐ処理が中断します。 エラーがあるとわかっている場合はその処理を開始しないという思想なのだと思います。 高速道路がその先事故で通行止めになっているときに入口を閉鎖するようなものでしょうか? 行けるところまで行けるべきだ、という考え方もあるのでしょうが、 どちらかがおかしい、正しい、と言えるものでもないように感じます。 ちなみに、他にエラーがなく ERROR_: の行ラベルが書き漏れているだけの場合は、 「行ラベルが定義されていません」のコンパイルエラーが出て、 エラー箇所の表示(青色)は On Error Goto ERROR_ の行になります。 どういう順番で内部のチェックが行われているかが垣間見える瞬間です。
退会済みユーザー

退会済みユーザー

2021/09/29 01:22

本人の複垢くさい
jinoji

2021/09/29 03:04

「自分は悪くない、自分以外のものすべてが、自分の思い通りに動かないのがおかしい」と考える人が、 本人のほかにも偶発的に何人かいあわせる可能性も、まあゼロではないですよ。
退会済みユーザー

退会済みユーザー

2021/09/29 05:16 編集

極めて低い可能性であるかもしれませんが、それに加えて本人以外がほぼ同じタイミングでこの質問に高評価付ける可能性は、限りなくゼロに近いでしょうね。一応通報はしたので、判断は運営に委ねますが。
jmdajmw

2021/10/01 09:58

それは、エクセルのワークシート関数とVBAの関数名が統一されていないことが問題ですね。
guest

0

ベストアンサー

ああ、わかったかも。
イメージ説明
こうなって、
イメージ説明
こうなったのか。

エラーメッセージは「Sample1」というモジュールが存在しないことについてのエラー。
そのエラーがあるため、このSubモジュールは実行できないので、頭のところで処理が中断される。
そのため1行目が黄色。
実際のエラーの場所を探すには、黄色じゃなくて、青い箇所を見ることが必要でした。


<追記>

書いている間に質問が編集されていた。
けど1行目が黄色になる理由は同じ。
実際のエラーの個所は、

VBA

1ERROR_ 2 3 ↓ 4 5ERROR_: 6

エラーラベルのコロンの付け忘れです。

投稿2021/09/28 14:34

編集2021/09/28 15:07
jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qqfsdfsafd

2021/09/28 15:16

とりあえず On Error Goto ERROR_ の後に100行くらい適当に書いてみ。わけわからんから。
jinoji

2021/09/28 15:24

まあそう開き直らんと。 上のコメントにも書いたけど、 実際にコードを実行する前に、「デバッグ(D)→VBAProjectのコンパイル(L) 」を行うと、 今回のようなエラーなんかは事前に発見できるのでおすすめです。 ([Alt]+[D]→[L]のショートカットが便利です。)
jinoji

2021/09/28 15:26

On Error Goto ERROR_を書いたら、 100行書く前にまず ERROR_: を書くようにしたらいいかもね。
qqfsdfsafd

2021/09/28 16:32 編集

ベストアンサーを選ぶのは金曜日に会社の環境で確認してからにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問