Vba 我的Word宏不';我找不到第二个词

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"

我想在Microsoft Word中创建一个VBA脚本,以便在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