2011-12-22 88 views
2

我有一段代碼出現問題。我得到它的時候必須選擇一個範圍範圍選擇錯誤

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 

當我把commet「這裏的錯誤」的錯誤它給了我「範圍類的選擇方法失敗」 我在做什麼錯?通常,這段代碼在我添加到SelectionChange代碼塊之前工作。 謝謝!

回答

6

你應該看看使用手冊代碼時避免Select(最好是完全避免,越到後來這個),並使用這樣的事情,而不是

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

(我曾試圖完全限定引用,但此只有當我使用

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

這顯然是矯枉過正)

0合作

雖然能夠解決你眼前的問題,你應該看看鞏固你的代碼,例如

  1. 禁用事件,使其他負債表日後事項不火,當你選擇運行
  2. 刪除任何Select陳述

這是什麼可以更好地工作的示例(現在沒有紙激活)

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