次のマクロですが、順調に動いていたと思うと
急にタイトルのエラーで落ちたりします。
Set mySh = Thisworkbook.Sheets("Sheet1")
Debug.Print mySh.Cells(1,1)
また、そのときは・・・
mySh.Rows("4:4").Select
Selection.Insert Shift:=xlDown
や
mySh.Select
Rows("4:4").Insert Shift:=xlDown
や
mySh.Rows("4:4").Insert Shift:=xlDown
もできなくなります。
オブジェクトへの参照方法が今ひとつわかっていないのですが、
どの場合でもエラーなく実行するにはどうすればいいのでしょうか?
No.3ベストアンサー
- 回答日時:
こんにちは。
Wendy02です。>Cells(4,4)に時刻が入っていて、Webから取得した文字列
うーん。余談にはなるのですが、最近、同じ系列の質問が多くなりましたね。
> If Format(Cells(4, 4), "hh:mm") <> Format(myVal, "hh:mm") Then
まあ、ある程度、なれてくれば感覚的には分るのですが、Cells を唐突に用いるとエラーが発生する確率が高くなります。私も、経験ありますが、以前はさっぱり分らなかったです。Cellsも、Applicationに対するグローバルオブジェクトなのに、シートの属性をつけないといけないのですね。ちょっと、気をつけたほうがよいです。With ~.Cells と使います。こういうことも、一応「明示的(explicit)」といいます。
ちょっと、以下のもので研究してみてください。
'<標準モジュール推奨>
Sub Test2()
Dim myTime1 As Variant
Dim myTime2 As Variant
Dim myVal As String
' myVal = "15:30"
With ThisWorkbook.Worksheets("ABC")
If IsDate(.Cells(4, 4).Text) Then myTime1 = CDate(.Cells(4, 4).Text)
If IsDate(myVal) Then myTime2 = CDate(myVal)
If myTime1 <> Empty And myTime2 <> Empty Then
If Format(myTime1, "hh:mm") <> Format(myTime2, "hh:mm") Then
.Rows("4:4").Insert Shift:=xlDown
End If
End If
End With
End Sub
やっぱり、ご指摘の通り、親オブジェクトをきちんと
指定した方が安心感がありますね。
今後はそっちで書いていきたいと思います。
ありがとうございました。
No.2
- 回答日時:
>オブジェクトへの参照方法が今ひとつわかっていないのですが、
>どの場合でもエラーなく実行するにはどうすればいいのでしょうか?
エラートラップなしでエラーが発生すると、変数はクリアされますから、すべてのプロシ-ジャに、
On Error Go To xxxx
を記述して、適切なエラー処理を行うことですね。
あとは、各モジュールの先頭に
Option Explicit
を記述すること。
今後のためには、VBEのオプションで、
「変数の宣言を強制する」にチェックを入れておくこと。
プロジェクトのコンパイルをすること。
> Set mySh = Thisworkbook.Sheets("Sheet1")
> Debug.Print mySh.Cells(1,1)
これのエラーについては、
No1さんと同じですが、
mySh が宣言されている場所と内容。
上記コードが書かれている場所が問題です。
この回答への補足
>mySh が宣言されている場所と内容。
#1さんに補足しましたが、プロシージャーレベルで宣言
しています。
どうもご指摘のエラー時でmyShがクリアされているのが
原因のような気がします。
No.1
- 回答日時:
こんばんは。
Wendy02です。>次のマクロですが、順調に動いていたと思うと
って、コードの行を書くのではなくて、プロシージャとして出していただき、その条件や状態、また、そのマクロ自体の目的を明記してください。
実行時エラー(1004)が出ているようですから、おそらくは、その置かれているシートやシートの状況に依存しているのだと思います。そのコード単独では、エラーが出るとは思えません。
それと、Debug.Print を置いて、何をみているのでしょうか?Debug.Print の後で、オブジェクトを失って、エラーが出る特殊な場合はありますが、ここでは、それが当たらないと思います。
この回答への補足
実際は次のような感じです。
Cells(4,4)に時刻が入っていて、Webから取得した文字列
myValと比較し、時刻が変わっていたら1行挿入するという
ものです。
どうもmyValの値を取得しぞこなっていて、そこでエラー
になっていたようです。
>エラートラップなしでエラーが発生すると、変数はクリアされますから、
と、#2さんから回答をもらっていますが、エラーの時点で
myShがクリアされてしまっていて、オブジェクトが特定
できてなかったのかもしれません。
Sub Test()
Dim mySh As Worksheet
Dim myVal As String
Set mySh = ThisworkBook.Sheets("ABC")
mySh.Select
If Format(Cells(4, 4), "hh:mm") <> Format(myVal, "hh:mm") Then
Rows("4:4").Insert Shift:=xlDown
End If
Set mySh = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelマクロ Application.Run 5 2023/06/17 15:16
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Excel(エクセル) excel でグループの最後に行を追加。 3 2022/06/14 13:14
- Excel(エクセル) エクセルのVBAにショートカットキーの割り当て 3 2022/07/13 14:19
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) Csvファイルの最終行を取得する構文はこれであっていますか?オブジェクトは、このプロパティまたはメソ 3 2022/12/26 14:38
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセルマクロエラー「'Cells'メソッドは失敗しました。'_Global'オブジェクト」について
Excel(エクセル)
-
マクロの「Rangeメソッドは失敗しました’Globalオブジェクト」エラーの解決方法について
Excel(エクセル)
-
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
-
4
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】マクロをボタンに...
-
エクセルエラー13型が一致しま...
-
実行時エラー 438になった時の...
-
OLEDB.NETで接続できない
-
VB6+SQL サーバー 2000 で 実行...
-
VBAがブレークモードになっ...
-
VBS実行時エラー オブジェクト...
-
ExcelVBA Range クラスの Page...
-
VBAでのエラー
-
プロシージャ名の取得
-
エラー1004 PDFの保存ができま...
-
VBAのコードがエラーになっ...
-
EXCEL VBAマクロ中断でデバッグ...
-
デバッグ時はOK、デバッグ無し...
-
AccessVBAでExcelを起動し、罫...
-
実行時エラー3001「引数が間違...
-
VBSで変数の宣言はできないので...
-
実行時エラー -'-2147417848
-
マクロについて教えてください...
-
ADODB.Streamを使用してUTF-8を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
VBAでのエラー
-
マクロについて教えてください...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー3001「引数が間違...
-
ExcelVBA Range クラスの Page...
-
VBS実行時エラー オブジェクト...
-
EXCEL VBAマクロ中断でデバッグ...
-
Outlook.ApplicationをCreateOb...
-
VBSで変数の宣言はできないので...
-
VBAのコードがエラーになっ...
-
実行時エラー -'-2147417848
-
ADODB.Streamを使用してUTF-8を...
-
EXCEL/VBAで、自分のPCだけエラ...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
VB6+SQL サーバー 2000 で 実行...
おすすめ情報