いつもお世話になっております。
おしえてくれませんでしょうか
下記のコードは
BBB.xlsmのエクセルを開き
wb.Worksheets("go").Cells(1, 1).Valueの値を
ThisWorkbook.Worksheets("Sheet5").Cells(1, 1).Valueに
書き込むコードです。
ここまではできましたが、
既にBBB.xlsmが開いていた場合
既に開いていますメッセージが表示表示され
エラーになります。
このエラーを表示させず、
下記のコードを実行して
BBB.xlsmを閉じて終了することは
できますでしょうか
わかる方おしえてくれませんでしょうか
ThisWorkbook.Worksheets("Sheet5").Cells(1, 1).Value = _
wb.Worksheets("go").Cells(1, 1).Value
Sub xlaaa()
Dim xlApp As New Application
Dim wb As Workbook
Dim str As String
str = "C:\Users\user\OneDrive\デスクトップ\BBB.xlsm"
Set wb = xlApp.Workbooks.Open(str)
ThisWorkbook.Worksheets("Sheet5").Cells(1, 1).Value = _
wb.Worksheets("go").Cells(1, 1).Value
wb.Close (False)
End Sub
No.3ベストアンサー
- 回答日時:
No2です
>バックグラウンドにエクセルが増殖していました。
>なんなんでしょうか。
以下は、推測になりますが・・
別のマクロかどうかは不明ですが、No1の2番目のように別にエクセルを立ち上げる処理を行っていませんか?
その際に、(No1にも書きましたが)後始末をしないままで終了すると、バックグラウンドでエクセルが立ち上がったままになります。
(エラーなどで終了処理をしていない場合も同様です。)
・・ということが起こっているのではないかと推測します。
No.2
- 回答日時:
No1です
>どこかまちがっいるんですが、わかりませんです
No1のコードも、当方がご提示のコード(の一部)をコピペしてしまったため、おかしな記述になっていました。
すみませんでした。
Dim str1 As String
Dim w As Workbook
Dim wb As Workbook
str1 = "C:\Users\user\OneDrive\デスクトップ\BBB.xlsm"
For Each w In Workbooks
If w.Name = "BBB.xlsm" Then Set wb = w: Exit For
Next w
If wb Is Nothing Then Set wb = Workbooks.Open(str1)
ThisWorkbook.Worksheets("Sheet5").Cells(1, 1).Value = _
wb.Worksheets("go").Cells(1, 1).Value
wb.Close
ではうまくいきませんか?
ちなみに、No1の最後に記した方法だと、
Const str1 = "'C:\Users\user\OneDrive\デスクトップ\[BBB.xlsm]go'!R1C1"
ThisWorkbook.Worksheets("Sheet5").Cells(1, 1).Value = _
ExecuteExcel4Macro(str1)
で同様の処理が可能だと思いますけれど・・
※ OneDriveでは試したことがないので、もしかするとうまくいかないかもですが。
いつもありがとうございます。
うまくいきました。
タスクマネージャーで確認したところ
バックグラウンドにエクセルが増殖していました。
なんなんでしょうか。
それを全て削除してから、実行したら
問題ありませんでした。
ありがとうございました。
No.1
- 回答日時:
こんにちは
すぐに思いつく方法として2通りあります。
◇開いているブックに同名のブックがあるか調べる
For Each w In Workbooks
If w.Name = "BBB.xlsm" Then Set wb = w: Exit For
Next w
If wb Is Nothing Then Set wb = xlApp.Workbooks.Open(str)
※ 上記はブック名だけで確認していますので、同名の別ブックが存在する場合はパスのチェックも必要になります。
◇別のエクセルスレッドから開く
Set EX = CreateObject("Excel.Application")
Set wb = EX.Workbooks.Open(str)
※ 別スレッドなの、すでに開いているブックでも重複して開けます。
※ 処理終了時にApplicationも終了しておく必要があります。
◇ご質問とは直接関係はありませんが・・・
読み込むセルが固定位置の1か所だけなのであれば、わざわざブックをオープンしなくても直接読み込むことも可能です。
こちらの方法であれば、すでに開いているかを気にする必要もありませんし、1箇所だけなら格段に速いです。
https://akira55.com/do_not_open_the_book/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
- Excel(エクセル) 【マクロ】【VBA】同じフォルダ内にあるエクセルのデータを転記したい【ブック1からブック2へ】 9 2023/08/10 07:51
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
実行時エラー'-2147467259(8000...
-
String""から型'Double'への変...
-
お助けください!VBAのファイル...
-
ADO 「認証に失敗しました」
-
エクセルVBA 「On Error GoTo...
-
エクセルVBAで#N/Aのようなエ...
-
SQLでエラーです。
-
インポート時のエラー「データ...
-
実行時エラー 438 の解決策をお...
-
Excel実行時エラー[80004005]に...
-
数式は残し値をクリアするマク...
-
マクロの「SaveAs」でエラーが...
-
「実行時エラー '3167' レコー...
-
日付書式のString型からData型...
-
Filter関数を用いた結果、何も...
-
VBSCRIPTで返されるErr.Number...
-
VBAで時間(00:00形式)を積算...
-
VBAで変数を含むSQL文を使用し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
On ErrorでエラーNoが0
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
VBA データ(特定値)のある最...
-
実行時エラー 438 の解決策をお...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
エクセルVBA 「On Error GoTo...
-
【VBA】ワークブックを開く時に...
-
マクロの「SaveAs」でエラーが...
-
ACCESSで値を代入できないとは?
-
実行時エラー'-2147467259(8000...
-
インポート時のエラー「データ...
-
【VB.NET】 パワポ操作を非表示で
-
Filter関数を用いた結果、何も...
-
UBoundに配列がありませんとエ...
-
Excel vbaについての質問
-
メールの件名のセットでエラー...
おすすめ情報
文字数制限のため分けて投稿します
Dim w As Workbook
Dim str As String
Dim xlApp As New Application
Dim wb As Workbook
str = "C:\Users\user\OneDrive\デスクトップ\BBB.xlsm"
For Each w In Workbooks
If w.Name = "BBB.xlsm" Then Set wb = w: Exit For
Next w
If wb Is Nothing Then Set wb = xlApp.Workbooks.Open("C:\Users\user\OneDrive\デスクトップ\BBB.xlsm")
ThisWorkbook.Worksheets("Sheet5").Cells(1, 1).Value = _
wb.Worksheets("go").Cells(1, 1).Value
wb.Close
わたし、どこかまちがっいるんですが、わかりませんです。
理由としては別のプログラムでのOLEの操作が完了するまで待機します。
とでてしまいます。