[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロがエラーになってしまう』(ちゃん)
初めて質問させていただきます。 下記のマクロを、ここの学校を見ながら作成しました。 しかしどうしても上手く動きません。何が原因なのでしょうか?。 お教えください。
Private Sub Worksheet_Change(ByVal Target As Range) 'セル値の変化によるイベントマクロ Dim i As Long Dim c As Range Dim myBox1 As Long Dim myBox2 As Long
If Intersect(Range("A13,D19"), Target) Is Nothing Then Exit Sub For Each c In Intersect(Range("A13,D19"), Target)
Select Case c.Address(0, 0)
Case "A13"
Range("G13") = Year(Now) & "/" & Month(Now) & "/" & Day(Now)
Case "D19" myBox1 = Sheets("販売詳細").Range("A65536").End(xlUp).Row myBox2 = Sheets("期間集計").Range("A65536").End(xlUp).Row
If myBox2 >= 5 Then
Sheets("期間集計").Range("a5:h" & myBox2).ClearContents Else
Sheets("販売詳細").Range("販売詳細!A1:H" & myBox1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("期間集計!B1:B2"), CopyToRange:=Range("期間集計!A5"), Unique:=False ' ↑ここでエラーになってしまいます。実行時エラー'1004' ' Rangeメゾットに失敗しました。Worksheets・・・
End If End Select Next End Sub
単独マクロにて動かすと正常に動きます。又、呼び出し(○○ Target)でおこなうとエラーになるPCと正常に動くPCとになってしまいます。
違う質問もあるのですが(エラー関係)別の質問としたほうがよろしいのでしょうが?ご指導ください。 尚,私の書き込み等にマナー違反等ありましたらご指摘ください。
尚,ご回答等いただけた場合でも明日以降の確認となりますがご容赦ください。 Excel2002 WinXP
なんとなく。 > CriteriaRange:=Range("期間集計!B1:B2") CriteriaRange:=Sheets("期間集計").Range("B1:B2")
> CopyToRange:=Range("期間集計!A5") CopyToRange:=Sheets("期間集計").Range("A5")
こういうことかしら?
> 尚,私の書き込み等にマナー違反等ありましたらご指摘ください。 半角カタカナは遠慮した方が良いようです。 (ROUGE)
Sheets("販売詳細").Range("販売詳細!A1:H" & myBox1) のところじゃないかな? (seiya)
おっと、そっちにも地雷があったのですね。(ROUGE)
sheets("販売集計").Range("a1:h" & myBox1) にしてみては? 私自身はRange("Sheet1!A1")のような書き方はしませんが、これでも よさそうな... (seiya)
> これでもよさそうな... そうなんですね。 σ(^-^;)も見慣れない書き方でした。 (ROUGE)
ご回答ありがとうございます。
なぜかまだPCの前にいたので確認できました。 しかし、ダメでした。 悲しいです。
約に立たないアドレスなので消しです(3/10) DLできるでしょうか? なぜかな コピー貼り付けで・・・ 一応・・・つたない物ですが・・・ 入力シートD19です。
>半角カタカナは遠慮した方が良いようです。 了解しました。以後気おつけるように致します。 ともかく今日はこれ以上はPCの前にはいれないので帰鞋す。 (ちゃん)
あまり使用しないので不明ですが、 AdvancedFilter の CriteriaRange は同一シート内じゃなくていいの? (seiya)
別シートでも可能です。みやほりん
>エラーになるPCと正常に動くPCとになってしまいます これの詳しい説明があればいいかも。 (Break)
そうでしたか... みやほりんさん、ありがとうございます。
あとは、解体して順番に実行しながらどこでエラーになるのかを 探ることですかね... (seiya)
Private Sub Worksheet_Change(ByVal Target As Range) 'セル値の変化によるイベントマクロ Dim i As Long Dim c As Range Dim myBox1 As Long Dim myBox2 As Long If Intersect(Range("A13,D19"), Target) Is Nothing Then Exit Sub For Each c In Intersect(Range("A13,D19"), Target) Select Case c.Address(0, 0) Case "A13" Range("G13") = Year(Now) & "/" & Month(Now) & "/" & Day(Now) Case "D19" myBox1 = Sheets("販売詳細").Range("A65536").End(xlUp).Row myBox2 = Sheets("期間集計").Range("A65536").End(xlUp).Row If myBox2 >= 5 Then Sheets("期間集計").Range("a5:h" & myBox2).ClearContents Else Sheets("販売詳細").Range("A1:H" & myBox1).AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("期間集計").Range("B1:B2"), _ CopyToRange:=Sheets("期間集計").Range("A5"), _ Unique:=False End If End Select Next End Sub 当方では上記の状態で動作しているように思えます。 (みやほりん)(-_∂)b
ありがとうございます。 いろいりためしたのですが、上手く行きません。 http://briefcase.yahoo.co.jp/bc/sskita_douzo/lst2?.tok=bcHWkvYBkKkUYVei&.dir=/4799&.src=bc
エクセルの設定に問題あるのでしょうか?それともVBにコメントの入れすぎでしょうか? >>エラーになるPCと正常に動くPCとになってしまいます >これの詳しい説明があればいいかも。 Private Sub Worksheet_Change(ByVal Target As Range) 'セル値の変化によるイベントマクロ Dim i As Long Dim c As Range
If Intersect(Range("A13,D19"), Target) Is Nothing Then Exit Sub For Each c In Intersect(Range("A13,D19"), Target)
Select Case c.Address(0, 0)
Case "A13" Range("G13") = Year(Now) & "/" & Month(Now) & "/" & Day(Now) Case "D19" kikan1 Target End Select Next End Sub ---- Sub kikan1(ByVal Target As Range)
Dim myBox1 As Long Dim myBox2 As Long
If Intersect(Range("d19"), Target) Is Nothing Then Exit Sub
Sheets("期間集計").Select
myBox1 = Sheets("販売詳細").Range("A65536").End(xlUp).Row myBox2 = Sheets("期間集計").Range("A65536").End(xlUp).Row
If myBox2 >= 5 Then Sheets("期間集計").Range("a5:h" & myBox2).ClearContents End If Sheets("販売詳細").Range("販売詳細!A1:H" & myBox1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("期間集計!B1:B2"), CopyToRange:=Range("期間集計!A5:H5"), Unique:=False
Sheets("入力").Select
End Sub
上記だと作成しているノート CPU1.2G メモリー265MB WinXP Excel2002 東芝 エラーになるPC CPU2.0G メモリー512MB 以下同上 NEC(実際運用するためのPC 作成しているノートでは作動します。が他1台のPCではエラーになります。 自宅のPCでは試していません。 上記アドレスでDLできるようでしたら確認してみてください。 運用場所店舗ではネットにつなげることができません。これからそちらに行くため学校の確認は明日になりますがよろしくお願いいたします。 (ちゃん)
CopyToRangeの範囲指定は一般的に単一セルの方がよういのでは? それと、みやほりんさんのようにSheets().Range()の形で試しては? (seiya)
seiya様ありがとうございます。 みやほりん様のコードコピペして試してみたのですが・・・当然書き込む前に(言葉足らずで申し訳ありません) やはり同じところでエラーになります。 >CopyToRangeの範囲指定は一般的に単一セルの方がよういのでは? は、ダメダメPCで試してみます。 本当は、CopyToRangeでなくていいのです。ただ単に販売詳細シートのデーターを日指定期間で 集計だけ取れればいいだけなのですが、私の頭では・・・ そこまでいっていません。なので指定期間を抽出してSUMにて計算させています。 勉強初めて2週間なので (ちゃん)
ご提示のブックをDLしてた見てみましたが、期間集計シートのB2の数式が =AND(販売詳細!#REF!>=入力!C19,販売詳細!#REF!<=入力!D19) となっています。 =AND(販売詳細!A2>=入力!C19,販売詳細!A2<=入力!D19) だと推測。その上で試行してみました。 Sheets("販売詳細").Range("販売詳細!A1:H" & myBox1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("期間集計!B1:B2"), CopyToRange:=Range("期間集計!A5:H5"), Unique:=False でご相談の通りエラーになり停止。 Sheets("販売詳細").Range("A1:H" & myBox1).AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("期間集計").Range("B1:B2"), _ CopyToRange:=Sheets("期間集計").Range("A5"), _ Unique:=False へ差し替えたら動きましたので、やはり記述上の問題と推測できます。 Range("期間集計!B1:B2")の部分でWatchすると、やはりRangeプロパティの取得に 失敗しています。 CopyToRange:=Range("期間集計!A5:H5") ↑ Sheet省略なので(アクティブな)入力シートのRangeプロパティを取得しに行くけれ どもその引数で期間集計シートが取得されるのでオブジェクト取得で不整合が 起こっているのではないでしょうか。 (みやほりん)(-_∂)b
ショートカット式の記述だと、 「プロジェクトまたはライブラリが見つかりません」となりますね。 ・・・と思ったら、[A2].Selectなんて単純なのものも同じエラーが。 おかしいと思って、VBEのツール>参照設定を見てみたら、次の二つが参照不可。 「Toolband 1.0 Type Library」 「ProAtlas2002 Control module」 これらの参照設定をはずしたら、[期間集計!B1:B2]等でも動きました。 ・・・ってあれれ?seiyaさんの書き込みはどこへ?? (みやほりん)(-_∂)b
みやほりんさん、 あまりにも厚かましいお願いだと思って自己削除してしまいました。
ありがとうございます!
[シート名!範囲] = Range("シート名!範囲")
ではないのですね... あまり使用しない方がよさそう... (seiya)
いろいりありがとうございます。 結果から行きますと、単純にコピペだけではエラーのままでした。 >「Toolband 1.0 Type Library」 >「ProAtlas2002 Control module」 >これらの参照設定をはずしたら、[期間集計!B1:B2]等でも動きました。 で、何とか動きました。しかし、連続し何回か遊んでおりますと突然、 「オートメーションエラーです。 起動されたオブジェクトから切断されました。」のエラーが・・・ そしてExcelが固まってしまいました。以前からも「Rangeメゾットに失敗しました。・・・」 のエラーだったか定かではありませんが固まるときがたびたびでした。 仕方ないので、下記のように修正(seiya様のご指摘通りに) Private Sub Worksheet_Change(ByVal Target As Range) 'セル値の変化によるイベントマクロ Dim i As Long Dim c As Range Dim myBox1 As Long Dim myBox2 As Long
If Intersect(Range("A13,D19"), Target) Is Nothing Then Exit Sub For Each c In Intersect(Range("A13,D19"), Target) Select Case c.Address(0, 0) Case "A13" Range("G13") = Year(Now) & "/" & Month(Now) & "/" & Day(Now)
Case "D19"
With Worksheets("販売詳細") myBox1 = .Range("A65536").End(xlUp).Row myBox2 = .Range("k65536").End(xlUp).Row If myBox2 >= 3 Then .Range("k3:k" & myBox2).ClearContents Else
.Range("A1:H" & myBox1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=.Range("i1:i2"), CopyToRange:=.Range("k3"), _ Unique:=False
End If End With
End Select Next End Sub で、エラーにならず動きます。他の方法を学ぶまでこれで行こうかと・・・
しかし、運用上支障は無いのですが、販売詳細シート上のA通りにある処理日が K通りに転記されません(データーを手で消してはじめの処理だけは処理日が 記入されます)。なぜでしょう?
ここに書こうか別の質問とし新たに書こうか迷ったのですが書いてしまいます。 やはり運用上支障は無いのですが、気になるもので。 作成用ノートでは問題ないのですが、運用PCではエラーで怒られます。 例 If vbNo = MsgBox(Range("F13").Value & " 枚売売れたぞ。" & Chr(13) & Chr(13) & _ "本当に赤品番だな!赤ならYESだ!!" _ , vbQuestion + vbYesNo, "確認") Then で、& Chr(13) & Chr(13) &でエラーになります。消して1行表示にすると 問題ありません。 例2 If vbNo = MsgBox("販売金額間違いないな。" & Format(Range("B14").Value, "#,###") & "円で良いならYESだ!!" _ , vbQuestion + vbYesNo, "確認") Then '^^^^^^ ' ↑ コンパイル エラー プロジェクトまたはライブラリが見つかりません。 '外してフォーマットを無しにすると通る なぜ?
よろしくお願いいたします。(長くて申し訳ありません) (ちゃん)
1) Chr(13) の代わりに Chr(10) または vbCrLf または vbNewLine または vbLf のいずれかを使用
2) Format(Range("b14").Value, "#,##0") では? もし関数を使用した行が全て同じエラーになる場合は、余計な参照設定をしていることが 考えられます。 (seiya)
ありがとうございます。 作成用PCでは問題なく作動。
運用PCは今は、試すことができませんので、今から試しに向かいます。 どの道ぼちぼち行かなくてはならないので。
結果は明日にでも (ちゃん)
上手くできました。 ありがとうございました。 まだまだ基本が出来ていないですね。
又、よろしくお願いします。 (ちゃん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.