Excel VBA質問箱 IV

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

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


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

【51091】既に開いています 多摩川 07/8/28(火) 10:28 質問[未読]
【51094】Re:既に開いています ぱっせんじゃー 07/8/28(火) 10:40 発言[未読]
【51102】Re:既に開いています 多摩川 07/8/28(火) 15:21 お礼[未読]

【51091】既に開いています
質問  多摩川  - 07/8/28(火) 10:28 -

引用なし
パスワード
   B2以降のB列にブック名のリストがあり,
A2以降のA列にそのブック名のパスをまとめたシートがあります。
ブック名が書いてあるセルをダブルクリックすると
そのブックが開くように以下のコードを作成しました。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Application.Intersect(Target, Range("B2:B65536")) Is Nothing Then Exit Sub
  If Target.Column = 2 Then
    ChDir ActiveCell.Offset(, -1)
    Workbooks.Open ActiveCell
  End If
  Cancel = True
End Sub

上記コードでは,既に開いているブックをもう一度開こうとしても,
特に何のメッセージもなくイベントが終了します。

しかし,開いたブックに保存が必要な何らかの操作を行った状態で,
ブックをもう一度開こうとした場合,
「***.xls は既に開いています。〜〜〜」とメッセージが出ます。

このメッセージを表示させたくないのですが,どのようにしたら良いのでしょうか?
On Error Resume Next を Open の前に加えてみたのですが,だめでした。

なお,メッセージに対して「いいえ」を選択すると,
「実行時エラー '1004':」がでます。
この回避方法も同時にご教示願えないでしょうか?

よろしくお願いします。

【51094】Re:既に開いています
発言  ぱっせんじゃー  - 07/8/28(火) 10:40 -

引用なし
パスワード
   指定のブックが既に開いているか判定するサンプルコードです。

Sub test()
Dim wb As Workbook
Dim wbpath As String
Dim wbmei As String
Dim hantei As Boolean
 wbpath = "C:\Documents and Settings\passe\デスクトップ\test.xls"
 wbmei = Dir(wbpath)
 hantei = True
 For Each wb In Workbooks
  If wb.Name = wbmei Then
   MsgBox "既に開いています。"
   hantei = False
   Exit For
  End If
 Next wb
 If hantei = True Then Workbooks.Open (wbpath)
End Sub

【51102】Re:既に開いています
お礼  多摩川  - 07/8/28(火) 15:21 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
いつも,回答いただきありがとうございます。

> For Each wb In Workbooks
なるほど,まずは開いているブックがあるかを調べることが重要なのですね!
メッセージ発生を前提として,その回避方法ばかり考えていました。

「実行時エラー '1004':」の回避方法ですが,
DisplayAlerts プロパティで解決することが出来ました。

これっ!っとこだわってしまうのは良くないのですね。
柔軟な発想が出来るよう精進します。
ありがとうございました。

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