VBA:从excel打开word

问题描述:

我无法从Excel宏(office xp)打开Word。如果我使用此代码,它将停止在行Set wdDoc = wordapp.Documents.Open(polozka.ShortPath)并且程序冻结。如果我使用Set wdDoc = GetObject(polozka.ShortPath)而不是这条线,计划在这里With wdDoc.Selection停止与“对象不支持此属性...”错误VBA:从excel打开word

Dim wordapp As Word.Application 
Dim wdDoc As Word.Document 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set files = fso.GetFolder("C:\path").Files  
Set wordapp = CreateObject("Word.Application") 
For Each polozka In files 
    Set wdDoc = wordapp.Documents.Open(polozka.ShortPath) 
    wordapp.Visible = True 
    With wdDoc.Selection 
     .HomeKey Unit:=6 
     .Find.Text = "Název (typ):" 
     .Find.Wrap = wdFindContinue 
     ... 
    End With 
    ... 
    wordapp.Quit 
    Set wordapp = Nothing  
Next 

你必须声明你的对象变量像下面

Dim Paragraphe As Object, WordApp As Object, WordDoc As Object 

并使用doc:

File= "D:\path" 
    'creationsession Word 
    Set WordApp = CreateObject("Word.Application") 
    'word ll be close to run 
    WordApp.Visible = False 
    'open the file .doc 
    Set WordDoc = WordApp.Documents.Open(File) 

和关闭的applcation

WordDoc.Close 
    WordApp.Quit 
    Set WordDoc = Nothing 
    Set WordApp = Nothing 

我希望他们能帮助你

+0

谢谢,现在我可以用第一种方式打开文档,但仍然程序在这里停止'With wdDoc.Selection' with“Object does not support this property or method”error – koubin 2013-05-09 07:38:37

+0

我找到了解决办法。将此行改为'用wdDoc.Selection'改为'用wordapp.Selection'解决它。但是我仍然不知道,为什么我不能使用'wdDoc'对象 – koubin 2013-05-09 15:27:13

Sub substitute() 
' 
' substitute Macro 
' 
' Note: In Excel VBA, in tools -> references: Enable Microsoft Word 12.0 0bject 
' 
Dim FindStr As String 
Dim ReplaceStr As String 
Dim path_src As String 
Dim path_dest As String 

' Define word object 
Dim WA As Object 

Dim cs As Worksheet 
Dim Idx As Integer 

' Data worksheet "Data" col A find text, Col B replace text 
Set cs = ActiveWorkbook.Worksheets("Data") 

Set WA = CreateObject("Word.Application") 

WA.Visible = True 

path_src = "C:\Temp\data.docx" 
path_dest = "C:\Temp\data_out.docx" 

WA.documents.Open (path_src) 

' Set word object active 
WA.Activate 

' Optional, use Idx to limit loop iterations 
Idx = 1 
Do While ((Len(cs.Cells(Idx, 1).Value) > 1) And (Idx < 100)) 
' 
    FindStr = cs.Cells(Idx, 1).Value 
    ReplaceStr = cs.Cells(Idx, 2).Value 
    With WA 
    .Selection.HomeKey Unit:=wdStory 
    .Selection.Find.ClearFormatting 
    .Selection.Find.Replacement.ClearFormatting 
    With .Selection.Find 
     .Text = FindStr 
     .Replacement.Text = ReplaceStr 
     .Forward = True 
     .Wrap = wdFindAsk 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 

    .Selection.Find.Execute Replace:=wdReplaceAll 
    End With 
    Idx = Idx + 1 
Loop 
WA.Application.ActiveDocument.SaveAs path_dest 
WA.documents.Close 

Set WA = Nothing 

End Sub 
+0

请正确格式化您的代码。 [阅读SO标记在线帮助](http://stackoverflow.com/help/formatting)。 – 2013-09-21 10:53:11

我用Excel不承认一个Word.Application指挥等字对象类似的问题。如果你想让这些对象被excel识别,你将需要在Visual Basic编辑器中选择Tools> References ...。当您选择引用时,将填充一个窗口,向下浏览列表,直至找到Microsoft Word x.0 Object Library。选中复选框,这将允许excel现在识别单词命令。您还可以更改该对象库的优先级以便下次更容易找到。