Код работал - без изменений, теперь не работает (VBA) - PullRequest
0 голосов
/ 26 марта 2019

Я в тупике - этот код работал нормально - теперь он работает в неправильных столбцах.Возьмем, к примеру, столбец L, он закодирован для преобразования выбранной ячейки в Propercase, но теперь он преобразуется в Uppercase.Код столбца 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 Ответ

2 голосов
/ 26 марта 2019

Me.UsedRange.Columns("L") в вашем коде означает L th, который является двенадцатым столбцом вашего 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 в вашем коде есть?

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