标题2文本与excel:VBA中的完全相同文本不匹配

标题2文本与excel:VBA中的完全相同文本不匹配,vba,excel,compiler-errors,ms-word,Vba,Excel,Compiler Errors,Ms Word,我正在创建一个项目,该项目允许用户在excel中创建任务列表,然后将用户创建的任务文本与预先制作的word文档中的第二个标题文本(标题2)进行比较。我能够获取第二个标题文本并将其保存到数组中,然后获取用户任务列表并将其保存到数组中。然后,我尝试使用函数查看程序中的任务文本(第二个标题)是否在用户任务列表中 If IsError(Application.Match(ProgArray(x), TaskArray, 0)) Then 'Find within word doc

我正在创建一个项目,该项目允许用户在excel中创建任务列表,然后将用户创建的任务文本与预先制作的word文档中的第二个标题文本(标题2)进行比较。我能够获取第二个标题文本并将其保存到数组中,然后获取用户任务列表并将其保存到数组中。然后,我尝试使用函数查看程序中的任务文本(第二个标题)是否在用户任务列表中

    If IsError(Application.Match(ProgArray(x), TaskArray, 0)) Then
        'Find within word document and highlight red
    End if
我遇到的问题是,这总是返回一个错误,因为出于某种原因,即使内置的监视屏幕调试器不这样说,word文档中的文本并不等于excel工作表中的完全相同的文本

起初,我使用一个比较文本软件来确定word中标题的文本实际上可能复制了一行额外的内容。 说明图片:

但后来我尝试修剪,并检查标题文本是否有换行符

    If Right$(StrFound, 2) = vbCrLf Or Right$(StrFound, 2) = vbNewLine Then
也没有用,因为这个if语句从未触发过

我的问题是,从word文档中提取文本是否也会提取一些我刚刚丢失的隐藏值,如果是,有什么方法可以解决这个问题吗?谢谢你,也很抱歉看到了文字墙

最后,这里是我的完整代码:(它并不漂亮,因为我现在只是为了功能)

“子检查头()
Dim blnFound作为布尔值
作为字符串的Dim StrFound
尺寸x为整数,y为整数,z为整数
将任务总数设置为整数
Dim ProgArray(149)作为字符串
Dim TaskArray()作为字符串
Dim NotInArray()作为字符串
Dim NotInProg()作为字符串
作为对象的Dim appWd
将任务单调整为工作表
Set appWd=GetObject(,“Word.Application”)
设置wdFind=appWd.Selection.Find
设置任务表=工作表(“任务列表”)
'从Excel获取任务列表
TaskTotal=TaskSheet.Cells(TaskSheet.Rows.Count,1)。End(xlUp)。Row-1
以字符串形式重拨TaskArray(TaskTotal)
ReDim NotInProg(TaskTotal)作为字符串
以字符串形式重拨NotInArray(TaskTotal)
'将用户任务列表放入数组中进行比较-0到0用于测试
对于x=0到0'任务总计-1
TaskArray(x)=任务表.Cells(2+x,5).值“+”(“&任务表.Cells(2+x,1).值+”)_
&TaskSheet.Cells(2+x,3).Value+”:“&TaskSheet.Cells(2+x,4).Value+””
下一个x
x=0
y=0
'查找标题的所有实例
使用ActiveDocument.Range.Find
'.Text=“测试”
.Style=“标题2”
做
blnFound=.Execute
如果找到了,那么
'MsgBox.Parent.Text
StrFound=.Parent.Text
'StrFound=Right(StrFound,InStr(StrFound,“)”)”+1)
StrFound=CStr(StrFound)
任务单。单元格(2+x120)。值=StrFound
起初,我以为这也节省了一条新线路,但我无法摆脱它
如果右$(StrFound,2)=vbCrLf或右$(StrFound,2)=vbNewLine,则
z=1
如果结束
ProgArray(x)=任务单单元格(2+x120)
“斯特芬德
x=x+1
其他的
退出Do
如果结束
环
以
'比较列表是否在程序中
对于x=0到149
如果x
您的代码中有两个问题,解决方法如下:

  • 要删除新段落标记,我们需要以以下方式删除它:

    .Parent.SetRange .Parent.Start, .Parent.End - 1
    
    您需要将其放在以下内容之前:

    StrFound = .Parent.Text
    
  • 此外,在
    do…loop
    中的
    x=x+1
    之后添加
    .Parent.MoveEnd


  • 代码中有两个问题,解决方法如下:

  • 要删除新段落标记,我们需要以以下方式删除它:

    .Parent.SetRange .Parent.Start, .Parent.End - 1
    
    您需要将其放在以下内容之前:

    StrFound = .Parent.Text
    
  • 此外,在
    do…loop
    中的
    x=x+1
    之后添加
    .Parent.MoveEnd


  • 您是否尝试在Word中剪切找到范围的最后一个标记??试着把这一行:
    Parent.SetRange.Parent.Start、.Parent.End-1
    放在:
    StrFound=.Parent.Text
    The.Parent.Text确实是问题所在,您的输入实际上解决了新行问题,但现在我无法在工作表运行时循环查看它