范围选择出错

And*_*Ion 2 excel vba excel-vba

我对一段代码有些问题.必须选择范围时出错

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
Run Code Online (Sandbox Code Playgroud)

在哪里我把commet"这里的错误"它给了我"Range类的选择方法失败"我做错了什么?通常这段代码在我添加到SelectionChange代码块之前有效.谢谢!

bre*_*tdj 6

你应该考虑避免Select在使用Sheet代码时(最好完全避免它,稍后再详细说明)并使用类似的东西

Application.Goto Sheets("Format").Range("A13:N13")
Run Code Online (Sandbox Code Playgroud)

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

   Sheets("Format").Select
   Sheets("Format").Range("A13:N13").Select
Run Code Online (Sandbox Code Playgroud)

这显然是矫枉过正)

虽然这可以解决您的问题,但您应该考虑整合代码

  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
Run Code Online (Sandbox Code Playgroud)