Код работал — без изменений, теперь не работает (VBA)

#excel #vba

#excel #vba

Вопрос:

Я в тупике — этот код работал нормально — теперь он работает в неправильных столбцах. Возьмем, к примеру, столбец L, он закодирован для преобразования выбранной ячейки в правильный регистр, но теперь он преобразуется в верхний регистр. Код столбца I полностью игнорируется.

 Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Cleanup
Application.EnableEvents = False: Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual

   'converts staff codes into uppercase
   If Not (Application.Intersect(Target, Me.UsedRange.Columns("K")) Is Nothing) And Not Target.Row = 15 Then
        Target.Value2 = UCase$(Target.Value2)
   End If

   'converts Rep Codes into uppercase
     If Not (Application.Intersect(Target, Me.UsedRange.Columns("J")) Is Nothing) And Not Target.Row = 15 Then
        Target.Value2 = UCase$(Target.Value2)
   End If

   'converts Staff Names into proper case,
   If Not (Application.Intersect(Target, Me.UsedRange.Columns("L")) Is Nothing) And Not Target.Row = 15 Then
        Target.Value2 = StrConv(Target.Value2, vbProperCase)
   End If

   'converts staff type into capitals.
   If Not (Application.Intersect(Target, Me.UsedRange.Columns("I")) Is Nothing) And Not Target.Row = 15 Then
         Target.Value2 = UCase$(Target.Value2)
   End If

   'converts store code into uppercase
    If Not (Application.Intersect(Target, Range("STORE_CODE")) Is Nothing) Then
        Target.Value2 = UCase$(Target.Value2)
   End If

      'converts store name into propercase
   If Not (Application.Intersect(Target, Range("STORE_NAME")) Is Nothing) Then
        Target.Value2 = StrConv(Target.Value2, vbProperCase)
   End If

   'copy pay value one cell over into hidden column
   If Not (Application.Intersect(Target, Me.UsedRange.Columns("G")) Is Nothing) Then
          Target.Offset(0, 1).Value2 = Target.Value2
          Target.Value2 = ""
   End If
Cleanup:
Application.EnableEvents = True: Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic ' etc..
End Sub
  

Комментарии:

1. it's coded to convert the selected cell into Propercase but now it converts to Uppercase. Выполните поиск во всем коде VBA для vbUpperCase . Вы получите свой ответ 🙂

Ответ №1:

Me.UsedRange.Columns("L") В вашем коде означает L -й, который является двенадцатым, столбец вашего UsedRange . Если UsedRange начинается в столбце A , то это столбец L . Но если UsedRange начинается в столбце B , то двенадцатый столбец в UsedRange является столбцом M .

Пример:

 Sub test()
 Dim oRange As Range

 Set oRange = ActiveSheet.Range("A1:Z100")
 MsgBox oRange.Columns("L").Address 'L1:L100

 Set oRange = ActiveSheet.Range("B1:Z100")
 MsgBox oRange.Columns("L").Address 'M1:M100

End Sub
  

Почему в вашем коде используется UsedRange ?

Комментарии:

1. Спасибо за это объяснение, попал в точку! Мне нужен был другой код для запуска на основе столбца, в котором находилась ячейка, и UsedRange работал у меня в прошлом.