2011-12-22 24 views
2

コードに問題があります。私はそれが範囲私はcommet「ここでエラーがあります」を入れ範囲選択エラー

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim valrand As Long 
If Intersect(Target, ActiveCell) = "Insert line" Then 
valrand = ActiveCell.Row 
    If Worksheets("IR").Cells(valrand, 18).Value <> 5 Then 
     Sheets("Format").Select 
     MsgBox ("Format") 
     Range("A13:N13").Select 'here's the error 
     Selection.Copy 

     Sheets("IR").Select 
     Range("A" & valrand + 2 + Worksheets("IR").Cells(12, 18) & ":N" & valrand + 2 + Worksheets("IR").Cells(12, 18)).Select 
     Selection.Insert Shift:=xlDown 

     Range("A38:N38").Select 
     Application.CutCopyMode = False 
     Selection.Delete Shift:=xlUp 

     Range("A5").Select 
     contor = Worksheets("IR").Cells(12, 18).Value + 1 
     Worksheets("IR").Cells(12, 18).Value = contor 
    End If 
End If 
End Sub 

を選択しなければならないエラーが出ることが は私が間違って何をやっている私は「RangeクラスのSelectメソッドが失敗した」を与えますか?通常、このコードは、SelectionChangeコードブロックを追加する前に機能しました。 ありがとう!

答えて

6

あなたは(私は参照が、これを修飾完全にしようとしたシートのコードを使用しているときSelectを避けることを見て(最高これに後でより、完全にそれを回避するため)、代わりに

Application.Goto Sheets("Format").Range("A13:N13") 

をこのようなものを使用する必要があります私は明らかに行き過ぎである

Sheets("Format").Select 
    Sheets("Format").Range("A13:N13").Select 

0を使用している場合にのみ働いていました

それはあなたの選択は、任意のSelect文 を削除

  • を実行している間に他のシートイベントが火をいけないように、イベントを無効にあなたのコードを統合をご覧くださいあなたの即時の問題、例えば

    1. を解決するが

      これはより効果的な例です(現在はシートの有効化なし)

      Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
          Dim ws1 As Worksheet 
          Dim ws2 As Worksheet 
          Dim lngRand As Long 
          Dim rng1 As Range 
          Set ws1 = Sheets("Format") 
          Set ws2 = Sheets("IR") 
          If Intersect(Target, ActiveCell) = "Insert line" Then 
           lngRand = ActiveCell.Row 
           If ws2.Cells(lngRand, 18).Value <> 5 Then 
            Application.EnableEvents = False 
            Set rng1 = Range("A" & lngRand + 2 + ws2.Cells(12, 18)) 
            'extend rng1 from column A to colum N 
            Set rng1 = rng1.Resize(rng1.Rows.Count, 14) 
            ws2.Range(rng1.Address).Insert xlDown 
            'copy Format to IR 
            ws1.Range("A13:N13").Copy ws2.Range(rng1.Address) 
            'Update Format 
            ws2.Range("A38:N38").Delete Shift:=xlUp 
            ws2.Cells(12, 18).Value = ws2.Cells(12, 18).Value + 1 
            Application.EnableEvents = True 
           End If 
          End If 
      End Sub