
いつもお世話になっております。
おしえてくれませんでしょうか
下記のコードは
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
C言語で質問です。
-
scilabについて
-
書き込めない文字はどうすれば...
-
ShapeのVBAの中での取り扱い
-
fortran おそらく二重解法のエラー
-
Maximaでのエラーメッセージ
-
VBScriptのCreateFolderについて
-
pythonのコードエラーについて
-
VBA データ(特定値)のある最...
-
マクロOn Error GoTo ErrLabel...
-
Filter関数を用いた結果、何も...
-
ExcelにSQLの結果を表示
-
ExcelのVBAに詳しい方、教え...
-
お世話になってます
-
EXEL VBAで複数のsheetを指定す...
-
LaTeXのエラーについて(コンパ...
-
VBSCRIPTで返されるErr.Number...
-
ExcelVBAについて質問です。
-
変更履歴テーブルについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロOn Error GoTo ErrLabel...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
【VBAエラー】Nextに対するFor...
-
ACCESSで値を代入できないとは?
-
【Access】Excelインポート時に...
-
VBでSQL文のUPDATE構文を使った...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
実行時エラー'-2147467259(8000...
おすすめ情報
文字数制限のため分けて投稿します
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の操作が完了するまで待機します。
とでてしまいます。