EXCELのVBAでWORDが開いてあるかチェック

このQ&Aのポイント
  • EXCELのVBAを使用して特定のWORDが開いているかどうかをチェックしたいです。フォルダ内にあるWORD文章の有無を確認し、開かれているかどうかを判断したいです。
  • 特定のWORDが開かれている場合、ファイル名に「-$ABC.docx」という命名規則があります。そのファイルが存在するかどうかを確認して、WORDが使用中かどうかを判断したいです。
  • 読み取り属性などを使用してWORDが使用中かどうかを判断する方法も考えられますが、使用中の場合には10秒ごとにチェックし、使用されていない場合に初めてWORDを開くようにします。
回答を見る
  • ベストアンサー

EXCELのVBAでWORDが開いてあるかチェック

EXCELのVBAで特定のWORDが開いてあるかチェックしたいのですが、 あるフォルダにWORD文章があるかチェック      set appWord=GetObject(,"Word.Application")      Msgbox appWord.Documents.count なければエラー処理で終了 そのWORD文章の名前を取得      docFile=....    (仮にABC.docxという名前だとしますと) そのWORD文章が誰かが使っている(開いているか)チェックしたいのですが.. 1.使われているなら、-$ABC.docxが作られているはずだから    dir(-$ABC.docx)として、あれば使われていると判断したいのですが、    実験するとdir(-$ABC.docx)は、使われて実際にそのファイルがあっても    falseになってしまいます。dir関数でなくてもいいので、このファイルの    有無を調べる方法はないでしょうか? 2.その他、読み取り属性とかをみて判断する方法はないでしょうか?    ただし、使われている場合は、10秒ごとにチェックをいれて、    使われていない場合に、初めて開くので、エラー処理で逃げるのは    ダメなのですが。

  • USB99
  • お礼率41% (85/206)

質問者が選んだベストアンサー

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

“~$”ではじまるファイル名は、隠しファイルですので、Dirで調べるとき、“, vbHidden”「Dir("~$C.docx", vbHidden)」で調べなければなりません。 なお、元ファイル名が「ABC.docx」の場合、調べる隠しファイルは、「~$C.docx」です。 (分かっておられるとは思いますが…)

USB99
質問者

お礼

Dirにそんなoptionがあるのは知りませんでした。ありがとうございました。

関連するQ&A

  • EXCELからWORDの文章を取得

    set WD=GetObject(,"Word.Appllication") para1=Wd.activedocument.Paragraphs(1).Range.Sentences(1).text で、無事、activeなWordの文章は取れるのですが、 実際にあり、開いているWord文章(D:\aabbcc.docx)を処理しようと set WD=GetObject("D:\aabbcc.docx") para1=Wd.activedocument.Paragraphs(1).Range.Sentences(1).text とするとエラーになります。 どうやったら、取得できるでしょうか?

  • Excelから、Word起動 マクロ

    ExcelからWord起動のマクロを以下のように記述しました。 (1)Wordを起動、Word閉じるメッセージが出る (2)2回目Wordを閉じて、タスクマネージャに無い状態でも、Word閉じるメッセージが出る   GetObjectの戻り値が、Nothingにならない。 原因は、何でしょうか? Dim WdApp As Word.Application On Error Resume Next Set WdApp = GetObject(, "Word.Application") On Error GoTo 0 If WdApp Is Nothing Then Set WdApp = CreateObject("Word.Application") Else MsgBox "Wordを終了後に起動してください。", vbExclamation End If

  • wordで・・・

    ワードで制作した文章をデスクトップに保存して、そのファイルを開こうとすると 「○○docxが見つかりません 名前を正しく入力したか確認してからやり直してください」と警告が出ます。ワードは2007です。 ワードのショートカットは普通に開けるのですが、保存したファイルを開こうとするとこの警告が出ます。 この警告が出ないようにするにはどうしたらいいでしょうか? OSはVISTAです。

  • EXCEL VBAのDir関数について

    ファイルサーバー上にあるEXCELファイルのVBAで 新規にファイルを作成する際にDIR関数で 同名ファイルの有無チェックを作成したいと考えています。 しかし以下のような処理で行うとチェックするフォルダが My documentsになってしまいファイルの有無チェックが うまくいきません。どのように書けば良いのでしょうか? ご教授ください。よろしくお願いします。 (情報不足でしたらご指摘ください。補足いたします) ChDir "\\サーバー\フォルダ\サブフォルダ" If(""=Dir(ファイル名))then '同名ファイル無 ファイルを保存する処理 Else msgbox "同名ファイルがあります" Endif 環境: サーバー  :WinNT4.0 クライアント:Win98SE or WinNT4.0 EXCEL2000 LAN接続(同一ドメイン)

  • AccessからWordの差し込み印刷文書を印刷するVBAについて教えてください

    Access初心者です。 使用バージョンは、Access・Wordともに2007です。 Accessのクエリー/テーブルをWord文書に差し込み、Accessから起動してその差し込み文書を印刷したいのですが、うまくいきません。 Getobjectを使ってWordの差し込み文書テストを印刷する以下のようなプロシジャを作成しました。 予め、手動でWordを起動してから、このプロシジャを実行すると、文書『テスト』を開く前に「次の文書を開くと次のコマンドが実行されます。Select*fromテーブル名 データベースのデータが文書に挿入されます続行しますか?」のメッセージが表示されて応答確認が来るのですが、Wordを起動せずに実行すると、上記のメッセージは表示されず、テーブル内のデータに更新がかかっているにもかかわらず、上記メッセージで「いいえ」と応答したのと同様の状態で印刷されます。 はたして、こんなプロシジャでよいのか、使用方法が間違っているのかすら見当がつきません。どなたかアドバイスをお願いいたします。 (作成したプロシジャ) On Error GoTo エラー発生 Dim WordFilePass As String WordFilePass = "C:\Users\User1\Documents\テスト.docx" Dim MyWord As Word.Application Set MyWord = GetObject(, "Word.Application") MyWord.Visible = True MyWord.Documents.Open FileName:=WordFilePass MyWord.ActiveDocument.PrintOut MyWord.Application.Quit Set MyWord = Nothing エラー発生: If Err.Number = 429 Then Set MyWord = CreateObject("Word.Application") Resume Next Else MsgBox "エラーNo : " & Err.Number & vbNewLine & vbNewLine & _ "エラー内容 : " & Err.Description End If

  • 既に開いているエクセルを閉じるには?

    既に該当のファイルが開いているのなら閉じたいのですが xlBook.Quitだとエラーになります。 Sub test1() Dim xlApp As Excel.Application Dim xlBook As Workbook Dim FileName As String FileName = "C:\test.xlsm" Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安 Set xlBook = xlApp.Workbooks.Open(FileName) If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら MsgBox "既にファイルが開いているので閉じます。" xlBook.Quit 'エラー 438 End If xlApp.Quit 'これって何のために必要? Set xlBook = Nothing 'ココを通り過ぎるのにすごく時間がかかる。 Set xlApp = Nothing End Sub と言うコードを作りました。 xlBook.Quitがダメならどのコードを使えばいいでしょう? また、 GetObject("", "Excel.Application") と言う開き方でいいのでしょうか? あと、 xlApp.Quit は何のために必要なのでしょう? タスクマネージーのプロセスを見ると、 Set xlApp = GetObject("", "Excel.Application") を通る時に新しいEXCEL.EXEが作成され、 Set xlApp = Nothing を通り過ぎる時に、そのEXCEL.EXEが消えます。 だから xlApp.Quit は不要ですか?

  • EXCEL VBA ファイルが開かれているかチェックする処理

    ファイルを開く処理の前に、対象ファイルが開かれているかチェックして、開かれていたらエラーを表示する処理を以下のように記述したのですが、対象ファイルが開かれていないのにエラーになってしまいます。 エラーコードは『75』と表示されるのですが、ヘルプを見たり調べてみましたが、なぜエラーとなるのかが分かりません。 どなたか教えて下さい。宜しくお願いします。 ************************************************************* Public Path As String Public Fmei1 As String Public Full1 As String Public Error As String Private Sub CommandButton1_Click()   Path = "\\ディレクトリ1-1\ディレクトリ1-2\ディレクトリ1-3"   Fmei1 = "ファイル.xls"   Full1 = Path & "\" & Fmei1   Fopn End Sub Sub Fopn()   On Error Resume Next   Name Full1 As Full1   If Err.Number Then(←ここでエラーコード『75』となってしまいます)     Error = MsgBox("『ファイル.xls』を閉じて下さい。", _     vbCritical, "処理中断")     Err.Clear     End   Else     Workbooks.Open Filename:=Path & "\" & Fmei1   End If End Sub

  • VBAのDoLoopでファイルがあるかチェック

    VBA超初心者なりに記述したのですが、どうしたらいいのかわからないのでお助けください。 例えば以下のような一定の命名規則のファイルが、r:\testに複数あります。 0123-20140301-abcd.txt 0124-20140302-efgh.txt xxxx-20140301.csv xxxx-20140302.csv 「通し番号4桁-日付8桁-4桁(不定).txt」に対応する「xxxx(固定)-日付8桁.csv」のファイルがあるかチェックしたいだけなのですが、以下の記述では一番古い日付の1個しかチェックしてくれません。 ''''''''''''''''''''''''''''''''''''''''''''''''''  Dim buf As String  Dim cnt As Long  buf = Dir("r:\test\????-20*.txt") Do While buf <> ""  If Dir("r:\test\xxxx-" & Mid(buf, 6, 8) & ".csv") <> "" Then   Call MsgBox(buf & "が存在します")  End If  cnt = cnt + 1  buf = Dir() Loop   Call MsgBox(cnt & "個のファイルをチェック済み") '''''''''''''''''''''''''''''''''''''''''''''''''' 「xxxx-20140301.csv」が存在しない場合は「1個のファイルをチェック済み」と出て終わります。 本当は2個のファイルをチェックしてほしいのです。 なお、実際にファイルが何個あるかはその時々なので、いつでも使えるようにForNextではなくDoLoopを選びました。 If~Endifがなければ「2個のファイルをチェック済み」と出るので、その部分の記述が怪しいとは思うのですが。 なお、自宅のPCにはExcelがないので、VB2010Expressを入れて再現してみました。 msgboxの記述方法が違うくらいで、後は職場で悩んでいた内容そのままです。 どうぞよろしくお願いします。

  • Word_VBA 拡張子手前までのファイル名の取得

    こんにちは。VBA全般初心者です。Wordに対していくつかの処理後、元ファイルに日付(年月)をつけて別保存というマクロを作ろうとしています。現在下記で作成中ですが、これだと元ファイルの.docxもファイル名として認識されており、ABC.docx → ABC.docx.2023_05.docxと保存されます。 ABC2023_05.docx にしたいです。 Sub ファイル名取得して保存() Dim タイプ As Variant Dim 区切り As String Dim ドット位置 As Integer Dim 日付 As String Dim ファイル名 As String Dim タイトル As String '拡張子を定義 タイプ = ActiveDocument.name 区切り = "." ドット位置 = Len(タイプ) - (InStrRev(タイプ, 区切り)) タイプ = Right(タイプ, ドット位置 + 1) 日付 = Format(Date, "yyyy_mm") タイトル = ActiveDocument ファイル名 = Application.PathSeparator & タイトル & 日付 & タイプ With ActiveDocument .SaveAs FileName:=.Path & ファイル名 End With End Sub

  • Wordが使えない

    Word docxファイルを開こうとしたところワードパッドになってしまって文章がきちんと表示されません。ドライバーの更新と何か関係があるのでしょうか?

専門家に質問してみよう