如题
解决方案 »
- 自己开发的报表控件,AC Report Ver2.4,请多支持:)
- 不能对合并单元格做修改
- 请高手们帮我看看以下代码存在的问题
- OLE控件显示word中的部分字体变为?号
- 在学校一直用access,听说找工作许多需要sql server,所以想知道怎么写存储过程和触发器,怎样在程序中调用,请各位大哥帮忙。
- 马上要学VB的菜鸟有问题要请教
- 为什么我在工具栏使用“部件”命令添加了一个第3方控件,重新启动以后就不见了,怎么使它总在上面?
- VB打包的问题,在没有VB环境的机子上运行程序,提示ADO找不到指定的数据提供者!请各位帮帮忙!
- 如何在数据库查询中实现对时间格式数据的模糊查询?
- 高分相赠!!!:操作系统和SQL SEVER2000都是英文版,用VB连接如何可以正确的输入和显示中文?
- 关于VB调用VC制作的动态链接库时VC方面的字符指针转换成VB里面的字符串问题。
- 请问:如何将图片里的图片内容(字节)取出并重新写入?
If Asc(A1) < 0 Then
'四个特殊字
If A1 = "噢" Then
GetPY = "O"
Exit Function
End If
If A1 = "杞" Then
GetPY = "Q"
Exit Function
End If
If A1 = "嘌" Then
GetPY = "P"
Exit Function
End If
If A1 = "呤" Then
GetPY = "L"
Exit Function
End If
'正常汉字
If Asc(A1) < Asc("啊") Then
GetPY = "0"
Exit Function
End If
If Asc(A1) >= Asc("啊") And Asc(A1) < Asc("芭") Then
GetPY = "A"
Exit Function
End If
If Asc(A1) >= Asc("芭") And Asc(A1) < Asc("擦") Then
GetPY = "B"
Exit Function
End If
If Asc(A1) >= Asc("擦") And Asc(A1) < Asc("搭") Then
GetPY = "C"
Exit Function
End If
If Asc(A1) >= Asc("搭") And Asc(A1) < Asc("蛾") Then
GetPY = "D"
Exit Function
End If
If Asc(A1) >= Asc("蛾") And Asc(A1) < Asc("发") Then
GetPY = "E"
Exit Function
End If
If Asc(A1) >= Asc("发") And Asc(A1) < Asc("噶") Then
GetPY = "F"
Exit Function
End If
If Asc(A1) >= Asc("噶") And Asc(A1) < Asc("哈") Then
GetPY = "G"
Exit Function
End If
If Asc(A1) >= Asc("哈") And Asc(A1) < Asc("击") Then
GetPY = "H"
Exit Function
End If
If Asc(A1) >= Asc("击") And Asc(A1) < Asc("喀") Then
GetPY = "J"
Exit Function
End If
If Asc(A1) >= Asc("喀") And Asc(A1) < Asc("垃") Then
GetPY = "K"
Exit Function
End If
If Asc(A1) >= Asc("垃") And Asc(A1) < Asc("妈") Then
GetPY = "L"
Exit Function
End If
If Asc(A1) >= Asc("妈") And Asc(A1) < Asc("拿") Then
GetPY = "M"
Exit Function
End If
If Asc(A1) >= Asc("拿") And Asc(A1) < Asc("哦") Then
GetPY = "N"
Exit Function
End If
If Asc(A1) >= Asc("哦") And Asc(A1) < Asc("啪") Then
GetPY = "O"
Exit Function
End If
If Asc(A1) >= Asc("啪") And Asc(A1) < Asc("期") Then
GetPY = "P"
Exit Function
End If
If Asc(A1) >= Asc("期") And Asc(A1) < Asc("然") Then
GetPY = "Q"
Exit Function
End If
If Asc(A1) >= Asc("然") And Asc(A1) < Asc("撒") Then
GetPY = "R"
Exit Function
End If
If Asc(A1) >= Asc("撒") And Asc(A1) < Asc("塌") Then
GetPY = "S"
Exit Function
End If
If Asc(A1) >= Asc("塌") And Asc(A1) < Asc("挖") Then
GetPY = "T"
Exit Function
End If
If Asc(A1) >= Asc("挖") And Asc(A1) < Asc("昔") Then
GetPY = "W"
Exit Function
End If
If Asc(A1) >= Asc("昔") And Asc(A1) < Asc("压") Then
GetPY = "X"
Exit Function
End If
If Asc(A1) >= Asc("压") And Asc(A1) < Asc("匝") Then
GetPY = "Y"
Exit Function
End If
If Asc(A1) >= Asc("匝") Then
GetPY = "Z"
Exit Function
End If
Else
'英文和数字
If UCase(A1) <= "Z" And UCase(A1) >= "A" Then
GetPY = UCase(A1)
ElseIf A1 <= "9" And A1 >= "0" Then
GetPY = A1
Else
GetPY = "0"
End If
End If
End Function
Dim i As Integer
Const hanzi = "啊芭擦搭蛾发噶哈击喀垃妈拿哦啪期然撒塌挖昔压匝座ABCDEFGHJKLMNOPQRSTWXYZZ"
If x = "座" Then pinyin = "Z"
For i = 1 To 23
If Asc(x) >= Asc(Mid(hanzi, i, 1)) And Asc(x) < Asc(Mid(hanzi, i + 1, 1)) Then pinyin = Mid(hanzi, 24 + i, 1)
Next
End FunctionFunction py(ByVal x As String) As String
Dim i As Integer
For i = 1 To Len(x)
If Mid(x, i, 1) <> " " And Asc(Mid(x, i, 1)) < 0 Then py = py & pinyin(Mid(x, i, 1))
Next
py = UCase(py)
End FunctionPrivate Sub Command1_Click()
MsgBox py("中国软件")
End Sub
'先建立一个模块,然后在过程中直接调用该函数就可以得到拼音了
'使用方法
dim s as string
s= GetChineseSpell("你好")
'结果 s="nh"Option Explicit
Public Const CB_SHOWDROPDOWN = &H14F
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As LongPrivate Const IME_ESC_MAX_KEY = &H1005
Private Const IME_ESC_IME_NAME = &H1006
Private Const GCL_REVERSECONVERSION = &H2
Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
Private Declare Function ImmEscape Lib "imm32.dll" Alias "ImmEscapeA" (ByVal hkl As Long, ByVal himc As Long, ByVal un As Long, lpv As Any) As Long
Private Declare Function ImmGetConversionList Lib "imm32.dll" Alias "ImmGetConversionListA" (ByVal hkl As Long, ByVal himc As Long, ByVal lpsz As String, lpCandidateList As Any, ByVal dwBufLen As Long, ByVal uFlag As Long) As Long
Private Declare Function IsDBCSLeadByte Lib "kernel32" (ByVal bTestChar As Byte) As Long
Public Function GetChineseSpell(Chinese As String, Optional Delimiter As String = " ", Optional IMEName As String = "微软拼音输入法", Optional BufferSize As Long = 255) As String
If VBA.Len(VBA.Trim(Chinese)) > 0 Then
Dim i As Long
Dim s As String
Dim temp As String
s = VBA.Space(BufferSize)
Dim IMEInstalled As Boolean
Dim j As Long
Dim a() As Long
ReDim a(BufferSize) As Long
j = GetKeyboardLayoutList(BufferSize, a(LBound(a)))
For i = LBound(a) To LBound(a) + j - 1
If ImmEscape(a(i), 0, IME_ESC_IME_NAME, ByVal s) Then
If VBA.Trim(IMEName) = VBA.Replace(VBA.Trim(s), VBA.Chr(0), "") Then
IMEInstalled = True
Exit For
End If
End If
Next i
If IMEInstalled Then
'Stop
Chinese = VBA.Trim(Chinese)
Dim sChar As String
Dim Buffer0() As Byte
'Dim Buffer() As Byte
Dim bBuffer0() As Byte
Dim bBuffer() As Byte
Dim k As Long
Dim l As Long
Dim m As Long
For j = 0 To VBA.Len(Chinese) - 1
sChar = VBA.Mid(Chinese, j + 1, 1)
Buffer0 = VBA.StrConv(sChar, vbFromUnicode)
If IsDBCSLeadByte(Buffer0(0)) Then
k = ImmEscape(a(i), 0, IME_ESC_MAX_KEY, Null)
If k Then
l = ImmGetConversionList(a(i), 0, sChar, 0, 0, GCL_REVERSECONVERSION)
If l Then
s = VBA.Space(BufferSize)
If ImmGetConversionList(a(i), 0, sChar, ByVal s, l, GCL_REVERSECONVERSION) Then
bBuffer0 = VBA.StrConv(s, vbFromUnicode)
ReDim bBuffer(k * 2 - 1)
For m = bBuffer0(24) To bBuffer0(24) + k * 2 - 1
bBuffer(m - bBuffer0(24)) = bBuffer0(m)
Next m
sChar = VBA.Trim(VBA.StrConv(bBuffer, vbUnicode))
If VBA.InStr(sChar, vbNullChar) Then
sChar = VBA.Trim(VBA.left(sChar, VBA.InStr(sChar, vbNullChar) - 1))
End If
sChar = VBA.left(sChar, VBA.Len(sChar) - 1) & VBA.IIf(j < VBA.Len(Chinese) - 1, Delimiter, "")
End If
End If
End If
End If
GetChineseSpell = GetChineseSpell & sChar
Next j
Else End If
End If
If GetChineseSpell <> "" Then
temp = Mid(GetChineseSpell, 1, 1)
For i = 1 To Len(GetChineseSpell)
If Mid(GetChineseSpell, i, 1) = " " Then
temp = temp + Mid(GetChineseSpell, i + 1, 1)
End If
Next
End If
GetChineseSpell = temp
End Function
↓
FFFFB0FE A
↓
FFFFB1FE B
↓
FFFFB2FE C
↓
FFFFB3FE D
↓
FFFFB4FE E
↓
FFFFB5FE F......依次类推。前边是汉字的16进制格式。
$B0A1..$B0C4 : result := 'A';
$B0C5..$B2C0 : result := 'B';
$B2C1..$B4ED : result := 'C';
$B4EE..$B6E9 : result := 'D';
$B6EA..$B7A1 : result := 'E';
$B7A2..$B8C0 : result := 'F';
$B8C1..$B9FD : result := 'G';
$B9FE..$BBF6 : result := 'H';
$BBF7..$BFA5 : result := 'J';
$BFA6..$C0AB : result := 'K';
$C0AC..$C2E7 : result := 'L';
$C2E8..$C4C2 : result := 'M';
$C4C3..$C5B5 : result := 'N';
$C5B6..$C5BD : result := 'O';
$C5BE..$C6D9 : result := 'P';
$C6DA..$C8BA : result := 'Q';
$C8BB..$C8F5 : result := 'R';
$C8F6..$CBF9 : result := 'S';
$CBFA..$CDD9 : result := 'T';
$CDDA..$CEF3 : result := 'W';
$CEF4..$D188 : result := 'X';
$D1B9..$D4D0 : result := 'Y';
$D4D1..$D7F9 : result := 'Z';
Dim i As Integer
Str = Text1.Text
TempStr = ""
length = Len(Str)
For i = 1 To length
Select Case Asc(Str)
Case &HB0A1 To &HB0C4: ch = "a"
Case &HB0C5 To &HB2C0: ch = "b"
Case &HB2C1 To &HB4ED: ch = "c"
Case &HB4EE To &HB6E9: ch = "d"
Case &HB6EA To &HB7A1: ch = "e"
Case &HB7A2 To &HB8C0: ch = "f"
Case &HB8C1 To &HB9FD: ch = "g"
Case &HB9FE To &HBBF6: ch = "h"
Case &HBBF7 To &HBFA5: ch = "j"
Case &HBFA6 To &HC0AB: ch = "k"
Case &HC0AC To &HC2E7: ch = "l"
Case &HC2E8 To &HC4C2: ch = "m"
Case &HC4C3 To &HC5B5: ch = "n"
Case &HC5B6 To &HC5BD: ch = "o"
Case &HC5BE To &HC6D9: ch = "p"
Case &HC6DA To &HC8BA: ch = "q"
Case &HC8BB To &HC8F5: ch = "r"
Case &HC8F6 To &HCBF9: ch = "s"
Case &HCBFA To &HCDD9: ch = "t"
Case &HCDDA To &HCEF3: ch = "w"
Case &HCEF4 To &HD188: ch = "x"
Case &HD1B9 To &HD4D0: ch = "y"
Case &HD4D1 To &HD7F9: ch = "z"
Case Else
ch = Left(Str, 1)
End Select
TempStr = TempStr + ch
Str = Mid(Str, 2, Len(Str))
Next
Text2.Text = TempStr