Нулевое значение моих переменных не отображается в активном листе, который я назначил - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблема с VBA, чтобы сделать короткий код.Я уже использовал цикл, но он, похоже, не работает, и значение 0 моей переменной не отображается на желаемом активном листе.Я использовал приведенный ниже код, чтобы решить мою проблему, но он сделал мой код очень длинным.Пожалуйста, помогите мне с этим.

Sub update()
     Dim rng1 As Range
     Dim rng2 As Range
     Dim i As Integer
     Dim count As Integer
     Dim ctr As Integer

эти коды слишком длинные

         For i = 9 To 30 - 1 Step 1

             Set rng1 = ThisWorkbook.Sheets("hired").Range("O" & (i))
             'Production
             If rng1.Value2 = Range("C7").Value2 Then
                 Set rng2 = ThisWorkbook.Sheets("hired").Range("J" & (i))
                 If rng2.Value2 = "C" Then
                     Dim ctrC As Integer
                     ctrC7 = ctrC + 1
                     Range("K7").Value2 = ctrC7
                 ElseIf rng2.Value2 = "DC" Then
                     Dim ctrDC7 As Integer
                     ctrDC7 = ctrDC7 + 1
                     Range("J7").Value2 = ctrDC7
                 ElseIf rng2.Value2 = "P" Then
                     Dim ctrP7 As Integer
                     ctrP7 = ctrP7 + 1
                     Range("I7").Value2 = ctrP7
                 End If

             ElseIf rng1.Value2 = Range("C8").Value2 Then
                 Set rng2 = ThisWorkbook.Sheets("hired").Range("J" & (i))
                 If rng2.Value2 = "C" Then
                     Dim ctrC8 As Integer
                     ctrC8 = ctrC8 + 1
                     Range("K8").Value2 = ctrC8
                 ElseIf rng2.Value2 = "DC" Then
                     Dim ctrDC8 As Integer
                     ctrDC8 = ctrDC8 + 1
                     Range("J8").Value2 = ctrDC8
                 ElseIf rng2.Value2 = "P" Then
                     Dim ctrP8 As Integer
                     ctrP8 = ctrP8 + 1
                     Range("I8").Value2 = ctrP8
                 End If
             ElseIf rng1.Value2 = Range("C9").Value2 Then
                 Set rng2 = ThisWorkbook.Sheets("hired").Range("J" & (i))
                 If rng2.Value2 = "C" Then
                     Dim ctrC9 As Integer
                     ctrC9 = ctrC9 + 1
                     Range("K9").Value2 = ctrC9
                 ElseIf rng2.Value2 = "DC" Then
                     Dim ctrDC9 As Integer
                     ctrDC9 = ctrDC9 + 1
                     Range("J9").Value2 = ctrDC9
                 ElseIf rng2.Value2 = "P" Then
                     Dim ctrP9 As Integer
                     ctrP9 = ctrP9 + 1
                     Range("I9").Value2 = ctrP9
                 End If
              If
         Next

мое решение моей проблемы, но оно слишкомдолго.мне нужно сделать его короче

    If ctrC7 = 0 Then
         Range("K7").Value2 = ""
     ElseIf ctrDC7 = 0 Then
         Range("J7").Value2 = ""
     ElseIf ctrP7 = 0 Then
         Range("I7").Value2 = ""
     ElseIf ctrC8 = 0 Then
         Range("K8").Value2 = ""
     ElseIf ctrDC8 = 0 Then
         Range("J8").Value2 = ""
     ElseIf ctrP8 = 0 Then
         Range("I8").Value2 = ""
     ElseIf ctrC9 = 0 Then
         Range("K9").Value2 = ""
     ElseIf ctrDC9 = 0 Then
         Range("J9").Value2 = ""
     ElseIf ctrP9 = 0 Then

     End If
     End Sub

1 Ответ

0 голосов
/ 21 февраля 2019

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

Option Explicit

Sub update()

    Dim rng1 As Range
    Dim rng2 As Range
    Dim i As Long
    Dim ArrClear(0 To 2, 1 To 3) As Boolean
    Dim Ws As Worksheet

    For i = 9 To 29 Step 1
        Set rng1 = ThisWorkbook.Sheets("hired").Range("O" & (i))
        Set rng2 = ThisWorkbook.Sheets("hired").Range("J" & (i))
        'Production
        If rng1.Value2 = Range("C7").Value2 Then
            If rng2.Value2 = "C" Then
                ArrClear(0, 1) = True
            ElseIf rng2.Value2 = "DC" Then
                ArrClear(0, 2) = True
            ElseIf rng2.Value2 = "P" Then
                ArrClear(0, 3) = True
            End If
        ElseIf rng1.Value2 = Range("C8").Value2 Then
            If rng2.Value2 = "C" Then
                ArrClear(1, 1) = True
            ElseIf rng2.Value2 = "DC" Then
                ArrClear(1, 2) = True
            ElseIf rng2.Value2 = "P" Then
                ArrClear(1, 3) = True
            End If
        ElseIf rng1.Value2 = Range("C9").Value2 Then
            If rng2.Value2 = "C" Then
                ArrClear(2, 1) = True
            ElseIf rng2.Value2 = "DC" Then
                ArrClear(2, 2) = True
            ElseIf rng2.Value2 = "P" Then
                ArrClear(2, 3) = True
            End If
         End If
    Next

    For i = LBound(ArrClear()) To UBound(ArrClear())
        If ArrClear(i, 1) Then
            Range("K" & 7 + i).Value2 = ""
        End If
        If ArrClear(i, 2) Then
            Range("J" & 7 + i).Value2 = ""
        End If
        If ArrClear(i, 3) Then
            Range("I" & 7 + i).Value2 = ""
        End If
    Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...