いつもお世話になっております。
遣りたいことは
book1
book2
があります。
book1には
Application.Run "'C:\Users\user\OneDrive\デスクトップ\B2.xlsm'!fe"
book2 には
Sub fe()
If Application.Wait(Now + TimeValue("0:00:10")) Then
Workbooks("B2.xlsm").Close
End If
End Sub
が記述されています。
book2 にのほうに
book2がひらかれていなければ、なにもしないという
条件をつけたいのですが、わかる方おしえてくれませんでしょうか
No.1ベストアンサー
- 回答日時:
こんにちは。
On Error Resume Next
Dim book As Workbook
Set book =Workbooks("ブック名")
On Error Goto 0
If book is Nothing Then
ブックは開いていない
End If
みたいに参照でエラーになるかで判定するとか。
または、そのブックのディレクトリーに∽$で始まるアーカイブ、隠し属性の一時ファイルが存在してるかチェックとかでもできそうな気がします。
No.6
- 回答日時:
#5
またやってしまった
#5のコードを試す場合は Exit Function の上に閉じるコードと解放コードを 必ず 加えてください。。。
task_check = True
WD.Quit
Set WD = Nothing
Exit Function
タスクと書いてしまいましたが、Wordが取得するプロセスコレクションです
すみません。
No.5
- 回答日時:
こんばんは
すでに#2様が当回しに回答は出されていますが
明確に出来ないとの回答が無いので改めて
>book2 にのほうに
これは、Application.Runなので閉じていても開かれるので・・・無理です。
従って、book1でApplication.Run実行前に検証し分岐処理するしかないです
少なくとも、私は知りません
開かれているかどうかを検証する方法はすでに回答が出ておりますしご存知かもしれませんが色々あります。
一般的には開かれているブック名を調べる方法
あとは、開かれているブックに対して出来ないメソッドや逆に閉じてるブックにはできないメソッドでエラーを返す方法、変わり種ではタスクを確認する方法などです。
で、一応、反則ギリ?の方法(環境によっては処理時間が大きい)
Sub sample()
Dim bkname As String
bkname = "B2.xlsm"
If task_check(bkname) Then Application.Run "'C:\Users\user\OneDrive\デスクトップ\" & bkname & "'!fe"
End Sub
Function task_check(bkname As String) As Boolean
Dim WD, task
Set WD = CreateObject("Word.Application")
For Each task In WD.Tasks 'Word VBA Tasksコレクション
If task.Visible = True Then
If task.Name = bkname & " - Excel" Then
task_check = True
Exit Function
End If
End If
Next
WD.Quit
Set WD = Nothing
End Function
Wordが必須
値は B2.xlsm - Excel で良かったと思いますが違っていたら
ごめんなさい。
No.4
- 回答日時:
良くわかりませんが、、
book1 = B1.xlsm
book2 = B2.xlsm
と前提します。
B2.xlsm がオープンしてなければ Book2 の マクロ fe() を
実行させないということかな。
単純ブック名だと被る可能性がある気がするのでパス付きで
調べてます。
' Book1側
Sub testProc()
Dim filename As String: filename = "C:\temp\B2.xlsm"
Dim book As Workbook, check As Boolean
'
For Each book In Workbooks
If StrComp(book.FullName, filename, vbTextCompare) = 0 Then
check = True
Exit For
End If
Next
'
If check Then
Application.Run "'" & filename & "'!fe"
Else
MsgBox filename & "が開いていない"
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ワイルドカード「*」を使うとうまくいかないマクロの添削をお願いします 3 2022/03/26 09:39
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) EXCELのセル相互同期用のVBAでの不具合 3 2022/08/10 11:44
- 数学 確率について 8 2023/08/25 04:21
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 12:00
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA シートをコピーする際に Co...
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
VBA コードを実行すると画面が...
-
エクセルVBAが途中で止まります
-
VBS Bookを閉じるコード
-
【VBA】全シートの計算式を全て...
-
エクセルのマクロを使ってメー...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】インデックスが有...
-
ユーザーフォームの切り替えに...
-
VBA 別ブックからコピペしたい...
-
vbaでvbaProjectのパスワード解...
-
VBA 実行時エラー 2147024893
-
【前回の続き続きです、ご教示...
-
【困っています2】VBA 追加処...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロで最終行を取得したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報
いつもお世話になっております。
Sub fe()
If Application.Wait(Now + TimeValue("0:00:10")) Then
Workbooks("B2.xlsm").Close
End If
End Sub
実をいいますと、これを実行するとWorkbooks("B2.xlsm")が
一度開いて閉じてしまいます。
それが、よくなく質問をいたしました。
なかなか いいコードないでしょうか
以下のように実行しました。
アプリケーション定義エラーとなりました。
おしえてくれませんでしょうか
Sub te1()
Dim flag As Boolean
Dim wb As Workbook
flag = False
For Each wb In Workbooks
If wb.Name = "B2.xlsm" Then flag = True: Exit For
Next wb
If flag Then Workbooks("B2.xlsm").Close Else MsgBox "開いていない"
End Sub