Здравствуйте. Есть задача - реверс текста в ячейке. Скажем A1=1234, A2 должно быть 4321. На http://forums.techarena.in/windows-software/1193083.htm нашёл два варианте готовой функции - ни одна не работает. Вернее собственно функция регистрируется- появляется в списке функций, но при вводе в качестве аргумента A1 - ошибка #ЗНАЧ!. Я не великий спец в VBA - проанализируйте пожалуйста. Что не так? Вариант 1
Code
Function Reverse_Text(Text As String) As String Dim i As Integer Dim StrNewNum As String Dim strOld As String strOld = Trim(Rcell) For i = 1 To Len(strOld) StrNewNum = Mid(strOld, i, 1) & StrNewNum Next i If IsText = False Then ReverseCell = CLng(StrNewNum) Else ReverseCell = StrNewNum End If End Function
Вариант 2
Code
Function Reverse_Text(Text as String) as String Dim i As Integer Dim StrNew As String Dim strOld As String strOld = Trim(Text) For i = 1 To Len(strOld) StrNew = Mid(strOld, i, 1) & StrNew Next i Reverse = StrNew End Function
TIA
Здравствуйте. Есть задача - реверс текста в ячейке. Скажем A1=1234, A2 должно быть 4321. На http://forums.techarena.in/windows-software/1193083.htm нашёл два варианте готовой функции - ни одна не работает. Вернее собственно функция регистрируется- появляется в списке функций, но при вводе в качестве аргумента A1 - ошибка #ЗНАЧ!. Я не великий спец в VBA - проанализируйте пожалуйста. Что не так? Вариант 1
Code
Function Reverse_Text(Text As String) As String Dim i As Integer Dim StrNewNum As String Dim strOld As String strOld = Trim(Rcell) For i = 1 To Len(strOld) StrNewNum = Mid(strOld, i, 1) & StrNewNum Next i If IsText = False Then ReverseCell = CLng(StrNewNum) Else ReverseCell = StrNewNum End If End Function
Вариант 2
Code
Function Reverse_Text(Text as String) as String Dim i As Integer Dim StrNew As String Dim strOld As String strOld = Trim(Text) For i = 1 To Len(strOld) StrNew = Mid(strOld, i, 1) & StrNew Next i Reverse = StrNew End Function
для любителей непростых, но быстрых подходов [vba]
Code
Function dhReverse(ByVal strIn As String) As String Dim abytIn() As Byte Dim strTemp As String Dim i As Integer Dim bytTemp As Byte Dim intNew As Integer
If Len(strIn) = 0 Then dhReverse = strIn: Exit Function
abytIn = strIn 'байтовый массив For i = LBound(abytIn) To UBound(abytIn) \ 2 Step 2 intNew = UBound(abytIn) - i 'обмен первыми байтами bytTemp = abytIn(i) abytIn(i) = abytIn(intNew - 1) ' i <--> (intNew - 1) abytIn(intNew - 1) = bytTemp
'обмен вторыми байтами bytTemp = abytIn(i + 1) abytIn(i + 1) = abytIn(intNew) ' (i + 1) <--> intNew abytIn(intNew) = bytTemp Next i dhReverse = abytIn End Function Function SlowReverse(strIn As String) As String Dim i As Integer
For i = Len(strIn) To 1 Step -1 SlowReverse = SlowReverse & Mid(strIn, i, 1) Next i End Function
[/vba]
взято из книги "Гетц, Джилберт - Программирование в MS Office. Руководство по VBA" достаточно фундаментальная книжица, предлагаю ее в библиотеку...
для любителей непростых, но быстрых подходов [vba]
Code
Function dhReverse(ByVal strIn As String) As String Dim abytIn() As Byte Dim strTemp As String Dim i As Integer Dim bytTemp As Byte Dim intNew As Integer
If Len(strIn) = 0 Then dhReverse = strIn: Exit Function
abytIn = strIn 'байтовый массив For i = LBound(abytIn) To UBound(abytIn) \ 2 Step 2 intNew = UBound(abytIn) - i 'обмен первыми байтами bytTemp = abytIn(i) abytIn(i) = abytIn(intNew - 1) ' i <--> (intNew - 1) abytIn(intNew - 1) = bytTemp
'обмен вторыми байтами bytTemp = abytIn(i + 1) abytIn(i + 1) = abytIn(intNew) ' (i + 1) <--> intNew abytIn(intNew) = bytTemp Next i dhReverse = abytIn End Function Function SlowReverse(strIn As String) As String Dim i As Integer
For i = Len(strIn) To 1 Step -1 SlowReverse = SlowReverse & Mid(strIn, i, 1) Next i End Function
[/vba]
взято из книги "Гетц, Джилберт - Программирование в MS Office. Руководство по VBA" достаточно фундаментальная книжица, предлагаю ее в библиотеку...Саня
Люди - помогайте. Первый пост писал с работы - там офис 2007 - проверил всё работает. Дома 2010-ый - ввожу функцию - вместо результата показывает саму формулу. И сохранялся и закрывал и открывал по новой и даже перезагружался - результата ноль. В File-Options-Advanced-Display options for this worksheet - Show formulas in cell instead their calculated results чекбокс снят. В Trust center - Macro Settings выбрано Enable all macros. Владелец файла я сам с максимальными правами.
Причём в диалоговом окне ввода параметров результат отображается правильно
Чё ему надо?
Люди - помогайте. Первый пост писал с работы - там офис 2007 - проверил всё работает. Дома 2010-ый - ввожу функцию - вместо результата показывает саму формулу. И сохранялся и закрывал и открывал по новой и даже перезагружался - результата ноль. В File-Options-Advanced-Display options for this worksheet - Show formulas in cell instead their calculated results чекбокс снят. В Trust center - Macro Settings выбрано Enable all macros. Владелец файла я сам с максимальными правами.
Причём в диалоговом окне ввода параметров результат отображается правильно
Помогло. Спасибо. А почему с "Text" проблеммы? Косяк или особенность такая. Я специально форматировал в "Text " так как ячеки планируются именно под текст. И ещё заметил что смена формата не происходит пока не закроешь и по новой откроешь документ. У всех так?
Quote (Jhonson)
Смените формат ячейки на общий
Помогло. Спасибо. А почему с "Text" проблеммы? Косяк или особенность такая. Я специально форматировал в "Text " так как ячеки планируются именно под текст. И ещё заметил что смена формата не происходит пока не закроешь и по новой откроешь документ. У всех так?smarty
Нет, формат ячеек сменяется мгновенно. У всех. И у Вас тоже. Достаточно после смены формата на Общий зайти в режим редактирования ячейки (F2) и нажать Enter и Вы в этом убедитесь.
Quote (smarty)
А почему с "Text" проблеммы? Косяк или особенность такая. Я специально форматировал в "Text " так как ячеки планируются именно под текст.
Какие проблемы? Название функции является текстом, вот Excel Вам его и показывает. При общем формате в приоритете значение ячейки и если оно текстовое, то Вы его и видите.
Quote (RAN)
Serge_007, сравни
Сравнил. Твоя функция преобразует числа в числа, поэтому, из 10, например, получается не 01, как должно быть, а 1. В моей функции всё работает правильно.
Quote (smarty)
У всех так?
Нет, формат ячеек сменяется мгновенно. У всех. И у Вас тоже. Достаточно после смены формата на Общий зайти в режим редактирования ячейки (F2) и нажать Enter и Вы в этом убедитесь.
Quote (smarty)
А почему с "Text" проблеммы? Косяк или особенность такая. Я специально форматировал в "Text " так как ячеки планируются именно под текст.
Какие проблемы? Название функции является текстом, вот Excel Вам его и показывает. При общем формате в приоритете значение ячейки и если оно текстовое, то Вы его и видите.
Quote (RAN)
Serge_007, сравни
Сравнил. Твоя функция преобразует числа в числа, поэтому, из 10, например, получается не 01, как должно быть, а 1. В моей функции всё работает правильно.Serge_007