web-dev-qa-db-ja.com

Word文書を開いて前面に表示

以下は、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()タイプの「関数」はありますか?

7
RossC

APISを使用して目的を達成できます。私は2つのAPIを使用しています SetForegroundWindowFindWindow

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
11
Siddharth Rout

どうですか、

docWord.Activate

これにより、docWordオブジェクトに「設定」されたファイルが前面に表示されます。

編集:これをAccessでテストしましたが、Excelでは信頼できません。実行中のWordアプリケーションのインスタンスが複数ある場合は、APIを使用するのが最善の方法です。

5
PaulFrancis

ドキュメントを開いた(または追加した)と、ActiveWindowオブジェクト(obWord.ActivieWindow.Hwndなど)からSetForegroundWindowAPI関数に渡すHwndを取得できます。そうすれば、前面に表示する正しいWordインスタンスを検索する必要がありません。

3
John0987

AppActivate「MicrosoftWord」も使用できます


Microsoftのヘルプにアクセスしてください: ここ

AppActivateを使用するには、フォーカスするウィンドウの正確なタイトルが必要です。例えば。 「追加」として開かれたWord2013テンプレートの場合、AppActivate「Document1-Word」を使用する必要があります。

私はただ使用します。

FileAndPath = "C:\temp\Mydocument.docx"
ThisWorkbook.FollowHyperlink (FileAndPath)

ファイルがすでに開いている場合でも機能します。

0
Nibby

私はここではまったく新しいので、この特定のケースについて約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ユーザーフォームでコードを使用すると、うまく機能します。言葉がその場で言葉を変えるのを見ることができます!!!!

0
Alex Silva

これは毎回うまくいくようです。 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
0
RealEstateMan

見つかりました!

ActiveDocument.Activate 'might not be necessary
ActiveDocument.Windows.Application.WindowState = wdWindowStateMaximize

完璧に動作します。私はすでに取り組んでいた「アクティブドキュメント」を持っていました。

http://www.access-programmers.co.uk/forums/showthread.php?t=173871

0
OGERWOLF