我写了一个快速操作来生成一个表,以便在使用 ALT 代码时用作参考。 我得到的输出与在单元格中键入时实际显示的输出不匹配。例如,输出显示 ALT+3 应该是这个┘
,但如果我实际键入 ALT+3,它会显示这个♦
。
我知道我可以使用CHRw()
来实现任何字符,但我想我在这里寻找的是是否有一个直接代码,相当于按住 ALT 并按下数字组合。
以下是我用来生成表的代码:
Sub CHARACTER_TABLE()
'DEFINE VARIABLES
Dim CROW As Integer
Dim CCOL As Integer
Dim A As Integer
CROW = 2
CCOL = 1
A = 1
Do
Cells(CROW, CCOL) = A
Cells(CROW, (CCOL + 1)) = Chr(A)
CROW = CROW + 1
A = A + 1
If CROW = 42 Then
CROW = 2
CCOL = CCOL + 3
End If
If A = 256 Then
Exit Do
End If
Loop
End Sub
对于没有前导零的代码,将从系统 OEM 代码页转换字符:
ALT + 128 gives "Ç" with the code page 487 (https://en.wikipedia.org/wiki/Code_page_437)
对于具有前导零的代码,将从系统 ANSI 代码页转换字符:
ALT + 0128 gives "€" with the code page 1251 (https://en.wikipedia.org/wiki/Windows-1251)
要在工作表中列出默认的 OEM 和 ANSI 字符,请执行以下操作:
Private Declare Function MultiByteToWideChar Lib "kernel32" ( _
ByVal codepage As Long, ByVal dwFlags As Long, _
ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, _
ByRef lpWideCharStr As Any, ByVal cchWideChar As Long) As Long
Function ChrEx(ByVal code As Integer, ByVal codepage As Long) As String
Dim tgt(0 To 1) As Byte
MultiByteToWideChar codepage, 4, code, 2, tgt(0), 2
ChrEx = tgt
End Function
Sub DisplayCharSets()
Dim r&, chars(1 To 255, 1 To 1) As String
'List the system OEM code page in range A1
chars(1, 1) = "OEM"
For r = 2 To 255
chars(r, 1) = ChrEx(r, 1) ' Default OEM code page = 1
Next
[A1:A255] = chars
'List the system ANSI code page in range B1
chars(1, 1) = "ANSI"
For r = 2 To 255
chars(r, 1) = ChrEx(r, 0) ' Default ANSI code page = 0
Next
[B1:B255] = chars
End Sub