问题描述
我对VBA编码还很陌生,我正尝试在文本框中提取文本,并将文本框文本插入范围段之前。
这是我到目前为止想到的:
Private Sub Document_New()
Dim shp As Shape
Dim oRngAnchor As Range
Dim sstring As String
For Each shp In ActiveDocument.Shapes
If shp.Type = msoTextBox Then
shp.Select
Selection.ShapeRange.TextFrame.TextRange.Select
sstring = Left(shp.TextFrame.TextRange.Text,_
shp.TextFrame.TextRange.Characters.Count - 1)
If Len(sstring) > 0 Then
Set oRngAnchor = shp.Anchor.Paragraphs(1).Range
oRngAnchor.InsertBefore _
"*" & sstring & "*"
End If
shp.Delete
End If
Next shp
End Sub
但是它会跳过此处和此处的某些文本框,请检查并让我知道是否可以从所有文本框中提取文本。
我们非常感谢您的协助。
谢谢。
解决方法
请尝试下一个代码。当在形状之间进行迭代并在迭代过程中删除其中之一时,形状参考将丢失。形状必须在末尾删除。除此之外,无需选择:
Sub takeTextFromTextBoxes()
Dim shp As Shape,oRngAnchor As Range,sString As String
Dim shpR As ShapeRange,arrShp As Variant,k As Long,i As Long 'new declarations
ReDim arrShp(ActiveDocument.Shapes.Count)
For Each shp In ActiveDocument.Shapes
i = i + 1
If shp.Type = msoTextBox Then
sString = Left(shp.TextFrame.TextRange.Text,_
shp.TextFrame.TextRange.Characters.Count - 1)
If Len(sString) > 0 Then
Set oRngAnchor = shp.Anchor.Paragraphs(1).Range
oRngAnchor.InsertBefore "*" & sString & "*"
End If
arrShp(k) = i: k = k + 1
End If
Next shp
ReDim Preserve arrShp(k - 1)
Set shpR = ActiveDocument.Shapes.Range(arrShp)
shpR.Delete
End Sub