Excel VBA为指定单元格指定数字,避免选择

Excel VBA为指定单元格指定数字,避免选择,excel,vba,optimization,Excel,Vba,Optimization,我在Excel中有以下VBA代码。它是非常长的VBA的一部分,负责许多过程。如何摆脱Select命令?我尝试过几件事,但都没有成功 ActiveWorkbook.Sheets("Installation").Select For Each Cl14 In ThisWorkbook.Sheets("Installation").Range("G2", Range("G" & Rows.Count).End(xlUp)) Select Case LCase(Cl14.Va

我在Excel中有以下VBA代码。它是非常长的VBA的一部分,负责许多过程。如何摆脱Select命令?我尝试过几件事,但都没有成功

ActiveWorkbook.Sheets("Installation").Select
    For Each Cl14 In ThisWorkbook.Sheets("Installation").Range("G2", Range("G" & Rows.Count).End(xlUp))
      Select Case LCase(Cl14.Value)
         Case "main"
            m14 = m14 + 1: s14 = 0: ss14 = 0
            Cl14.Offset(, -6).Value = m14
         Case "sub"
            s14 = s14 + 1: ss14 = 0
            Cl14.Offset(, -6) = m14 & "." & s14
         Case "sub-sub"
            ss14 = ss14 + 1
            Cl14.Offset(, -6) = m14 & "." & s14 & "." & ss14
      End Select
   Next Cl14

使用
With
语句包装范围对象。考虑用一些更有意义的东西来替换变量名。我只换了一个。另外,在代码顶部使用
Option Explici
t,并用type声明所有变量

Option Explicit
Public Sub test()
    Dim ws As Worksheet, iCell As Range, m14 As Long, s14 As Long, ss14 As Long
    Set ws = ThisWorkbook.Worksheets("Installation")

    With ws
        For Each iCell In .Range("G2", .Range("G" & .Rows.Count).End(xlUp))
            Select Case LCase(iCell.Value)
            Case "main"
                m14 = m14 + 1: s14 = 0: ss14 = 0
                iCell.Offset(, -6).Value = m14
            Case "sub"
                s14 = s14 + 1: ss14 = 0
                iCell.Offset(, -6) = m14 & "." & s14
            Case "sub-sub"
                ss14 = ss14 + 1
                iCell.Offset(, -6) = m14 & "." & s14 & "." & ss14
            End Select
        Next iCell
    End With
End Sub

可以执行强制循环以防止选择案例。但就个人而言,我更喜欢使用selectcase

For i = 2 To .Range("G" & .Rows.Count).End(xlUp).Row
If .Range("G" & i).Value = "main" Then
'code here
ElseIf .Range("G" & i).Value = "sub" Then
'code here
ElseIf .Range("G" & i).Value = "sub-sub" Then
'code here
End If
Next i

你的意思是,如果你用
ActiveWorkbook
替换
thiswoolk
,然后用
Select
删除行,那就行不通了?哦,我只看到一行
。在
中为每个
循环计数
。这
指的是什么?