目前我有一个包含多个人的文字文件和详细信息(示例)。 我需要将此文件拆分为每个Person的单个文件。
这是我正在使用的代码,其中大部分来自我发现的示例,因为我刚刚开始使用VBA进行单词
基本上,我需要通过分隔符(个人)拆分文件 但是每个文件都需要通过位于分隔符
下面的ID号来命名如果有人能给我一个指针,那将非常有帮助!!
Sub SplitNotes (delim As String)
Dim sText As String
Dim sValues(10) As String
Dim doc As Document
Dim arrNotes
Dim strFilename As String
Dim Test As String
Dim I As Long
Dim X As Long
Dim Response As Integer
arrNotes = Split(ActiveDocument.Range, delim)
Response = MsgBox("This will split the document into " & UBound(arrNotes) + 1 & " sections.Do you wish to proceed?", 4)
If Response = 7 Then Exit Sub
For I = LBound(arrNotes) To UBound(arrNotes)
If Trim(arrNotes(I)) <> "" Then
X = X + 1
Set doc = Documents.Add
doc.Range = arrNotes(I)
'Find "EID: "
doc.Range.Find.Text = "EID: "
'Select whole line
Selection.Expand wdLine
'Assign text to variable
sText = Selection.Text
'Remove spaces
sText = Replace(sText, " ", "")
'Split string into values
sValues = Split(sText, ":")
strFilename = "Testing"
doc.SaveAs ThisDocument.Path & "\" & strFilename & Format(X, "Agent")
doc.Close True
End If
Next I
End Sub
Sub Test()
'delimiter
SplitNotes "Name:"
End Sub
Word文档的内容如下:
Personal
Name: John Smith
EID: Alph4num3r1c (Not a set length as i know of)
Details follow on from here Thinking about this I should probably split the document on "Personal"
我的问题正是获取ID号并在另存为函数中使用它。 另外,我还没有完全理解分割功能如何工作
答案 0 :(得分:0)
Split函数根据分隔符将字符串拆分为字符串数组。 例如:
Dim csvNames, arrNames
csvNames = "Tom,Dick,Harry"
arrNames = split(csvNames,",")
现在arrNames是一个包含3个元素的数组。你可以循环遍历这样的元素:
Dim i
For i = 0 to UBound(arrNames)
response.write arrNames(i) & "<br />"
Next
现在应用拆分功能来解决您的问题。 将您感兴趣的行读入变量。让我们说,我们有,
Dim lineWithID, arrKeyValuePair
lineWithID = "EID: Alph4num3r1c"
使用冒号
将其拆分为数组arrKeyValuePair = Split(lineWithID,":")
现在,arrKeyValuePair(1)将包含您的EID
答案 1 :(得分:0)
如果您的问题仍然有效,我会针对您搜索的文件名提供一些解决方案。 我没有检查你的代码的所有部分(所以我做了,但我没有你的原始文件进行全面分析)。返回文件名 - 您可以使用以下简单逻辑从新创建的文档中提取名称:
'...beginning of your code here
'next part unchanged >>
For I = LBound(arrNotes) To UBound(arrNotes)
If Trim(arrNotes(I)) <> "" Then
X = X + 1
Set doc = Documents.Add
doc.Range = arrNotes(I)
'<<until this moment
'remove or comment your code here!!
'and add new part of the code to search for the name
Selection.Find.Execute "EID:"
Selection.MoveRight wdWord, 1
Selection.Expand wdWord
strFilename = Trim(Selection.Text)
'and back to your code- unchanged
doc.SaveAs ThisDocument.Path & "\" & strFilename & Format(X, "Agent")
doc.Close True
End If
Next I
'...end of sub and other ending stuff
我检查它并且对我来说非常好。