
下記はある文字列を検索して何か処理する
のコードの一部ですが。
if TypeName(ret) <> "Boolean" Thenのところはどういう意味でどういうことをやろうとしているのか、わかりやすく説明してください。
"Boolean"て何
等しければどうする?
等しくなければどうする?
ret = Application.InputBox("検索文字列を入力してください")
If TypeName(ret) <> "Boolean" Then
With mySht.Cells
Set r = .Find(ret, LookIn:=xlValues, lookat:=xlPart)
No.4ベストアンサー
- 回答日時:
私は他の回答で安易に
x=InputBox("abc")
なんて回答しますが、手抜きをしているわけです。質問のコードは丁寧に、備えがなされています。
他人にこのプログラムを実行して、応答などを操作してもらうときは、何をされるかわからないので、備えのルーチンを入れておかねばなりません。普通操作者がすることで、ありえるのは
#2で書いておられる3つです。電源をオフにするなどもありえるがどうしようもない。
Xボタンを押す
キャンセルボタンを押す(Esc)
値入れずENTER(値が空白かで聞ける)
何か入れてENTER(これは普通)
Sub test01()
ret = Application.InputBox("検索文字列を入力してください")
MsgBox TypeName(ret) '<> "Boolean" Then
End Sub
をやって応答を様々にすると意味がわかります。
このほか、ret の値も調べて、その業務や処理に不適当な応答は排除し、再入力を促します。その点質問のコードには入ってないが。
参考
Inputbox以外のコントロールなどのキャンセルなどの対策例
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
ユーザーフォームの閉じるボタン制御
No.3
- 回答日時:
こんばんは。
>if TypeName(ret) <> "Boolean" Thenのところはどういう意味でどういうことをやろうとしているのか、
InputBox メソッドで「キャンセル」を押したときに、False というBoolean 型のデータが返るから、TypeName(ret) で、判定しているのです。String 型なら、"False" という文字列が返ってしまいますが、ret が、Variant 型なら、"Boolean" で、判定できます。
F8のステップモードで確認してください。
>等しければどうする? ----->終了(キャンセルを押したから)
>等しくなければどうする?----->検索(Findメソッド)
ということです。
No.2
- 回答日時:
ユーザがInputBoxの入力を終える方法は、以下の3通りと考えられます。
1)入力ダイアログの右上の×マークでダイアログを閉じる
2)入力をして(しないのも含む)、OKボタンで閉じる
3)入力をして(しないのも含む)、キャンセルボタンで閉じる
例えば
Dim ret As String
ret = Application.InputBox("文字列を入力")
MsgBox (TypeName(ret) & " / " & ret)
を実行したときに、入力に「False」という文字列を入れて返すと、表示される結果は上の場合分けに応じて以下のようになります。
1)String / False
2)String / False
3)String / False
これだと、どの場合か区別がつきません。
(False以外の文字列を入力すれば区別できますが…)
一方、同様の処理を
Dim ret As Variant
で型宣言をしておいて同様に実行すると、今度は結果が
1)Boolean / False
2)String / False
3)Boolean / False
となって返されるので、2)の場合だけがユーザが「False」という文字列を入力してOKを押したと判別することができます。
このように、入力を受ける変数をVariantにしておくことで、結果の変数の型によってキャンセル等が行われたことも判別することができるようになります。
ご質問の処理はその判定を行っていて、キャンセルでなければ検索を実行するという流れになっています。
(キャンセルの場合の処理は、質問文では省かれているので不明です)
No.1
- 回答日時:
ユーザーに入力させた「検索文字列」のチェックと思います。
Booleanは「True」「False」の二者択一なデータを保持するデータ型の一種で、
文字や数値ではないのでこれを検索対象とするとエラーになってしまいます
おそらくですが検索文字列に何も入力しないで実行すると
「False」を返すので
その場合を想定しているのではないでしょうか。
事前にこれをチェックし、
「Booleanでない場合」のみ検索処理を行うようにしていると思われます。
「Booleanの場合」の処理はここに書かれていないのでわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) ワークブック内すべて検索 2 2022/12/20 20:13
- Visual Basic(VBA) VBAで実行時エラー'424' オブジェクトが必要ですと出る 2 2022/10/07 09:25
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語 プログラミング
-
C言語(高校1年の内容)について
-
数字を入力して配列に格納する...
-
applescript システム環境設定...
-
エクセルワークシート上で、1、...
-
C++流入力の妥当性チェック方法
-
Excel VBAで、Application.Inpu...
-
コマンドラインから引数を渡し...
-
VBAで2進法から10進法に変換さ...
-
C言語で入門の本を読んだあとは...
-
ISBNチェッカー
-
cin.get(c)について
-
c言語でのプログラミング
-
ザウルスSL-C860上での{}の入力
-
java初心者です。入力されたの...
-
【C言語】入力された文字種別ご...
-
曜日別Excelセルにデータコピー
-
fopenで強制終了
-
C言語について
-
関数の値(scanf)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
Excel VBAで、Application.Inpu...
-
電卓の小数点
-
cout関数を使っているのですが...
-
"scanf"でエンターで改行させな...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
getchar()について 教えてくだ...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
コマンドプロンプトからのEOFの...
-
IF文で戻ることはできますか?...
-
プログラミングの問題です 「金...
おすすめ情報