• ベストアンサー

VBAにて実行時エラー’1004’:「アプリケーション定義又はオブジェクト定義のエラー」発生?

VBA初心者です。Xp,Excel2000を使用しています。 シフト者のカレンダー作成しており、動作していたVBAのコピーを利用しています。 何回かループを回った後表記エラーとなります。アドバイスをお願いいたします。   A B C D E -------------------------- 1 2 3 4 ...... <-- 日付 2 2 0 1 ...... <-- シフト(ln_1の範囲名) 7 8 9 10 ...... <-- 日付 1 0 3 3 ..... <-- シフト(ln_2の範囲名) .................... For i = 1 To 6   <-- 最大6週にわたる Set r = Range("ln_" & LTrim$(Str$(i))) cpos = r.Column rpos = r.Row For n = 1 To r.Columns.Count With Cells(rpos - 1, cpos + n - 1) m = .Characters.Count <-- 数回ループ後ここでエラーとなる! s = Cells(rpos, cpos + n - 1) <-- シフト情報 Select Case s Case ""    '- Blank - ........ 日付セルの装飾 Case "0" '- Holiday - ......... 日付セルの装飾 Case "1" '- shift1 - ........... 日付セルの装飾

質問者が選んだベストアンサー

  • ベストアンサー
  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.5

よく調べてみたら、Characters.Countは、"ABC"などの文字列では3を返しますが、"123"ではエラーになり、数字ではだめなようです。セルの書式を文字列にしてもだめでした。 m = .Characters.Count は文字の数をお知りになりたいだけのようなので、以下のコードに換えて試してみてください。 m=Len(.value) なお、MsgBox .Address などは、エラーのでるコードの前に挿入、という意味で書きました。 泥臭い方法ですが、コードがどのセルを参照しているのかわかるので、エラーがでる時などにはおすすめです。

yachin
質問者

お礼

再びありがとうございます! あなたの言われる通りです。これで疑問が氷解いたしました。Helpファイルの説明だけでは、読みきれませんでした。(ん...修行が足りぬ。)長くお付き合いさせてしまって、ごめんなさい。sakenomoさん、お礼に本当に一緒に「酒飲み(sakenomo)」たい気分です。 今後も、宜しくお願いします!!

その他の回答 (5)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.6

再びこんにちは。 > *Cells()はObjectとですので、Cellの頭の点はお間違いですね?) > ループの外で With Worksheets("XXXX")でシート明示しました えっと、当方Excel97なんですが、Excel97ではCellsはプロパティです。 この場合、特定のWorksheetオブジェクトのセルに対しての操作なので、 .Cells にしないとWithの意味が無いと思います。 Excel2000以降では違うのかな? 原因は別の所だったようですが、、、

yachin
質問者

お礼

ありがとうございました!No.3の回答で解決できました。 今後も宜しくお願いいたしますpapayukaさん!

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.4

エラーがでるコードの前に、 MsgBox .Value とか、 MsgBox .Address  などを置いて様子をみてはいかがでしょう。 In_*の名前が付けられたセル範囲の列と、 日付セルの列が合っていない部分がある ような気がしますが…。

yachin
質問者

お礼

ありがとうございます。 ご教授の件は Debug.Print .Address, .Value でしょうか? Debugの中にも色々知らない便利な機能があるんですね!… ご指摘の定義名の列と日付セルの列は、合っていました。

yachin
質問者

補足

ご教授の件を試行錯誤している時、日付セルを修正入力(F2+Enter)あるいは新規に入力(TAB or ENTER)すると、 エラーを起こす場所(セル)が入力した次のセルに移動します。 コードでセルデータを、自身のデータで上書きしてもNGです。 全ての日付データを入力しなおしたら、最後までループが回りました!! 一体どう言う事なんでしょう? *後学のため、どなたか考えられる要因と対処方法をお教え願えないでしょうか?

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 問題の Select Case部分が解らないのですが、、、 With Worksheets("Sheet1") m = .Cells(rpos - 1, cpos + n - 1).Characters.Count s = .Cells(rpos, cpos + n - 1) のように、シートを明示した場合はどうでしょう?

yachin
質問者

お礼

ありがとうございます。Withってネストできますよね? (1)ループの外で With Worksheets("XXXX")でシート明示しました....NGでした。(WIthのネスト) (2)ご指摘の場所でシート明示し、日付セル( Cells(rpos - 1, cpos + n - 1))のコントロール、プロパティ部分はWithを用いず全てコーディングしました。....NGでした。 (*Cells()はObjectとですので、Cellの頭の点はお間違いですね?) *何が原因なのでしょうか?この2,3日悩んでおります!

  • wildcard
  • ベストアンサー率54% (54/100)
回答No.2

たぶん外していると思いますが… End With が無いためとか?

yachin
質問者

お礼

ありがとうございます! No.1でも補足しましたように、基本部分は変更しておりませんので....

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

たぶん、セルのどこかに、Null(空白)があると思います。0とか空白を埋めて試してください。

yachin
質問者

補足

早速の回答有難うございます!元のVBAの基本部分は変更せず、セルの装飾部分だけの変更です。このデータで元のVBAで動作し、正常に動作している事を確認しております。そこから変更部分をコーディングしておりますので、データ(セル)に御指摘の不具合があるとはおもわれません。 >たぶん、セルのどこかに、Null(空白)があると思います。0とか空白を埋めて試してください。

関連するQ&A