
次のマクロですが、順調に動いていたと思うと
急にタイトルのエラーで落ちたりします。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Debug.exe実行時にWinMainCRTSt...
-
【マクロ】エラー【#DIV/0!】が...
-
Do While中のVBAアプリケーショ...
-
Amazon api について。JANコー...
-
エラー1004 PDFの保存ができま...
-
Access:結果は出るがエラー
-
VBAがブレークモードになっ...
-
IEのダウンロード通知バーのVBA...
-
Excelで下記のようにマクロを作...
-
ASPの初歩的な質問です
-
EXCEL/VBAで、自分のPCだけエラ...
-
Excel TextBoxクラスのCharacte...
-
JSP/サーブレットを用いたWebア...
-
パスワードによるシートの保護...
-
エラー:インデックスが配列の...
-
実行時エラー 438になった時の...
-
VBS実行時エラー オブジェクト...
-
VBAでピボットテーブルの作成(...
-
'Speak'メソッドは失敗しました
-
ASPでメール送信時エラーが出る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
実行時エラー -'-2147417848
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
【Excel VBA】マクロをボタンに...
-
マクロについて教えてください...
-
なぜこんな初歩的なVBAのIf文で...
-
VB6+SQL サーバー 2000 で 実行...
-
OLEDB.NETで接続できない
-
EXCEL/VBAで、自分のPCだけエラ...
-
ExcelVBA Range クラスの Page...
-
Invalid procedure call or arg...
-
VBAでのエラー
-
AccessVBAでExcelを起動し、罫...
-
[Delphi] データセットは閉じて...
-
VBAで実行時エラー'424' オブジ...
-
なぜエラーになるのでしょうか...
-
ADODB.Streamを使用してUTF-8を...
おすすめ情報