Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3827 / 13645 ツリー ←次へ | 前へ→

【59996】実行時エラー13を回避するには? くたお← 09/1/22(木) 23:36 質問[未読]
【59998】Re:実行時エラー13を回避するには? Yuki 09/1/23(金) 7:35 発言[未読]
【59999】Re:実行時エラー13を回避するには? ichinose 09/1/23(金) 7:57 発言[未読]

【59996】実行時エラー13を回避するには?
質問  くたお←  - 09/1/22(木) 23:36 -

引用なし
パスワード
   Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Trim(Target.Value) <> "" Then

If Target.Row >= 10 And Target.Row <= 65530 Then

If (Target.Column = 2) And (Target.Row Mod 5) = 0 Then
If Target.Value <> "" Then
For i = 0 To 4
Target.Copy
Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
Next
Worksheets("Sheet4").Range("A2:K6").Copy Target.Offset(5, -1)
End If
ElseIf (Target.Column = 3) And (Target.Row Mod 5) = 0 Then
If Target.Value <> "" Then
For i = 0 To 4
Target.Copy
Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
Next
End If
ElseIf (Target.Column = 4) And (Target.Row Mod 5) = 0 Then
If Target.Value <> "" Then
For i = 0 To 4
Target.Copy
Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
Next
End If
Else
Exit Sub
End If
End If
End If
End Sub

・複数セルを選択して消す実行時エラー13が出ます
・別シートより範囲指定したセルをコピーして張り付けるときも出ます。
どうすればよいでしょうか?

【59998】Re:実行時エラー13を回避するには?
発言  Yuki  - 09/1/23(金) 7:35 -

引用なし
パスワード
   ▼くたお← さん:

直接の回答ではありません。
セルの値を操作するとイベントが発生しますね。
コード中でもセルの値を操作するとイベントが発生します。
それを回避してあげましょう。

Application.EnableEvents = False  イベント無効
Application.EnableEvents = True  イベント有効
イベント無効にしてから、エラーが発生するようなことが考えられる場合は
エラー処理で有効になるようにしましょう。

【59999】Re:実行時エラー13を回避するには?
発言  ichinose  - 09/1/23(金) 7:57 -

引用なし
パスワード
   ▼くたお← さん:
おはようございます。

>・複数セルを選択して消す実行時エラー13が出ます
>・別シートより範囲指定したセルをコピーして張り付けるときも出ます。

コードは、入れ子毎にインデントを付けて記述するようにしてください。
(実際のコードは、そうしているということなら、投稿もそのようにしてください)
非常に見づらいので・・・。


Private Sub Worksheet_Change(ByVal target As Range)
  Dim i As Long
  Dim crng As Range
  Application.EnableEvents = False
  For Each crng In target
    If Trim(crng.Value) <> "" Then
     If crng.Row >= 10 And crng.Row <= 65530 Then
       If (crng.Column = 2) And (crng.Row Mod 5) = 0 Then
        For i = 0 To 4
          crng.Copy
          crng.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
        Next
        Worksheets("Sheet4").Range("A2:K6").Copy crng.Offset(5, -1)
       ElseIf (crng.Column = 3) And (crng.Row Mod 5) = 0 Then
        For i = 0 To 4
          crng.Copy
          crng.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
        Next
       ElseIf (crng.Column = 4) And (crng.Row Mod 5) = 0 Then
        For i = 0 To 4
          crng.Copy
          crng.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
        Next
       End If
     End If
    End If
  Next
  Application.EnableEvents = True
End Sub


これで試してみてください。

3827 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free