Vba 我的Word宏不';我找不到第二个词
我想在Microsoft Word中创建一个VBA脚本,以便在txt文件中查找带有“:”字符的行。如果这是真的,我想得到这一行,将其拆分,并将此信息插入主文件中的表中。为了实现这一目标,我想浏览所有已找到的行以获取此信息 为此,我有以下代码:Vba 我的Word宏不';我找不到第二个词,vba,ms-word,Vba,Ms Word,我想在Microsoft Word中创建一个VBA脚本,以便在txt文件中查找带有“:”字符的行。如果这是真的,我想得到这一行,将其拆分,并将此信息插入主文件中的表中。为了实现这一目标,我想浏览所有已找到的行以获取此信息 为此,我有以下代码: Dim arrNames Dim cont As Integer cont = 0 strPath = ActiveDocument.name Documents.Open path & "Mails.txt"
Dim arrNames
Dim cont As Integer
cont = 0
strPath = ActiveDocument.name
Documents.Open path & "Mails.txt"
strPath2 = ActiveDocument.name
With Selection.Find
.Text = ":"
Do While .Execute(Forward:=True, Format:=True) = True
Selection.Find.Execute FindText:=(":")
Selection.Expand wdLine
arrNames = Split(Selection.Text, ":")
Documents(strPath).Activate
If cont = 0 Then
Call gestOSINT("Pwd")
Selection.Find.Execute FindText:=("[Pwd]")
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "Tabla con cuadrícula" Then
.Style = "Tabla con cuadrícula"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
End With
Set tblNew = Selection.Tables(1)
tblNew.Style = "Tabla de lista 1 clara - Énfasis 1"
Selection.TypeText Text:="Correo electrónico"
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:="Tipo de filtrado"
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:="Plataforma"
End If
Set rowNew = tblNew.Rows.Add
rowNew.Cells(1).Range.Text = arrNames(0)
rowNew.Cells(2).Range.Text = arrNames(1)
rowNew.Cells(3).Range.Text = arrNames(2)
cont = cont + 1
Documents(strPath2).Activate
Selection.Text = arrNames(0) & vbCrLf
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.Collapse wdCollapseEnd
Loop
End With
Documents(strPath2).Activate
ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
Documents(strPath).Activate
If cont = 0 Then
pwdMails = False
Else
pwdMails = True
End If
找到了包含“:”的第一行,在Mails.txt中找到了第3行,但在Mails.txt中找不到第二行,即第5行
为什么会发生这种情况?如何修复它?这是一个通过FileSystemObject读取文件并避免使用
选择的版本。请注意,我注释掉了不适合我的行(样式名称、自定义函数)。
另外:您将对表格应用两种样式,首先是一种样式,然后是另一种样式。请挑一个。;-)
Const ForReading=1
模糊的名字
作为整数的Dim cont
Dim fso、MyFile、文件名、文本行、tblNew As Table、newRow As Row
设置fso=CreateObject(“Scripting.FileSystemObject”)
cont=0
如果cont=0,则
'呼叫Gestosit(“Pwd”)
'Selection.Find.Execute FindText:=(“[Pwd]”)
设置tblNew=ActiveDocument.Tables.Add(范围:=Selection.Range,NumRows:=1,NumColumns:=_
3,DefaultTableBehavior:=wdWord9TableBehavior,AutoFitBehavior:=_
WD自动安装(固定)
用tblNew
“如果.风格”Tabla con cuadrícula“那么
'.Style=“Tabla con cuadrícula”
"完"
.ApplyStyleHeadingRows=真
.ApplyStyleLastRow=False
.ApplyStyleFirstColumn=True
.ApplyStyleLastColumn=False
.ApplyStyleRowBands=真
.ApplyStyleColumnBands=False
'.Style=“表1克拉拉-Énfasis 1”
以
带tblNew.Rows(1)
.Cells(1).Range.text=“Correo electroónico”
.Cells(2).Range.text=“Tipo de filterado”
.Cells(3).Range.text=“Plataforma”
以
如果结束
FileName=path&“Mails.txt”
设置MyFile=fso.OpenTextFile(文件名,用于读取)
当MyFile.AtEndOfStream为True时执行此操作
TextLine=MyFile.ReadLine
如果InStr(1,文本行,“:”)大于0,则
arrNames=VBA.split(文本行“:”)
设置rowNew=tblNew.Rows.Add
rowNew.Cells(1).Range.text=arrNames(0)
rowNew.Cells(2).Range.text=arrNames(1)
rowNew.Cells(3).Range.text=arrNames(2)
如果结束
环
我的文件。关闭
如果cont=0,则
pwdMails=False
其他的
pwdMails=True
如果结束
这是一个通过FileSystemObject读取文件并避免使用选择的版本。请注意,我注释掉了不适合我的行(样式名称、自定义函数)。
另外:您将对表格应用两种样式,首先是一种样式,然后是另一种样式。请挑一个。;-)
Const ForReading=1
模糊的名字
作为整数的Dim cont
Dim fso、MyFile、文件名、文本行、tblNew As Table、newRow As Row
设置fso=CreateObject(“Scripting.FileSystemObject”)
cont=0
如果cont=0,则
'呼叫Gestosit(“Pwd”)
'Selection.Find.Execute FindText:=(“[Pwd]”)
设置tblNew=ActiveDocument.Tables.Add(范围:=Selection.Range,NumRows:=1,NumColumns:=_
3,DefaultTableBehavior:=wdWord9TableBehavior,AutoFitBehavior:=_
WD自动安装(固定)
用tblNew
“如果.风格”Tabla con cuadrícula“那么
'.Style=“Tabla con cuadrícula”
"完"
.ApplyStyleHeadingRows=真
.ApplyStyleLastRow=False
.ApplyStyleFirstColumn=True
.ApplyStyleLastColumn=False
.ApplyStyleRowBands=真
.ApplyStyleColumnBands=False
'.Style=“表1克拉拉-Énfasis 1”
以
带tblNew.Rows(1)
.Cells(1).Range.text=“Correo electroónico”
.Cells(2).Range.text=“Tipo de filterado”
.Cells(3).Range.text=“Plataforma”
以
如果结束
FileName=path&“Mails.txt”
设置MyFile=fso.OpenTextFile(文件名,用于读取)
当MyFile.AtEndOfStream为True时执行此操作
TextLine=MyFile.ReadLine
如果InStr(1,文本行,“:”)大于0,则
arrNames=VBA.split(文本行“:”)
设置rowNew=tblNew.Rows.Add
rowNew.Cells(1).Range.text=arrNames(0)
rowNew.Cells(2).Range.text=arrNames(1)
rowNew.Cells(3).Range.text=arrNames(2)
如果结束
环
我的文件。关闭
如果cont=0,则
pwdMails=False
其他的
pwdMails=True
如果结束
当您将查找
与选择
一起使用时,请务必在执行下一次查找之前添加选择。collapseend
,否则Word将仅在当前由一行组成的选择中搜索。。。此外,由于这是一个文本文件,请考虑使用FielSistMeObjult:当使用<代码>查找< /代码>使用<代码>选择< /代码>时,在执行下一个查找之前总是添加<代码> Selection.Collapse wdCollapseEnd <代码>,否则Word将只在现在由您的一行组成的选择中搜索…此外,由于这是一个文本文件,请考虑使用FielSistMeObjist:此错误出现:<代码>无效的过程调用或参数(错误5)< /C> > IratzarCarrassonBores,在哪里?它为我跑。请更准确地指出错误。哪一行?在代码的这一部分:Set MyFile=fso.OpenTextFile(FileName,ForReading)
在那里设置断点并调试.print文件名。我假设path&“Mails.txt”
没有生成正确的邮件完整路径。txt必须是阅读的。代码调整(第一行)出现此错误:过程调用或参数无效(错误5)
@iratzarcarrasonbores Where?它为我跑。请更准确地指出错误。哪一行?在代码的这一部分:Set MyFile=fso.OpenTextFile(FileName,ForReading)
在那里设置断点并调试.print文件名。我假设path&“Mails.txt”
没有生成正确的邮件完整路径。txt必须是阅读的。代码调整(第一行)
mail@mail.com
mail2@mail.com
mail3@mail.com:word1:word2
mail4@mail.com
mail5@mail.com:word3:word4
Const ForReading = 1
Dim arrNames
Dim cont As Integer
Dim fso, MyFile, FileName, TextLine, tblNew As Table, newRow As Row
Set fso = CreateObject("Scripting.FileSystemObject")
cont = 0
If cont = 0 Then
'Call gestOSINT("Pwd")
'Selection.Find.Execute FindText:=("[Pwd]")
Set tblNew = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=1, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed)
With tblNew
' If .Style <> "Tabla con cuadrícula" Then
' .Style = "Tabla con cuadrícula"
' End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
' .Style = "Tabla de lista 1 clara - Énfasis 1"
End With
With tblNew.Rows(1)
.Cells(1).Range.text = "Correo electrónico"
.Cells(2).Range.text = "Tipo de filtrado"
.Cells(3).Range.text = "Plataforma"
End With
End If
FileName = path & "Mails.txt"
Set MyFile = fso.OpenTextFile(FileName, ForReading)
Do While MyFile.AtEndOfStream <> True
TextLine = MyFile.ReadLine
If InStr(1, TextLine, ":") > 0 Then
arrNames = VBA.split(TextLine, ":")
Set rowNew = tblNew.Rows.Add
rowNew.Cells(1).Range.text = arrNames(0)
rowNew.Cells(2).Range.text = arrNames(1)
rowNew.Cells(3).Range.text = arrNames(2)
End If
Loop
MyFile.Close
If cont = 0 Then
pwdMails = False
Else
pwdMails = True
End If