与范围select错误

我有一些代码的问题。 当它必须select一个范围时,我得到一个错误

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“这里的错误”它给了我“select范围类失败的方法”我做错了什么? 通常这段代码在我添加到SelectionChange代码块之前工作。 谢谢!

在使用Sheet代码时,你应该避免使用Select (最好完全避免它),并使用类似这样的代码

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

(我曾尝试完全限定参考,但只有在我使用时才有效

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

这显然是矫枉过正)

虽然这解决了你的立即问题,你应该看看巩固你的代码,例如

  1. 禁用事件,以便其他表单事件在您的select正在运行时不会触发
  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