Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10026 / 13644 ツリー ←次へ | 前へ→

【24149】ファイルが開かれているかを確認したいのですが。 pooh 05/4/13(水) 16:16 質問[未読]
【24150】Re:ファイルが開かれているかを確認したい... m2 05/4/13(水) 16:31 お礼[未読]
【24153】Re:ファイルが開かれているかを確認したい... pooh 05/4/13(水) 17:30 お礼[未読]
【24151】Re:ファイルが開かれているかを確認したい... Kein 05/4/13(水) 17:13 回答[未読]
【24152】Re:ファイルが開かれているかを確認したい... ウッシ 05/4/13(水) 17:21 回答[未読]
【24155】Re:ファイルが開かれているかを確認したい... pooh 05/4/13(水) 17:46 お礼[未読]
【24159】Re:ファイルが開かれているかを確認したい... ウッシ 05/4/13(水) 19:03 回答[未読]
【24154】Re:ファイルが開かれているかを確認したい... pooh 05/4/13(水) 17:37 お礼[未読]

【24149】ファイルが開かれているかを確認したいの...
質問  pooh  - 05/4/13(水) 16:16 -

引用なし
パスワード
   こんにちは。
Excel VBA初心者です。
基本的な質問になってしまうかもしれませんが是非、教えて頂きたいことが
あります。

ブックAにて入力した内容をブックBにコピーして保存する処理を
作成しているのですが、処理をする際にブックBが閉じていることを
前提にしたいと思っています。

その場合に、処理実行時にブックBが閉じている状態
(他の人に開かれていない状態)であることを確認したいのですが
確認方法はありますでしょうか。

お手数お掛けしますがお分かりになる方がいらっしゃるようでしたら
是非、教えてくださるようお願い致します。

【24150】Re:ファイルが開かれているかを確認した...
お礼  m2  - 05/4/13(水) 16:31 -

引用なし
パスワード
   こんちは

 どこかで有ったのですが、自分では使ったことが有りません。

Sub Sample()

Dim myChkBook As Workbook

  On Error GoTo ErrHdl
  Set myChkBook = Workbooks("Sample.xls")

  MsgBox "開かれています。"
  Exit Sub
  
ErrHdl:
  MsgBox "開かれていません。"

End Sub

【24151】Re:ファイルが開かれているかを確認した...
回答  Kein  - 05/4/13(水) 17:13 -

引用なし
パスワード
   >処理実行時にブックBが閉じている状態であることを確認
言葉のアヤかも知れませんが、確認してどうしようと言うのでしょーか ?
もし開いていたらいったん閉じる必要がありますか ? コピーしたい場合は
必ず開いておかないといけませんから「開いていればそのまま、開いてなかったら開く」
という書き方をしないと誤解を与えかねません。で、既に簡素なコードで出来る回答も
ついているので、あえて別のコードを提示することも無いかもしれませんが、いちおう
バカ丁寧にやるとして・・

Dim WB As Workbook
Dim Ck As Boolean

If WorkBooks.Count > 1 Then
  For Each WB In Workbooks
   If WB.Name = "BookB.xls" Then
     Ck = True: Exit For
   End If
  Next
  If Ck = False Then
   Workbooks.Open ThisWorkbook.Path & "\BookB.xls"
  End If
Else
  Workbooks.Open ThisWorkbook.Path & "\BookB.xls"
End If

こんなコードでもイケルと思います。

【24152】Re:ファイルが開かれているかを確認した...
回答  ウッシ  - 05/4/13(水) 17:21 -

引用なし
パスワード
   こんにちは

こっちの意味かと思ったのですが?

Sub test()
  Dim wb As Workbook
  Dim mPath As String
  Dim cPath As String
  
  mPath = ThisWorkbook.Path & "\B.xls"
  cPath = ThisWorkbook.Path & "\存在しない名前.xls"
  If Len(Dir(cPath)) = 0 Then
    MsgBox "使われている名前です。", 64
    Exit Sub
  End If
  On Error Resume Next
  Name mPath As cPath
  If Err Then
    MsgBox "使用中", 64
  Else
    On Error GoTo 0
    Set wb = Workbooks.Open(cPath)
    'ブックAにて入力した内容を「存在しない名前.xls」にコピー
    '「存在しない名前.xls」を保存終了してから元の名前「B.xls」に戻す。
    Name cPath As mPath
  End If
    
End Sub

【24153】Re:ファイルが開かれているかを確認した...
お礼  pooh  - 05/4/13(水) 17:30 -

引用なし
パスワード
   m2さん

早速のご回答有難うございます。
ちなみに、このブックBがサーバ上にある場合に
ブックBを認識させることは可能でしょうか。

度々で申し訳ありませんが、もしお分かりになるようでしたら
教えて下さるようお願い致します。

【24154】Re:ファイルが開かれているかを確認した...
お礼  pooh  - 05/4/13(水) 17:37 -

引用なし
パスワード
   Kein さんご回答有難うございます。
説明が不足していて申し訳ございません。

ブックBにつきましては他の方が参照する為のブックでもあるので
マクロ実行時にブックBが開いていると保存処理で
問題が発生すると思いました。

ですので、ブックBが開いている状態であれば
メッセージボックスにて「ブックBは現在開かれています」
といったメッセージを表示させて処理を終了したいと思っています。

そして更に説明が不足しておりましたが、ブックBはサーバ上にあり
ブックAは各人のPCから実行するイメージです。
(もちろんPCとサーバはネットワークで繋がっております)

【24155】Re:ファイルが開かれているかを確認した...
お礼  pooh  - 05/4/13(水) 17:46 -

引用なし
パスワード
   ウッシ さんご回答有難うございます。

私のイメージとしてはブックAからダイレクトにブックBに
記述内容を移したいと思っています。
(説明が悪くて申し訳ありません。)

mPath = ThisWorkbook.Path & "\B.xls"
という記述を使えばサーバ上のブックでも
指定できそうですね。
(On Error Resume Nextの意味はわからないので調べます)

【24159】Re:ファイルが開かれているかを確認した...
回答  ウッシ  - 05/4/13(水) 19:03 -

引用なし
パスワード
   ▼pooh さん:
>ウッシ さんご回答有難うございます。
>
>私のイメージとしてはブックAからダイレクトにブックBに
>記述内容を移したいと思っています。
>(説明が悪くて申し訳ありません。)
>
>mPath = ThisWorkbook.Path & "\B.xls"
>という記述を使えばサーバ上のブックでも
>指定できそうですね。
>(On Error Resume Nextの意味はわからないので調べます)

こんばんは

名前が変更出来るかどうかで開かれているかどうかを判定してますので、

Sub test()
  Dim wb As Workbook
  Dim mPath As String
  Dim cPath As String
 
  mPath = ThisWorkbook.Path & "\B.xls"
  cPath = ThisWorkbook.Path & "\存在しない名前.xls"
  If Len(Dir(cPath)) = 0 Then
    MsgBox "使われている名前です。", 64
    Exit Sub
  End If
  On Error Resume Next
  Name mPath As cPath
  If Err Then
    MsgBox "使用中", 64
  Else
    On Error GoTo 0
    Name cPath As mPath
    Set wb = Workbooks.Open(mPath)
    'ブックAにて入力した内容を「存在しない名前.xls」にコピー
    '「存在しない名前.xls」を保存終了してから元の名前「B.xls」に戻す。
  End If
  
End Sub

と変更すれば「ダイレクトにブックBに記述内容を移す」事になるのですが
>    Name cPath As mPath
>    Set wb = Workbooks.Open(mPath)
この二つの処理の間に偶然開かれる事も有り得ますので・・・

10026 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free