下面是一个(工作)代码片段,它打开一个Microsoft Word文档,并转到目录中的特定索引。 filePath
只是一个文件路径,strTopic
是一个链接到Word文档中ToC的值。
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set docWord = objWord.Documents.Open(fileName:=strPath, ReadOnly:=True)
docWord.Bookmarks(strTopic).Range.Select
但是,我需要将Word文档带到前台。
首先可以使用VBA吗?是否有toFront()
类型"功能"我可以用? AFAIK C#有app.ActiveWindow.Activate();
之类的东西,但我无法在vba中找到类似的东西。
答案 0 :(得分:10)
您可以使用APIS实现您想要的效果。我使用了两个API SetForegroundWindow和FindWindow
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) _
As Long
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) _
As Long
Sub Sample()
Dim objWord As Object, docWord As Object
Dim strPath As String, FileName As String
Dim hwnd As Long
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'~~> Change this to the relevant Filename and path
strPath = "C:\Users\Siddharth Rout\Desktop\Sample.docx"
'~~> Put the acutal file name here without the extension
FileName = "Sample"
Set docWord = objWord.Documents.Open(FileName:=strPath, ReadOnly:=True)
hwnd = FindWindow(vbNullString, FileName & " [Read-Only] - Microsoft Word")
If hwnd > 0 Then
SetForegroundWindow (hwnd)
End If
End Sub
注意:如果您确定除了打开的内容之外没有其他Word应用程序打开,那么您也可以使用它:)
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Sample()
Dim objWord As Object, docWord As Object
Dim strPath As String
Dim hwnd As Long
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'~~> Change this to the relevant Filename and path
strPath = "C:\Users\Siddharth Rout\Desktop\Sample.docx"
Set docWord = objWord.Documents.Open(FileName:=strPath, ReadOnly:=True)
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
End If
End Sub
答案 1 :(得分:5)
怎么样,
docWord.Activate
这应该将docWord对象的“Set”文件带到前台。
编辑:在Access上测试过,在Excel上安静不可靠。如果运行Word应用程序的多个实例,则使用API是最佳方法。答案 2 :(得分:1)
也可以使用AppActivate“Microsoft Word”
访问Microsoft帮助:here
使用AppActivate需要您想要关注的窗口的确切标题。例如。对于作为“添加”打开的单词2013模板,您将不得不使用AppActivate“Document1 - Word”
答案 3 :(得分:1)
一旦打开文档(或添加了一个文档),就可以从Httnd传递到ActiveWindow对象的SetForegroundWindow API函数(例如obWord.ActivieWindow.Hwnd)。这样,您就不需要搜索正确的Word实例。
答案 4 :(得分:0)
发现!
ActiveDocument.Activate 'might not be necessary
ActiveDocument.Windows.Application.WindowState = wdWindowStateMaximize
完美无瑕。我已经有了一个" activedocument"我正在努力。
http://www.access-programmers.co.uk/forums/showthread.php?t=173871
答案 5 :(得分:0)
这似乎每次都有效。 Word是否正在运行,多个文档是否打开。
OpenAlready:
On Error GoTo 0
With wrdApp
.Selection.Goto What:=1, Which:=2, Name:=PageNumber
.Visible = True
.Activate '<---seems to work well. regardless of number of Word docs open OR not open.
End With
Set wrdDoc = Nothing
Set wrdApp = Nothing
答案 6 :(得分:0)
我在这里很新,并且在对此特定案例进行了大约30分钟的研究后,我认为我可以在这里提出一些建议...
我在以下链接中找到:http://www.vbaexpress.com/forum/showthread.php?27589-bringing-Word-in-fornt-of-Excel这行代码: Application.ActivateMicrosoftApp xlMicrosoftWord 它将迫使Word出现在所有内容的前面,但是如果有打开的内容将创建一个新文档,所以我发现的是,如果您想打开某些内容然后将其放在最前面,请使用以下正弦值:
[...]
Application.ActivateMicrosoftApp xlMicrosoftWord
Word.Documents.Open(MyDocument)
[...]
一旦在vba中进行调试,代码将始终位于最前面,但是当将代码与excel vba用户格式一起使用时,效果很好!我可以看到单词立即改变了单词!!!!
答案 7 :(得分:0)
我只是用;
FileAndPath = "C:\temp\Mydocument.docx"
ThisWorkbook.FollowHyperlink (FileAndPath)
如果文件已经打开,它甚至可以工作。
答案 8 :(得分:0)
由于“.Activate”被多次评论,但至少对我来说,它是从 excel 中调用的,以便将其转换为 word 文档。 我必须解决最小化和最大化窗口的问题。 到目前为止,这对我来说效果很好:
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
wdApp.ScreenUpdating = True
Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\" & stWordDocument) 'update your path
wdDoc.Activate
ActiveDocument.ActiveWindow _
.WindowState = wdWindowStateMinimize
ActiveDocument.ActiveWindow _
.WindowState = wdWindowStateMaximize