以下は、Microsoft Wordドキュメントを開き、目次から特定のインデックスに移動する作業コードスニペットです。 filePath
はファイルパスであり、strTopic
はWord文書の目次にリンクする値です。
_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()
タイプの「関数」はありますか?
APISを使用して目的を達成できます。私は2つの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
[〜#〜] note [〜#〜]:開いたもの以外に開いている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
どうですか、
docWord.Activate
これにより、docWordオブジェクトに「設定」されたファイルが前面に表示されます。
編集:これをAccessでテストしましたが、Excelでは信頼できません。実行中のWordアプリケーションのインスタンスが複数ある場合は、APIを使用するのが最善の方法です。
ドキュメントを開いた(または追加した)と、ActiveWindowオブジェクト(obWord.ActivieWindow.Hwndなど)からSetForegroundWindowAPI関数に渡すHwndを取得できます。そうすれば、前面に表示する正しいWordインスタンスを検索する必要がありません。
AppActivate「MicrosoftWord」も使用できます
Microsoftのヘルプにアクセスしてください: ここ
AppActivateを使用するには、フォーカスするウィンドウの正確なタイトルが必要です。例えば。 「追加」として開かれたWord2013テンプレートの場合、AppActivate「Document1-Word」を使用する必要があります。
私はただ使用します。
FileAndPath = "C:\temp\Mydocument.docx"
ThisWorkbook.FollowHyperlink (FileAndPath)
ファイルがすでに開いている場合でも機能します。
私はここではまったく新しいので、この特定のケースについて約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ユーザーフォームでコードを使用すると、うまく機能します。言葉がその場で言葉を変えるのを見ることができます!!!!
これは毎回うまくいくようです。 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
見つかりました!
ActiveDocument.Activate 'might not be necessary
ActiveDocument.Windows.Application.WindowState = wdWindowStateMaximize
完璧に動作します。私はすでに取り組んでいた「アクティブドキュメント」を持っていました。
http://www.access-programmers.co.uk/forums/showthread.php?t=173871