Страницы: 1
RSS
Application.Trim и 256 символов в ячейке.
 
Мяв!
Давненько столкнулся с особенностью использования Application.Trim при обработке массива. А сегодня понадобилось применить к ячейке. И я с удивлением обнаружил, что при работе с массивом и работе с ячейкой поведение Application.Trim диаметрально противоположное.
С чем такое связано, и как это объяснить?
Код
Sub Test_A_Trim()
' в A1 и A2 текст 256 символов min
On Error Resume Next
x1 = Application.Trim(Range("a1")) ' Error 2015
x2 = Application.Trim(Range("a1").Value) ' работает

ar1 = Application.Trim(Range("a1:a2")) ' работает
ar2 = Application.Trim(Range("a1:a2").Value) ' empty

y = Len(ar1(1, 1))
End Sub
 
Здравствуйте, Андрей! Уточните, пожалуйста, пример и/или конфигурацию. У меня следующий макрос отрабатывает без ошибок на Excel 2007, Win XP и Excel 2016 (64, en), Win10 (en)
Код
Sub Test_A_Trim()

  Dim x1, x2, ar1, ar2, y
  
  Range("A1") = Application.WorksheetFunction.Rept("A   B", 128)
  Range("A2") = Range("A1")
  
' в A1 и A2 текст 256 символов min
On Error Resume Next
x1 = Application.Trim(Range("a1"))
x2 = Application.Trim(Range("a1").Value)
 
ar1 = Application.Trim(Range("a1:a2"))
ar2 = Application.Trim(Range("a1:a2").Value)
 
y = Len(ar1(1, 1))
End Sub


При этом y=384
Владимир
 
Добрый день, Владимир!
Win 7/32 Excel 2010/32
И без строки On Error Resume Next?
Изменено: RAN - 21.07.2018 14:51:29
 
Андрей, приношу извинения, не обратил внимание на "On error"! На указанных в #2 данных и конфигурациях проблемы воспроизводятся.
Изменено: sokol92 - 21.07.2018 15:00:02
Владимир
 
Интересно, что если обращаться к Trim по имени и отчеству, то ситуация меняется (в том числе, с короткими строками):
Код
Sub Test_A_Trim()
    Dim x1, x2, ar1, ar2, y

    Range("A1") = Application.WorksheetFunction.Rept("A   B", 128)
    Range("A2") = Range("A1")
    x1 = Application.WorksheetFunction.Trim(Range("a1"))       ' ошибки нет
    x2 = Application.WorksheetFunction.Trim(Range("a1").Value) ' ошибки нет
    
    Range("A1") = "A"
    Range("A2") = "B"
    'ar1 = Application.WorksheetFunction.Trim(Range("a1:a2")) ' Ошибка Type mismatch
    ar2 = Application.WorksheetFunction.Trim(Range("a1:a2").Value) ' Ошибка Type mismatch
    
End Sub
Владимир
 
Кстати при написании кода даже подсказки укороченного написания нет. Зато если как сказали по имени отчеству, то всё нормально. Это видимо из народа пошло укорачивать.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Доброго времени суток, Планетяне! Пришёл отсюда (перекрёстная ссылка)

Я вообще с диапазонами напрямую мало работаю, поэтому вот тест на массивах - всё более-менее. Плюс, хочу заметить, что при тестировании даже на очень длинных строках в большом количестве (отсюда) выигрыша вообще нет по сравнению с циклом…
Цитата
sokol92: если обращаться к Trim по имени и отчеству, то ситуация меняется
в теме, созданной позже (откуда я пришёл), Казанский рассказывает, что Application.Trim() круче WorkSheetFunction.Trim() и уж тем более круче Trim(), которая не сжимает пробелы внутри строки, а только сведущие и хвостовые
КОДЫ
Изменено: Jack Famous - 04.06.2019 10:33:32
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх