[[20070309165249]] 『マクロがエラーになってしまう』(ちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロがエラーになってしまう』(ちゃん)
 初めて質問させていただきます。
 下記のマクロを、ここの学校を見ながら作成しました。
 しかしどうしても上手く動きません。何が原因なのでしょうか?。
 お教えください。

 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.