Excel VBA дает номера для указанных ячеек, избегайте выбора - PullRequest
0 голосов
/ 19 ноября 2018

У меня следующий код VBA в Excel.Это часть очень долгого 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

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

может сделать принудительную петлю, чтобы предотвратить случай выбора. Но лично мне больше нравится использовать случай выбора.

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
0 голосов
/ 19 ноября 2018

Обернуть объекты Range с помощью оператора With.Попробуйте заменить имена переменных на что-то более значимое.Я только изменил один.Кроме того, используйте Option Explici t в верхней части кода и объявите все переменные с типом.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...