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
End Select
Set myField = myR.Fields.Add(Range:=myR, Type:=wdFieldEmpty, _
'字符设置
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
End Select
Set myField = myR.Fields.Add(Range:=myR, Type:=wdFieldEmpty, _
'字符设置
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
前一篇:摄影技巧(精简版)