I need help in making VB Excel macro that would take input from InputBox and convert it from English to Morse and vice versa, then show result in MessageBox. I've been stuck, and I've got no clue how could I make it. Thanks for help in advance <3
Dictionary object
, I stuck with the arrays as an interesting alternative.The Code
Option Explicit
Function getMorseCode( _
ByVal s As String, _
Optional ByVal CharDelimiter As String = " ", _
Optional ByVal WordDelimiter As String = vbLf, _
Optional ByVal NotFoundReplacement As String = "~") _
As String
Dim CharsList As String
CharsList = _
"a|b|c|d|e|f|g|h|i|j|" _
& "k|l|m|n|o|p|q|r|s|t|" _
& "u|v|w|x|y|z|" _
& "0|1|2|3|4|5|6|7|8|9|" _
& ".|,|?|:|/|""|'|;|!|" _
& "(|)|&|=|+|-|_|$|@|" _
& " "
Dim CodesList As String
CodesList = _
".-|-...|-.-.|-..|.|..-.|--.|....|..|.---|" _
& "-.-|.-..|--|-.|---|.--.|--.-|.-.|...|-|" _
& "..-|...-|.--|-..-|-.--|--..|" _
& "-----|.----|..---|...--|....-|.....|-....|--...|---..|----.|" _
& ".-.-.-|--..--|..--..|---...|-..-.|.-..-.|.----.|-.-.-.|-.-.--|" _
& "-.--.|-.--.-|.-...|-...-|.-.-.|-....-|..--.-|...-..-|.--.-.|" _
& WordDelimiter
Dim Chars() As String: Chars = Split(CharsList, "|")
'Debug.Print Join(Chars, vbLf)
Dim Codes() As String: Codes = Split(CodesList, "|")
'Debug.Print Join(Codes, vbLf)
Dim CurrentMatch As Variant
Dim n As Long
Dim cChar As String
Dim Result As String
For n = 1 To Len(s)
cChar = Mid(s, n, 1)
CurrentMatch = Application.Match(cChar, Chars, 0)
If IsNumeric(CurrentMatch) Then
Result = Result & CharDelimiter & Codes(CurrentMatch - 1)
Else
Result = Result & CharDelimiter & NotFoundReplacement
End If
Next n
' Remove leading Char Delimiter.
Result = Right(Result, Len(Result) - Len(CharDelimiter))
' Remove Char Delimiter following a Word Delimiter.
getMorseCode = Replace(Result, WordDelimiter & CharDelimiter, WordDelimiter)
End Function
Sub TESTgetMorseCode()
MsgBox getMorseCode("""The character '%' cannot be found!""")
'Debug.Print getMorseCode("""The character '%' cannot be found!""")
End Sub