【问题标题】:VBA code keeps skipping my Find.Execute CodeVBA 代码不断跳过我的 Find.Execute 代码
【发布时间】:2015-08-05 16:41:48
【问题描述】:

我是 VBA 的新手,我正在编写代码,通过查找关键字并替换它们来将数据从 Excel 复制到 Word。我的问题是代码创建了我要复制的文档的新版本,但随后忽略了我的代码来查找和替换。我认为我的问题在于我的声明,但我真的不知道。这是我的代码:

Sub CopyDatatoWord()
Dim wb As Workbook
Dim ws As Worksheet

Dim wdDoc As Word.Documents
Dim wdApp As Word.Application
Dim myrange As Range

Set wb = Workbooks("Create Health Fair Forms.xlsm")
Set ws = wb.Worksheets("Data")

Set wdApp = CreateObject("Word.Application")
Set sel = wdApp.Selection

MkDir ("" & ws.Range("FilePath").Value & "")

wdApp.DisplayAlerts = wdAlertsNone
wdApp.Documents.Open("\\hfd\repository\Screenings and Health Fair Forms\Basic Health Fair Templates\013 - CW - Template.docm", Visible = True, ReadOnly = False).SaveAs ("" & ws.Range("FilePath").Value & "\CW.docm")
wdApp.DisplayAlerts = wdAlertsAll
wdApp.Visible = True

'Code works fine until this point, and then seems to ignore everything past this point.

For i = 13 To 30

With wdApp.Selection.Find
 .Text = "&Excel.Application.ws.Cells(i, 40).Value&"
 .Forward = True
 .Wrap = wdFindContinue
 .MatchWholeWord = True
 .Format = False
 .Replacement.Text = "&Excel.Application.ws.Cells(i, 39).Value&"
 .Execute
 End With

Next i
End Sub

我在网上看到其他帖子有人成功创建了像我这样的代码,我一直在尝试重新创建它,但到目前为止都失败了。

任何帮助将不胜感激。

【问题讨论】:

  • 当您浏览宏时会发生什么?在 VBA 中,将鼠标光标放在代码中的任意位置,然后按 F8。在wdApp.Visible = True 之后,会发生什么?它只是跳转到End Sub吗?
  • 您的 Find 正在寻找字符串“Excel.Application.ws.Cells(i, 40).Value&”,这不是您想要的。尝试删除引号和 & 号。
  • 我已经完成了。它循环查找代码,但不执行任何操作。从那以后我一直在玩它,只是告诉它找到一个字符串(“名称”)并用另一个字符串替换它。它在我的文档中找到“名称”,但不会替换它。 (之前它什么都没找到)。
  • 另外,对代码进行了一项更改,我在查找代码的末尾添加了 Content.Find.Execute。我本来打算删除 Content.Find,但在粘贴代码之前错过了它。

标签: excel vba replace ms-word find


【解决方案1】:

很臭的代码

 .Text = "&Excel.Application.ws.Cells(i, 40).Value&"
 .Replacement.Text = "&Excel.Application.ws.Cells(i, 39).Value&"

应该是这样的

 .Text = ws.Cells(i, 40).Value
 .Replacement.Text = ws.Cells(i, 39).Value

此外,当我录制宏以查找替换时,它会给出以下代码 标记为 '

Selection.Find.ClearFormatting    '<<<<<<<<
Selection.Find.Replacement.ClearFormatting   '<<<<<<<<
With Selection.Find
    .Text = "d"
    .Replacement.Text = "XXXX"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False  '<<<<<<<<
    .MatchSoundsLike = False  '<<<<<<<<
    .MatchAllWordForms = False  '<<<<<<<<
End With
Selection.Find.Execute Replace:=wdReplaceAll  '<<<<<<<<

【讨论】:

  • 这有帮助,它现在可以找到字符串,但不会替换它们。如果我单击通过代码只是继续在文档中移动,找到每个字符串,但不做任何其他事情。
  • 请勾选我的答案并使用向上箭头点赞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2011-06-07
  • 2014-06-24
相关资源
最近更新 更多