advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 295 for cell filename (0.001 sec.)
cell (1170), filename (1984)
[[20170219101746]]
#score: 11157
@digest: a5b05ac28d68c3dcc8256a5d3bb97f68
@id: 72745
@mdate: 2017-02-21T02:54:24Z
@size: 5943
@type: text/plain
#keywords: sprom2 (22494), rngfind (12307), findcell (11293), 社年 (9563), 再入 (9188), sname (6128), searchdirection (5767), xlnext (4771), searchorder (4570), xlbyrows (4050), 入社 (4042), タセ (3679), 氏名 (3389), 。") (3358), matchcase (3130), inputbox (3092), xlpart (2746), activecell (2743), lookin (2699), 日") (2464), lookat (2079), what (1848), activate (1842), xlvalues (1744), 漢字 (1642), 個所 (1533), 月日 (1480), 年月 (1442), ンセ (1359), after (1293), キャ (1137), name (1136)
『文字検索時、見つからない時のエラー退避について』(すーさん)
お世話になります。 マクロで、氏名を入力し、名簿から行を取得するよう、下記のようにしています。 name = InputBox("氏名を漢字で入力して下さい。") Sheets("入社年月日").Select Range("C:C").Select Selection.Find(What:=name, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate If Not ActiveCell Is Nothing Then name = InputBox("氏名が見つかりませんでした。再入力して下さい。") Selection.Find(What:=name, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate End If i = ActiveCell.Row 正しい氏名を入力したときは、正常に終了するのですが、 誤った氏名のときは、IF文までいかず、下記のようなエラーメッセージがでて、 終了することになります。 「実行時エラー'91': オブジェクト変数または With ブロック変数が設定されていません。」 これを表示させずに、氏名の再入力を依頼するためには、 どこをどのようにすれば良いのか教えていただきたく、 よろしくお願い致します。 < 使用 Excel:Excel2010、使用 OS:Windows10 > ---- ここを参考に修正してみてください http://officetanaka.net/excel/vba/cell/cell11.htm (マナ) 2017/02/19(日) 13:37 ---- マナ様 ご返事ありがとうございました。 参考のURLを開いて、いろいろ試しているのですが、 再入力の表示がでたと思ったら、データセットの個所で、 エラーになったりして、まだ完璧な回答には至っていませんが、 もう少し頑張ってみます。 (すーさん) 2017/02/19(日) 18:49 ---- >データセットの個所で というのが、よくわかりませんが… こんな流れになると思います。 繰り返しのところはDo while〜Loopを使うとよいです。 1)氏名を入力 2)入力しないなら終了 3)検索実行 4)検索されない間は5)〜7)を繰り返す 5)氏名を再入力 6)入力しないなら終了 7)検索実行 8)検索されたら、そのセルの行番号を表示 (マナ) 2017/02/19(日) 19:39 ---- こんにちは。 単純な案ですけども name = InputBox("氏名を漢字で入力して下さい。") Sheets("入社年月日").Select Range("C:C").Select If Not ActiveCell Is Nothing Then name = InputBox("氏名が見つかりませんでした。再入力して下さい。") Selection.Find(What:=name, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate Else Selection.Find(What:=name, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate End If i = ActiveCell.Row これでエラーにならないと思いますがどうでしょうか? (2Win) 2017/02/20(月) 12:44 ---- Selection.Find(What:=name, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate ‾‾‾‾‾‾‾‾ ↑ 検索してセルが見つからなかった(Rangeオブジェクトがない)ら当然、 どのセルをアクティブにしていいか解らないので、 「セル範囲が設定されていません。」となりますよね? (そういう風にエラーメッセージを返してくれればもっとわかりやすいとは思いますが^^;) こういう場合はFindメソッドは実行結果にRangeオブジェクトを返しますので、 その結果に対してすぐ操作をするように書くのではなく、 一旦、Rangeオブジェクト型の変数に代入してやります。 検索で見つからなかったら「Nothing」が返ってきますので、 Nothingな間はLoopして、Inputbox関数を繰り返し実行します。 ただしそれだと、永遠にループから抜け出せなくなる可能性があるので、 (わざと見つかる名前を入力すれば別ですが。。。) さらに、キャンセルしたときはプログラムを抜けるようにします。 Sub test() Dim sName As String Dim sProm As String Dim sProm2 As String Dim rngFind As Range sProm = "キャンセルされました。" sProm2 = "氏名の入力" Do sName = InputBox(sProm2) If StrPtr(sName) = 0 Then GoTo WayOut If Len(sName) > 0 Then Set rngFind = Sheets("入社年月日").Range("C:C").Find(What:=sName) End If sProm2 = "「" & sName & "」は見つかりませんでした。再入力しますか?" Loop While rngFind Is Nothing sProm = "入社年月日: " & rngFind.Offset(, 1).Text WayOut: MsgBox sProm End Sub ※見つけた後どうしたいか解らないので、見つかったセルの1列右のセルの表示されてる文字列を、 メッセージボックスで表示してみました。 ※Findメソッドの引数を省略しましたが、 よくわかってないで省略すると、誤作動の元になります。 マクロの記録で記録された物すべてを書くことをお勧めします。 (まっつわん) 2017/02/20(月) 14:43 ---- 皆様いろいろご指導ありがとうございました。 皆様の助言や他のVBAのサイトを参考にして、試行錯誤の結果、下記のような記述で、 何とか中断せずにマクロを実行することができました。 '検索文字を取得する name = InputBox("氏名を漢字で入力して下さい。") If Len(name) = 0 Then Windows(konki & filename).Activate ActiveWorkbook.Close SaveChanges:=False MsgBox "キャンセルされました" Exit Sub End If '入力文字を検索し、行を取得する Sheets("入社年月日").Select Columns("C").Select Set FindCell = Columns("C").CurrentRegion.Find(What:=name) If FindCell Is Nothing Then name = InputBox("氏名が見つかりませんでした。再入力して下さい。") Set FindCell = Columns("C").CurrentRegion.Find(What:=name) If FindCell Is Nothing Then Windows(konki & filename).Activate ActiveWorkbook.Close SaveChanges:=False MsgBox "氏名を確認して、実行し直して下さい" Exit Sub End If End If 二度の入力ミスは、最初からやり直すように変更しました。 ありがとうございました。 (すーさん) 2017/02/21(火) 11:54 ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201702/20170219101746.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97054 documents and 608269 words.

訪問者:カウンタValid HTML 4.01 Transitional