我可以在制作 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
我需要帮助制作 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