加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

vba与带圈字符(VBA给字符加圈)    网络转载……

(2010-10-05 23:18:12)
标签:

杂谈

分类: 计算机应用

最近学习了 水清山兄关于WORD在方面域应用资料http://club.excelhome.net/viewth ... p;extra=&page=1 ,收获很大。尝试学习写一写代码。想到了以前讨论过的关于给字符加圈,11-100的带圈序号等话题,就想通过vba+域代码。来试一试,写完之后,搜索了一下,守柔版主的方法更好,域代码更简单http://club.excelhome.net/viewth ... D=250325&skin=1
http://club.excelhome.net/viewthread.php?tid=117000
就“拿来”用一下。反正为了方便大家,所以请原谅。
高手指点,让代码效率更高。批量加圈的时候代码执行较慢所以请不要选中太多内容。默认按词语加圈,如果需要按字符加圈,也请大家根据自己需要修改。

Sub myModifyEnclosure(myR As Range, Optional iFontName As String = "宋体")
'给字符加上圈
'实质就是加上一个Eq域,核心域代码为 eq \o\ac(1,\s\do4(○))
'这是我学习eq后的一个简单组合
'比word自身的域代码(eq \o\ac(○,一))多了调节上下的部分\s\do4
'可以支持最多四个字符(数字
'并且通过代码来智能判断字符,来调节字符字号,并修改字体和偏移量,以期达到最佳效果。
Dim myStart As Long
Dim L As Byte
Dim myFontSize As Single
Dim myField As Field
Dim strW As String, strCode As String

If myR.Words.Count > 1 Then Exit Sub

strW = Trim(myR.Text)

L = Len(strW)
If L > 4 Or L = 0 Then Exit Sub
If Asc(strW) = 13 Then Exit Sub
'确定数字字号
Select Case L
    Case 1
    myFontSize = 15
    Case 2
    myFontSize = 12
    Case 3
    myFontSize = 9
    Case 4
    myFontSize = 6.5
End Select
Set myField = myR.Fields.Add(Range:=myR, Type:=wdFieldEmpty, _
               PreserveFormatting:=False)
   myField.ShowCodes = False
    If Asc(strW) < 0 Then '汉字
    strCode = "eq \o\ac(" & strW & ",\s\do3(○))"
    ElseIf Len(strW) > 2 Then '两个以上字符
    strCode = "eq \o\ac(" & strW & ",\s\do5(○))"
    Else
    strCode = "eq \o\ac(" & strW & ",\s\do4(○))"
    End If
    myField.Code.Text = strCode
    myStart = myField.Code.Start + 9
'字符设置
With ActiveDocument.Range(myStart, myStart + L).Font
.Name = iFontName '字体,默认为宋体
.Size = myFontSize '字号
End With
'外圈字号
ActiveDocument.Range(myStart + L + 8, myStart + L + 9).Font.Size = 22

End Sub
Sub myModifyEnclosure2(myR As Range, Optional iFontName As String = "宋体")
'下面的代码参守柔版主的代码,这个方法比较简单
'核心域代码为eq \o(22,○)但是要设置字体的位置
'http://club.excelhome.net/viewthread.php?tid=55346&replyID=250325&skin=1
'http://club.excelhome.net/viewthread.php?tid=117000
Dim myStart As Long
Dim L As Byte
Dim myFontSize As Single
Dim myField As Field
Dim strW As String, strCode As String

If myR.Words.Count > 1 Then Exit Sub

strW = Trim(myR.Text)

L = Len(strW)
If L > 4 Or L = 0 Then Exit Sub
If Asc(strW) = 13 Then Exit Sub
'确定数字字号
Select Case L
    Case 1
    myFontSize = 15
    Case 2
    myFontSize = 12
    Case 3
    myFontSize = 9
    Case 4
    myFontSize = 6.5
End Select
Set myField = myR.Fields.Add(Range:=myR, Type:=wdFieldEmpty, _
               PreserveFormatting:=False)
   myField.ShowCodes = False

    strCode = "eq \o(" & strW & ",○)"
    myField.Code.Text = strCode
    myStart = myField.Code.Start + 6
'字符设置
With ActiveDocument.Range(myStart, myStart + L).Font
.Name = iFontName '字体,默认为宋体
.Size = myFontSize '字号
End With
'外圈字号
With ActiveDocument.Range(myStart + L + 1, myStart + L + 2).Font
.Size = 22
.Position = -Len(strW) - 2 '关键步骤
End With
End Sub
下面是调用例子,加圈内容默认被设置为宋体,可以修改字体。
Sub test()
'批量给选定内容加上圈,速度可能会很慢,所以一次不要太多
Dim mySel As Range
Dim myWord As Range
Dim T As Long, I As Long
Set mySel = Word.Selection.Range
T = mySel.Words.Count
For I = T To 1 Step -1
Set myWord = mySel.Words(I)
myModifyEnclosure2 myWord, "黑体"
Next
End Sub
Sub 批量2()
'批量给选定内容加上圈,速度可能会很慢,所以一次不要太多
Dim mySel As Range
Dim myWord As Range
Dim T As Long, I As Long
Set mySel = Word.Selection.Range
T = mySel.Words.Count
For I = T To 1 Step -1
Set myWord = mySel.Words(I)
myModifyEnclosure myWord, "黑体"
Next
End Sub
Sub test1()
'给光标处词语加圈
myModifyEnclosure Word.Selection.Words(1), "楷体_GB2312"
End Sub
Sub test2()
'给光标处词语加圈
myModifyEnclosure2 Word.Selection.Words(1), "楷体_GB2312"
End Sub

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有