2016-10-06 2 views
2

Я пытаюсь написать макрос VBA, который берет одну букву алфавита из активной ячейки и заменяет ее буквой на пять позиций вперед (т.е. «a» становится «f», , «x» становится «c»). Это нужно для декодирования файла зашифрованного текста, где все буквы сдвинуты назад на пять позиций.Изменение значения символа активной ячейки в Excel VBA

До сих пор я пытался использовать значение ASCII буквы и преобразовывать ее из этого целого обратно в символ, но это, похоже, не работает (ошибка времени выполнения 13), и я не могу не задаться вопросом, есть ли более эффективным способом. Вот то, что я до сих пор:

Sub DECODER() 
Worksheets("Sheet1").Activate 

Dim What As String 
What = ActiveCell.Value 

Dim dCode As String 
If What = "" Then 
dCode = What 
Else 
dCode = Chr(Asc((What) + 5)) 
End If 

ActiveCell.Value = dCode 

End Sub 
+0

У вас есть скобка в неправильных местах 'dCode = Chr (Asc (Что) + 5)' –

ответ

1

Без VBA:

С одной строчных алфавитных символов в ячейке A1, в В1 входят:

=CHAR(IF(CODE(A1)>117,CODE(A1)-26,CODE(A1))+5) 

enter image description here

и С помощью VBA:

Public Function DeCoder(Sin As String) As String 
    Dim num As Long 

    If Sin Like "[a-z]" Then 
     num = Asc(Sin) + 5 
     If num > 122 Then num = num - 26 
     DeCoder = Chr(num) 
    Else 
     DeCoder = Sin 
    End If 
End Function 
+0

@ScottCraner ........... попробовать .. ............ –

+0

А я пропустил, что '+ 5' был вне IF() ........ Круто ..... –