1

Изображение моего стола

Код VBA

   Sub loopchange()
 'select the blank column
   Dim level As String

   Range("AF2").Select
   Do
   'move to A2 cell'
   ActiveCell.Offset(0, -31).Select

   'find out which is level2
  If (ActiveCell.Value = "..2") Then

'move to column AD
ActiveCell.Offset(0, 28).Select

'Store the first 4 digit for level 2
level = Left(ActiveCell.Value, 4)

'Move to the column A3
ActiveCell.Offset(1, -28).Select 

   End If 

   MsgBox Left(ActiveCell.Value, 4)
'compare whether it's level 3(VBA don't detect this)
If (ActiveCell.Value = "...3") Then
    'move to the column AD
    ActiveCell.Offset(0, 28).Select
    'compare the stored first 4 digit in level 2 known as level to first
    '4 digit of current cell
    If (level = Left(ActiveCell.Value, 4)) Then
        'move to column AF
        ActiveCell.Offset(0, 2).Select
        'input the word NO CTH
        ActiveCell.Value = "No CTH"
    End If

   End If
Loop Until IsEmpty(ActiveCell.Offset(0, -31))
End Sub

Мое обоснование состоит в том, чтобы сравнить первые четыре цифры уровня 2(.. 2) с первыми четырьмя цифрами уровня 3(... 3) и ввести мир "Без CTH" в столбец AF3, используя цикл Do.

(PS мой код застрял на "Если (ActiveCell.Value = "... 3") Тогда "код vba не запускает это и сразу переходит к выражению End if)

3 ответа3

1
Sub loopchange()

Application.ScreenUpdating = False
Application.EnableEvents = False

Dim level As Integer
Range("AF3").Select
Do

ActiveCell.Offset(0, -31).Select
If ((Right(ActiveCell.Value, 1)) = 2) Then
    ActiveCell.Offset(0, 28).Select
    level = Left(ActiveCell.Value, 4)
    ActiveCell.Offset(1, -28).Select
End If
If ((Right(ActiveCell.Value, 1)) = 3) Then
    ActiveCell.Offset(0, 28).Select
       If (level = Left(ActiveCell.Value, 4)) Then
            ActiveCell.Offset(0, 3).Select
            ActiveCell.Value = "No CTH"
            ActiveCell.Offset(0, -3).Select
       ElseIf (Levels <> Left(ActiveCell.Value, 4)) Then
            ActiveCell.Offset(0, 3).Select
            ActiveCell.Value = ""
            ActiveCell.Offset(0, -3).Select
        End If
ElseIf ((Right(ActiveCell.Value, 1)) <> 2 Or (Right(ActiveCell.Value, 1)) <> 3) Then
ActiveCell.Offset(0, 28).Select
End If

ActiveCell.Offset(1, 3).Select
Loop Until IsEmpty(ActiveCell.Offset(0, -31))

Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

@ejbytes Я уже решил это.Большое спасибо за ваши наставления за эти несколько дней:D Хорошего дня

1

Шаг через код с F8. Когда вы доберетесь до критической строки кода, наведите курсор мыши на «ActiveCell.Значение "и увидеть всплывающее окно. Является ли значение активной ячейки тем, что вы ожидаете?

Ваш код работает нормально, но данные могут быть неверными.

0
  
 Sub loopchange()
   'select the blank column
   Dim level As String

   Range("AF2").Select
   Do
     'move to A2 cell'
     ActiveCell.Offset(0, -31).Select

     'find out which is level2

     MsgBox ("cell = ..2?" & (ActiveCell.Value = "..2"))
     If (ActiveCell.Value = "..2") Then

       'move to column AD
       ActiveCell.Offset(0, 28).Select

       'Store the first 4 digit for level 2
       level = Left(ActiveCell.Value, 4)
       MsgBox ("Levels is set to: " & level)

       'Move to the column A3

       '**MOVE DOWN?**
       ActiveCell.Offset(1, -28).Select 

     End If 

     MsgBox ("ColA = " & (Left(ActiveCell.Value, 4)))

     'compare whether it's level 3(VBA don't detect this)


     MsgBox ("cell = ...3?" & (ActiveCell.Value = "...3"))
     If (ActiveCell.Value = "...3") Then
       'move to the column AD
       ActiveCell.Offset(0, 28).Select
       'compare the stored first 4 digit in level 2 known as level to first
       '4 digit of current cell

       MsgBox (level & "=" & Left(ActiveCell.Value, 4) & "? " & (level = Left(ActiveCell.Value, 4)))  
       If (level = Left(ActiveCell.Value, 4)) Then
         'move to column AF
         ActiveCell.Offset(0, 3).Select

         ActiveCell.Value = "No CTH"
       End If
    End If

   'Move down one row.
   ActiveCell.Offset(1, 0).Select

  Loop Until IsEmpty(ActiveCell.Value)
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .