- ベストアンサー
VBAの書き方を教えてください
- 以前にこちらで質問をさせていただき、VBAを追記する方法について教えていただきましたが、移動したシートをアクティブにする方法がわかりません。
- 移動したシートのA1000をアクティブにするために、どこに何を入れればよいのでしょうか?
- よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
もう、おおよその正解はついているので、あえて回答する必要もないとは思いますが、 あえて、元のコードを直すなら、 '// Private Sub CommandButton1_Click() Dim i As Long Dim myFlg As Boolean For i = 1 To Worksheets.Count If Worksheets(i).Name = Range("A1").Value Then '* 加筆 myFlg = True Exit For End If Next i If myFlg = True Then With Worksheets(i) .Activate .Range("A1000").Select '* 加筆 End With Else MsgBox "該当シートなし" End If End Sub '// 確かに、ループよりは、Goto のほうがよいでしょうが、私なら、回答として、このようなコードを書きます。ただし、実務上は、私は、違うコードを書きます。あまり、Error トラップを置き過ぎると、コードが読みにくくなりますから、実務では、Errorが分かる範囲の場合は、トラップは置かない場合が多いです。 '// Private Sub CommandButton1_Click() Dim wsName As String If Range("A1").Value <> "" Then wsName = Range("A1").Value On Error Resume Next Application.Goto Worksheets(wsName).Range("A1000"), True End If If Err.Number <> 0 Then MsgBox Err.Description, vbCritical wsName = "" 'もしも、この後のコード加える場合は、これを書いておいたほうが無難です。 End If End Sub '//
その他の回答 (3)
- over_the_galaxy
- ベストアンサー率25% (104/408)
AN1です。訂正します。 原因が分かりました。アクティブでないシートのセルを直接selectやactivate出来ません。 なので一旦シートを選択してからセルをアクティブにします。 If myFlg = True Then Worksheets(k).select Range("A1000").Activate Else これでOKです。間違ってたらごめんなさい。
お礼
over the galaxyさん。 ありがとうございます。 すみません、自分もシートを選択してからセルを指定する方法を考えていたのですが、うまくいかなかったので、こちらに質問させていただいていました。 やはり、教えて頂いたのではアクティブシートは、移動先ではなく元のシートになってしましました。 また、何かあればよろしくお願いいたします。
- over_the_galaxy
- ベストアンサー率25% (104/408)
If myFlg = True Then Worksheets(k).Range("A1000").Activate Else で出来ると思います。
補足
おはようございます。 実行時エラー1004 RangeクラスのActivateが失敗しました。 が発生してしまいます。 何とかなりますでしょうか?
- keithin
- ベストアンサー率66% (5278/7941)
private sub CommandButton1_Click() on error resume next application.goto worksheets(range("A1").value).range("A1000"), true end sub でいいです。
お礼
keithinさん。 早急な回答ありがとうございました。 教えて頂いた内容で実行できたのですが、使う者が全くの素人なのでどうしてもエラー文面が必要でした。 また、何かあればよろしくお願いいたします。
お礼
windFallerさん。 ありがとうございます。 大量に元のコードを書き込んでいた物ですから、修正するのが大変なので元の教えて頂いたのをベースにしたかったのです。 せっかく教えて頂いたのですが、違うコードは自分には理解しきれませんでしたので、上記を使う事にしました。 また何かあればよろしくお願いいたします。