
エクセルVBAで質問なのですが、別のブックを非表示で開いて処理をし、処理が終わったらそのブックを閉じるマクロを作りたいです。
ネットで方法をたくさん調べたのですが、うまくいきません。
ActiveWindow.Visible = Falseを使うと非表示でブックを開くのですが、次の処理をしようとすると非表示のブックのシートがselectで選択できないのかエラーが出てしまいます。
どなたか良い方法をご存じないでしょうか?
↓今作ろうとしているマクロを参考に書いておきます。
ブックA内に書かれているブックBを非表示で開く
↓
処理(ブックBのシート内の表に記入漏れの空白セルがあればブックAに空白セルの番地を表示させる)
↓
ブックBを非表示のまま閉じる
非表示にせずにブックBを開けばうまく処理が完了するのですが、ActiveWindow.Visible = Falseを入れて非表示でブックBを開くと処理が開始しないという状況です。
No.1ベストアンサー
- 回答日時:
こんにちは
>非表示のブックのシートがselectで選択できないのかエラーが出てしまいます。
手作業でも非表示のブックでシートやセルを選択しようとしても無理ですよね?
VBAの記述の方法をSelectやActivateなどを用いないように書き直せば、ご希望のことは実現可能だと思います。
例として、以下では"TestBook"というブックを開き、そのシート1内でA1:C20の範囲の空白セルを探して、メッセージボックスにカンマ区切りで結果を表示します。
(殆ど時間がかかりませんので、非表示にしなくても同じだとは思いますが…)
Sub sample()
Dim wb As Workbook, c As Range
Dim str As String
str = ""
Set wb = Workbooks.Open(ThisWorkbook.Path & "\TestBook.xlsm")
Windows(wb.Name).Visible = False
For Each c In wb.Worksheets(1).Range("A1:C20")
If c = Empty Then
If str <> "" Then str = str & " , "
str = str & c.Address
End If
Next c
wb.Close SaveChanges:=False
MsgBox str
End Sub
※ わざわざ『非表示』に設定しなくても、現在のウィンドウをアクティブにすることで、新しく開いたウィンドウを(裏側に)隠すこともできますね。
ご回答どうもありがとうございます。
非表示だとselectなどは使えないのですね。
非表示で開いたブック内の表の一部の範囲を選択して、その中から空白セルを探すように作っていたので、書き方を変えなければならないようですね。
わざわざ非表示にしなくても処理できているのだから私ももうこれでいいんじゃないかと思うのですが、上司が非表示にしてほしいと言うものですから^^;
私VBA初心者なのに次々とむずかしいことを要求してくるもので・・・
しばらくちょっと他の仕事をしなくてはならずマクロを作る仕事を中断してしまってfujillinが教えてくださった方法をすぐに試せないのですが、今度試してみます!ありがとうございます^^
No.4
- 回答日時:
こんばんは
ブックやシートの選択の仕方を変えてみたらいかがでしょうか?
非表示のブックやそのシートは「select」や「Activate」は出来ません。しかし、
Workbooks("Book2").Worksheets("Sheet1").Range("A1") = 1
のような書き方ならば、非表示のブックやシートを扱えます。
ご回答ありがとうございます!
そのような書き方をすればいいのですね。
マクロの仕事をしばらく中断することになったのですぐに試せないのですが、今度試してみます!
知恵を貸していただきどうもありがとうございます!
No.3
- 回答日時:
No.1 fujillinさんの云う通り、SelectやActivateなどを用いないように書き直せるのであれば、非表示にしなくてもあまり気にならないのですが、モスマンさんの書いているマクロは、表示がガチャガチャ動くようなタイプなのですか?もし、そうであれば、まずは、SelectやActivateなどを使わない書き方を学習すべきです。
とは言っても、手っ取り早く解決したいのであれば、画面の更新を抑止すれば、ご希望通りになると思います。
こんな感じです。
Application.ScreenUpdating = False ’画面更新の抑止
ブックのOPEN
処理
ブックClose
Application.ScreenUpdating = True ’画面更新の抑止解除
ご回答ありがとうございます。
他のブックを開いて一部の範囲を選択し、そこから空白セルを見つけたらそのセル番地を自動で記入していくという動きをさせてます。
非表示にしないで動かすとうまくいっていたのですが、非表示にすると動かなくなるものなんですね。
selectなどを使わないものに書き換えようと思っていたのですが、画面更新の抑止というものがあるのですか!
ちょっと試してみたいのですが他の仕事をしなくてはならずマクロを作る仕事をしばらく中断することになったのですぐに試せないのですが、他の閲覧者様たちの参考になるかもしれません。
今度マクロの仕事を再開したときに試してみたいです。
知恵を貸してくださりありがとうございました!
No.2
- 回答日時:
>別のブックを非表示で開いて処理をし、処理が終わったらそのブックを閉じるマクロを作りたいです。
本当に非表示する必要があるのか、どこで邪魔になるのか、何か、誤解があるような気がしてなりません。半分/完全ステルスなら、Excelをオートメーション化して、稼働させます。以下は、何か別のことを思いついても、悪用はしないでください。
例えば、これにタイマーをつけて、完全なステルス化するとと、使用者は自覚がないままに、知らない間に、マクロが作業しています。
ADODBでも似たようなことはできるけれども、こちらの方が扱いが楽です。
'//
Sub StelthCehcking()
Dim xlBook As Object
Dim xlApp As Object
Dim Rng As Range
Dim blkRng As Range
Dim buf As Variant
Dim fn As String
Dim bfn As String
Dim c As Range
Dim arBuf, i As Long
On Error GoTo ErrHandler
fn = "C:\Temp\BookB.xlsm" '目的のファイル
bfn = Mid(fn, InStrRev(fn, "\") + 1)
On Error Resume Next
' ブックを開いているかどうかを調べます
Set xlBook = GetObject(bfn)
If xlBook Is Nothing Then
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(fn)
End If
On Error GoTo 0
With xlBook
Set Rng = .Worksheets("Sheet2").Range("A1").CurrentRegion
On Error Resume Next
Set blkRng = Rng.SpecialCells(xlCellTypeBlanks) 'ブランクを探す
On Error GoTo 0
If Not blkRng Is Nothing Then
For Each c In blkRng.Cells
buf = buf & "," & c.Address(0, 0)
Next c
End If
.Close False 'ブックを閉じる
End With
If Len(buf) > 1 Then
arBuf = Split(Mid(buf, 2), ",")
i = UBound(arBuf)
'A列に書く
ThisWorkbook.Worksheets("Sheet1").Range("A1").Resize(i + 1).Value _
= WorksheetFunction.Transpose(arBuf)
End If
ErrHandler:
Set xlBook = Nothing
End Sub
ご回答どうもありがとうございます。
私もわざわざ非表示にする必要があるのか疑問なのですが、上司がそうしてほしいというのでそう作るしかなくて^^;
私VBA初心者なのであまり詳しくもないので、非表示にすることによって何か意味があるのかよくわからないんですが、作れるならなんとか作ろうと思いまして質問させていただきました。
しばらく他の仕事をせねばならずマクロの仕事を中断してしまっているのでWindFallerさんが教えてくださった方法をすぐに試せずまだ未解決なのですが、他の閲覧者様たちの参考になるかもしれません。私もマクロの仕事を再開するときに試してみます。知恵を貸してくださりありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2023/01/13 10:42
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/25 11:42
- その他(Microsoft Office) エクセルについて教えてください。 2 2022/10/20 14:55
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセルで別ブックをバックグラウンドでオープンする方法
Excel(エクセル)
-
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
-
4
VBA バックグラウンドで別ブックを開いてデータ転記
Excel(エクセル)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
VBAでBook読み込み時の非表示方法は??
Visual Basic(VBA)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
非表示になったエクセルは?
Excel(エクセル)
-
9
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
10
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
13
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
別ファイルを開かず、INDIRECT関数を使用せずに、別ファイルのデータを求めたい
Excel(エクセル)
-
16
(Excel+VBA)ユーザーフォームのみ表示で完結させたい。
Excel(エクセル)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
19
VBA Application visibleのやり方
Visual Basic(VBA)
-
20
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
Excelの警告について
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelファイルをダブルクリック...
-
Excelでブックの共有を掛けると...
-
Excel(2010)のフィルターが保...
-
ブックの保護ができないんです...
-
エクセルにおける,「ブック」...
-
Excelで複数ブックの同一セルに...
-
エクセルファイルを開かずにpdf...
-
VBA:ワークブックを変数でActi...
-
エクセル 複数のブックを一度...
-
同じフォルダへのハイパーリン...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルでウィンドウの枠固定...
-
【マクロ】【VBA】同じフォルダ...
-
エクセルVBAでブックを相対パス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
エクセルファイルを開かずにpdf...
-
Excelでブックの共有を掛けると...
-
Excelで複数ブックの同一セルに...
-
同じフォルダへのハイパーリン...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
印刷しようとすると強制終了に...
-
ブックのピボットを別ブックに...
-
フォルダ内の複数ファイルから...
-
エクセルで「ディスクがいっぱ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルをオープンし...
-
エクセルにおける,「ブック」...
おすすめ情報
緊急で他の仕事が入ってしまい、このマクロを作る仕事をしばらく中断することになったので私のほうではまだ未解決ではあるのですが、今の仕事が終わってマクロを作る仕事が再開したらご回答してくださった方々が教えてくださった方法を試してみたいと思います。
なので一度質問を締め切らせていただきますね。
ご回答くださった方々にはとても感謝しております。ありがとうございました!