У меня очень странная проблема. Я не могу получить значение, возвращаемое простой функцией, как показано ниже, если возвращаемое значение больше одного символа. Теперь вторая проблема заключается в том, что следующий код не назначает «WTH» переменной sheetName. См. Снимок экрана 2. ОБНОВЛЕНО ПОСЛЕ КОММЕНТАРИИ КИРИЛЯ
Public Sub WTHFormatter()
Dim sheetName As String
sheetName = "WTH"
Dim rng1 As Range
'delete empty rows
lastRowWTH = getLastRow(sheetName, 2)
'Delete rows below the last Row
Worksheets(sheetName).Rows(lastRowWTH + 1 & ":" & Worksheets(sheetName).Rows.Count).Delete
' build first range
Set rng1 = Worksheets(sheetName).Range("B11:F" & lastRowWTH)
Call setCellBorders(rng1)
Set rng1 = Worksheets(sheetName).Range("H11:K" & lastRowWTH)
Call setCellBorders(rng1)
'determine the range for months
For i = 13 To 24
If Cells(7, i) = "" Then
lastCol = i - 1
Exit For
End If
lastCol = i
Next
ColLetter = returnLabel(lastCol)
ColLetter2 = returnLabel(lastCol + 2)
ColLetterX = returnLabel(lastCol + 14)
Set rng1 = Worksheets(sheetName).Range("K17:" & ColLetter & lastRowWTH)
Call setCellBorders(rng1)
Set rng1 = Worksheets(sheetName).Range(ColLetter2 & lastRowWTH & ":" & ColLetter3 & lastRowWTH)
Call setCellBorders(rng1)
End Sub
Function returnLabel(num1 As Long) As String
Dim ColumnLetter As String
ColumnLetter = Split(Cells(1, num1).Address, "$")(1)
returnLabel = ColumnLetter
End Function
Приведенная выше функция возвращает пустое значение, и varTest не имеет ничего после выполнения. Если я выполняю построчное выполнение, я вижу, что test1 в функции не равен 'Null'. Если я прерываю выполнение и проверяю переменные, я вижу «test1 =» только в соответствии со снимком экрана ниже. И это нарушает мой код.
Странно, если я вызываю функцию из «Немедленного окна», она возвращает ожидаемое значение.
То, что я уже сделал:
- Я протестировал в новом файле, используя простой код, как указано выше.
- Протестирован на разных ПК и один и тот же код работает нормально с той же версией Windows 10 и Office 365.
- Обновлено/ Переустановил MS Office 365
- Перезагрузил компьютер
- Если возвращаемое значение представляет собой один символ, такой как «A», код работает нормально.
Не удалось понять причину здесь. Любая помощь приветствуется.
UPDATE1 Я попробовал его на свежем файле, пока работал код выше, но основной кодиспытывает новую подобную проблему. Это начало происходить только сейчас. Это не присвоение строкового значения переменной. См. Прикрепленный снимок экрана. Снимок экрана с кодом VBA . Я предполагаю, что есть какая-то проблема с системой или вирусом.