- ベストアンサー
vba
下記はある文字列を検索して何か処理する のコードの一部ですが。 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)
- みんなの回答 (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/sub05_100_050.html ユーザーフォームの閉じるボタン制御
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >if TypeName(ret) <> "Boolean" Thenのところはどういう意味でどういうことをやろうとしているのか、 InputBox メソッドで「キャンセル」を押したときに、False というBoolean 型のデータが返るから、TypeName(ret) で、判定しているのです。String 型なら、"False" という文字列が返ってしまいますが、ret が、Variant 型なら、"Boolean" で、判定できます。 F8のステップモードで確認してください。 >等しければどうする? ----->終了(キャンセルを押したから) >等しくなければどうする?----->検索(Findメソッド) ということです。
- fujillin
- ベストアンサー率61% (1594/2576)
ユーザが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にしておくことで、結果の変数の型によってキャンセル等が行われたことも判別することができるようになります。 ご質問の処理はその判定を行っていて、キャンセルでなければ検索を実行するという流れになっています。 (キャンセルの場合の処理は、質問文では省かれているので不明です)
- pentium100
- ベストアンサー率45% (689/1517)
ユーザーに入力させた「検索文字列」のチェックと思います。 Booleanは「True」「False」の二者択一なデータを保持するデータ型の一種で、 文字や数値ではないのでこれを検索対象とするとエラーになってしまいます おそらくですが検索文字列に何も入力しないで実行すると 「False」を返すので その場合を想定しているのではないでしょうか。 事前にこれをチェックし、 「Booleanでない場合」のみ検索処理を行うようにしていると思われます。 「Booleanの場合」の処理はここに書かれていないのでわかりません。