VBA Word宏转到breakmode

时间:2014-08-26 12:38:32

标签: vba excel-vba word-vba excel

我尝试使用vba从excel打开两个文档,并从这个特定的excel文件中调用一个word宏。

宏在Word中工作正常,我也可以打开文档并启动单词宏。但是当从一个文档切换到另一个文档时,单词宏进入中断模式(当我从Word而不是Excel运行时不会发生这种情况)。

我使用excel中的以下代码:

Set wordApp = CreateObject("Word.Application")
worddoc = "H:\Word Dummy's\Dummy.docm"
wordApp.Documents.Open worddoc
wordApp.Visible = True

wordApp.Run macroname:="update_dummy", varg1:=client, varg2:=m_ultimo, varg3:=y

在单词中,我有一个sub,其中包含在breakets和以下代码之间定义的参数:

worddoc2 = "H:\Word Dummy's\texts.docx"

Word.Application.Activate
Documents.Open worddoc2, ReadOnly:=True
ThisDocument.Activate
Set bmks = ThisDocument.Bookmarks

任何人都可以告诉我为什么它不能从excel运行以及我如何解决这个问题?

提前致谢。

3 个答案:

答案 0 :(得分:1)

经过大量搜索,我终于找到了答案 我需要补充一下:

application.EnableEvents=false

到excel宏。

就是这样。现在它有效。

答案 1 :(得分:0)

我的完整代码很大(excel中的宏也会打开另外两个工作簿并在其中运行宏)。这部分代码现在正在工作(所以我把它留了出来),但我只是想添加它打开一个worddoc并在其中添加特定文本的部分,具体取决于在excel用户表单中选择的客户端。但为了让您更好地了解我的代码是什么样的,这是在excel中(客户端由另一个模块中的userform定义):

Sub open_models (client as string)

Application.DisplayStatusBar = True

‘determine datatypes
Dim m_integer As Integer
Dim m_ultimo As String
Dim m_primo As String

Dim y As String
Dim y_integer As Integer
Dim y_old As String
Dim y_last As String

Dim wordApp As Object
Dim worddoc As String

'Determine current month and year and previous
m_integer = Format(Now, "mm")
y_integer = Format(Now, "yyyy")

If m_integer <= 9 Then
    m_ultimo = "0" & m_integer - 1
    m_primo = "0" & m_integer - 2
 Else
    m_ultimo = m_integer - 1
    m_primo = m_integer - 2
End If

If m_integer = 1 Then
    y = y_integer - 1
  Else
    y = y_integer
End If

On Error Resume Next

'open word dummy
Set wordApp = CreateObject("Word.Application")
worddoc = "H:\RAPORTAG\" & y & "\" & y & m_ultimo & "\Dummy.docm"

wordApp.Documents.Open worddoc
wordApp.Visible = True

wordApp.Run macroname:="update_dummy", varg1:=client, varg2:=m_ultimo, varg3:=y, varg4:= worddoc)

On Error GoTo 0

ThisWorkbook.Activate

'reset statusbar and close this workbook
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True

ThisWorkbook.Close False

End Sub

这是我正在使用的单词中的代码:

Sub update_dummy(client As String, m_ultimo As String, y As String, worddoc as string)

Dim wordapp As Object
Dim rngStart As Range
Dim rngEnd As Range
Dim worddoc As String
Dim worddoc2 As String
Dim dekkingsgraad As String
Dim bmks As Bookmarks
Dim bmRange As Range
Dim rng As Range
Dim i As Boolean

On Error Resume Next

worddoc2 = "H:\RAPORTAG\" & y & "\" & y & m_ultimo & "\dummytexts.docx"

'open other word
Documents.Open worddoc2, ReadOnly:=True
Documents(worddoc).Activate
Set bmks = Documents(worddoc).Bookmarks

'management summary
If client <> "PMT" Then
i = True
Set rngStart = Documents(worddoc2).Bookmarks("bn0_1_start").Range
Set rngEnd = Documents(worddoc2).Bookmarks("bn0_1_end").Range
End If

If i = True Then
    Set rng = Documents(worddoc2).Range(rngStart.Start, rngEnd.End)
    rng.Copy

    Set bmRange = Documents(worddoc).Bookmarks("bmManagementsummary").Range
    bmRange.PasteAndFormat (wdPasteDefault)
End If

i = False

On Error GoTo 0

End Sub

我还有20个已定义的书签,但它们的代码完全相同。

答案 2 :(得分:0)

我之前已经看过几次并解决了这个问题,我找到的解决方案很奇怪。

  
      
  1. 将所有代码复制粘贴到文本中   编辑,1个单词,1个表示excel

  2.   
  3. 删除word或excel中的所有宏或更好,只需创建   新文件。

  4.   
  5. 从文本编辑器中将所有代码粘贴到word / excel中。

  6.   

我在Excel和Access中肯定有过3到4次。特别是如果你以前在那个地方有一个断点。

这听起来很愚蠢,但试试看看是否有效,这让我免于精神错乱几次。

相关问题