dポイントプレゼントキャンペーン実施中!

コマンドボタンがセル上の任意の文字を検知して、有効/無効にするため下記の様に

Private Sub Worksheet_Change(ByVal Target As Range)
➡If Target.Address = "$BA$1" And Target.Value = "合格" Then
⑤FCDデータ転送.Enabled = True
ElseIf Target.Address = "$BA$1" And Target.Value = "" Then
⑤FCDデータ転送.Enabled = False
End If
End Sub

BA1のセルに”合格”と入れたら、コマンドボタンが有効に”空白”なら無効にと出来たと思っております。
問題無くコマンドボタンは有効/無効に動く事が確認出来たのですが、複数セルを選択しセル内の文字を消したり、マクロによる複数セル内の文字を消すと何故かエラー13(型が一致しません)、が出てしまいます。(単セルの文字削除の時は出ないのですが・・・)

デバック時には、添付写真の黄色部(上記➡)の所がおかしいとなるのですが、よくわからず・・・・。

ここ2か月間ゼロから独学でVBAを覚えてきたのですが、自分で解決できるレベルを超えてしまったので、皆さまを頼らせて頂きたく(泣き)
何卒、ご教授の程よろしくお願いします。

「ExcelのVBAでエラー13が出てしま」の質問画像

A 回答 (3件)

こんにちは。



複数セルでエラーが出るという事でしょうか?

1つずつのセルで処理すれば良いのでは?と思います。
全て手入力ですので、間違っているかも知れませんが、下記の様にして
 どうでしょうか? もし、エラーが出たら、修正してみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myRng as Range

For Each myRng in Target
 With myRng
  If .Address = "$BA$1" And .Value = "合格" Then
   ⑤FCDデータ転送.Enabled = True
  ElseIf .Address = "$BA$1" And .Value = "" Then
   ⑤FCDデータ転送.Enabled = False
  End If
 End With
Next
End Sub
    • good
    • 3
この回答へのお礼

ご丁寧な回答を頂き感謝いたします!
VBA独学初心者の小職にとっては、一番分かりやすく解決が早急に出来る、mygoonickname様のを参考にさせて頂きました!
内容を拝見いたしまして、さっそく取り入れた所問題なく実行されました!エラー13は無事解消されました!ありがとうございます!!
 ”VBAが出来たらカッコいいな”の発想から、独学でやってきたのですが、やはりこういったデバックとか、問題を解決できる能力がある人に憧れます!ご丁寧なご回答誠にありがとうございました!!

お礼日時:2021/10/05 14:52

こんばんは


エラーの原因は、すでに回答されている通りでは無いかと思います。

対策については、示されている内容だけでは分かりませんので
私も独学なのでデタラメな解釈をしている事もありますが、
アドバイスとしては、シートイベントを使用する場合、使うイベントを理解する事が必要です。

Private Sub Worksheet_Change(ByVal Target As Range) は
対象シートのどのセルを変更しても実行されます。
単セルでも複数セルでも全然関係のないセルを変更しても実行されるので、
シート処理が重くなったり、思わぬエラーが発生したりします。

従って実行したい条件(セル範囲など)をプロシージャの初期に設定する必要が出て来ます。

よく使う例として
If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub

A1~A100セル以外のセルが変更された場合、ここでExit Sub
イベントプロシージャが終了します

単セルの変更以外では実行しないようにするには
If Target.Count > 1 Then Exit Sub

Then Exit Subとしていますが、複数範囲や結合セルなどを対処とする場合は
Elseなどで分岐処理を行ってください。

実行コードでセルの値を変更する事により繰り返しイベントが発生しないようにするには
Application.EnableEvents = False イベント発生を抑止
正し、このコードを実行した場合、処理の後に
Application.EnableEvents = True で 設定を戻す必要があります。
*デバッグなどで途中で止めて抜けてしまいイベントが発生しない状況が発生する事を覚えておいてください。

上記は、よく使うコードですが、他にも結合セル判定などが必要な場合もあります。 さらに選択範囲すべてを処理したい場合などは、ループ処理で対応するのがわかり易いと思います。
    • good
    • 2
この回答へのお礼

おお!もうド素人丸出しの返信になってしますのですが、Worksheet_Changeがシート全体に影響するとは思いもしりませんでした!
よくこの辺を勉強しなおして、ご教授頂いた内容で実行できるかTRYしてみようかと思います!
ご丁寧なご回答ありがとうございました!!

お礼日時:2021/10/05 14:43

こんにちは



とりあえずエラーの原因と対処法のみ。

>(上記➡)の所がおかしいとなるのですが、~~
その際の、個々の内容を調べてみればわかると思いますけれど・・・

複数のセルが同時に変更された場合(コピペなどで)、ChangeイベントのTargetにはそのセル範囲(=複数セル)が渡されます。
単体セルでない場合は、Target.Valueは「エラー13」を返します。
というのが原因でしょう。
(Target.Addressはエラーになりませんが、複数のセル範囲を返すので、目的のセルが含まれていても一致にはなりません)

そのような場合でも、きちんと処理したければ
 For Each c In Target
  ' 個別のセル(c)の処理
 Next c
のような形式で、ひとつづつのセルをチェックして処理するようにすれば宜しいのではないかと思います。
    • good
    • 2
この回答へのお礼

分かる方には対処方が直ぐ分かるのですね・・・・ホント頭が上がりません。
小職の説明分もあいまい(理解できていないからですね・・・ホント・・・泣)の中、小職の言いたい事をくみ取って頂き、誠に感謝です!このようなやり方もあるのですね・・・、これもまた勉強から入り、どの様に実行されるのかやってみようと思います!
早急なご回答に誠に感謝いたします!

お礼日時:2021/10/05 14:47

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

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


このQ&Aを見た人がよく見るQ&A