我可以在制作 Visual Basic Excel 宏来将摩尔斯电码转换为英语或反之时获得帮助吗

Can I get help in making Visual Basic Excel macro for converting Morse code to English language and vice versa

我需要帮助制作 VB Excel 宏,该宏将从 InputBox 获取输入并将其从英语转换为摩尔斯语,反之亦然,然后在 MessageBox 中显示结果。我被困住了,我不知道我怎么能成功。提前感谢您的帮助<3

请看以下内容(仅供参考-您可能需要将代码转换为VBA,但我相信您可以做到)

   If txtInput.Text = "a" Then
    lblStatus.Caption = ".-"
        End If
    If txtInput.Text = "b" Then
    lblStatus.Caption = "-..."
        End If
    If txtInput.Text = "c" Then
    lblStatus.Caption = "-.-."
        End If
    If txtInput.Text = "d" Then
    lblStatus.Caption = "-.."
        End If
    If txtInput.Text = "e" Then
    lblStatus.Caption = "."
        End If
    If txtInput.Text = "f" Then
    lblStatus.Caption = "..-."
        End If
    If txtInput.Text = "g" Then
    lblStatus.Caption = "--."
        End If
    If txtInput.Text = "h" Then
    lblStatus.Caption = "...."
        End If
    If txtInput.Text = "i" Then
    lblStatus.Caption = ".."
        End If
    If txtInput.Text = "j" Then
    lblStatus.Caption = ".---"
        End If
    If txtInput.Text = "k" Then
    lblStatus.Caption = "-.-"
        End If
    If txtInput.Text = "l" Then
    lblStatus.Caption = ".-.."
        End If
    If txtInput.Text = "m" Then
    lblStatus.Caption = "--"
        End If
    If txtInput.Text = "n" Then
    lblStatus.Caption = "-."
        End If
    If txtInput.Text = "o" Then
    lblStatus.Caption = "---"
        End If
    If txtInput.Text = "p" Then
    lblStatus.Caption = ".--."
        End If
    If txtInput.Text = "q" Then
    lblStatus.Caption = "--.-"
        End If
    If txtInput.Text = "r" Then
    lblStatus.Caption = ".-."
        End If
    If txtInput.Text = "s" Then
    lblStatus.Caption = "..."
        End If
    If txtInput.Text = "t" Then
    lblStatus.Caption = "-"
        End If
    If txtInput.Text = "u" Then
    lblStatus.Caption = "..-"
        End If
    If txtInput.Text = "v" Then
    lblStatus.Caption = "...-"
        End If
    If txtInput.Text = "w" Then
    lblStatus.Caption = ".--"
        End If
    If txtInput.Text = "x" Then
    lblStatus.Caption = "-..-"
        End If
    If txtInput.Text = "y" Then
    lblStatus.Caption = "-.--"
        End If
    If txtInput.Text = "z" Then
    lblStatus.Caption = "--.."
        End If
    If txtInput.Text = "0" Then
    lblStatus.Caption = "-----"
        End If
    If txtInput.Text = "1" Then
    lblStatus.Caption = ".----"
        End If
    If txtInput.Text = "2" Then
    lblStatus.Caption = "..---"
        End If
    If txtInput.Text = "3" Then
    lblStatus.Caption = "...--"
        End If
    If txtInput.Text = "4" Then
    lblStatus.Caption = "....-"
        End If
    If txtInput.Text = "5" Then
    lblStatus.Caption = "....."
        End If
    If txtInput.Text = "6" Then
    lblStatus.Caption = "-...."
        End If
    If txtInput.Text = "7" Then
    lblStatus.Caption = "--..."
        End If
    If txtInput.Text = "8" Then
    lblStatus.Caption = "---.."
        End If
    If txtInput.Text = "9" Then
    lblStatus.Caption = "----."
    
    End If

英语到摩尔斯电码

  • 虽然这几乎是默认使用 Dictionary object 完成的,但我坚持使用数组作为一个有趣的选择。

代码

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