以下是引用守柔在2006-2-20 17:21:29的发言:以下是引用[I]ssq1109[/I]在2006-2-20 10:04:15的发言:[BR]原来函数这么有用。我要找相关资料好好学一下。 但还有一问题(见附件)
为什么要把我难倒呢? 请把你的最终结果附上来,让网友们也受益一下。 '* +++++++++++++++++++++++++++++ '* Created By I LOVE YOU WORD!@ExcelHome 2006-2-20 17:19:04 '仅测试于System: Windows NT Word: 11.0 Language: 2052 '№ 0018^The Code CopyIn [ThisDocument-ThisDocument]^' '* ----------------------------- Option Explicit Sub GetFieldCode() Dim oEQ As Field, strCode As String, myCode As String Dim intLenth As Integer, aChar As String, i As Integer Application.ScreenUpdating = False '关闭屏幕更新 With ActiveDocument For Each oEQ In .Fields '域中循环 With oEQ If .Type = wdFieldFormula Then '如果是公式域EQ myCode = "" '初始化变量 strCode = .Code.Text '取得域代码 '取得字符串长度 intLenth = VBA.Len(strCode) For i = 1 To intLenth '循环 aChar = VBA.Mid(strCode, i, 1) '取得单字 If VBA.Asc(aChar) < 0 Then '如果为全角字符,其ASC值<0 myCode = myCode & GetGBK(aChar) '字符串累加 Else myCode = myCode & aChar '字符串累加 End If Next .Code.Text = myCode '重写域代码 .Update '更新此域 End If End With Next End With Application.ScreenUpdating = True End Sub '---------------------- Function GetGBK(myString As String) As String '此函数适用于单字返回GBK码,若须多字,请用数组循环 Dim myArray() As Byte myArray = VBA.StrConv(myString, vbFromUnicode) GetGBK = "|G" & VBA.Hex(myArray(0)) & VBA.Hex(myArray(1)) & "|" End Function 如果将16楼的函数部分改为: Function GetUnicode(myString As String) As String '此函数适用于单字返回Unicode码,若须多字,请用数组循环 Dim myArray() As Byte myArray = VBA.StrConv(myString, FromUnicode) GetUnicode = "|G" & VBA.Hex(myArray(1)) & VBA.Hex(myArray(0)) & "|" End Function
当然要同时将主代码中的“GBK”改为“Unicode”,可将汉字转换成Unicode码值,但我今天遇到了奇事,附件中的分工中有℃、△、÷、⊙四个符号,转换后△和⊙得到的Unicode码值正确,但℃和÷得到的Unicode码值少了第1个字符(都是0),真是怪事,是不是因为首位是0就去掉了,怎样得到完整的4位Unicode码值呢?
52eb2xaI.rar
(2.21 KB, 下载次数: 14)
|