タスクバーのアプリ開閉を回避する方法
- 30件程度のエクセル「個別ファイル」を集計する際に、タスクバーでのアプリ開閉を回避する方法について調査しました。
- VBAのコードを実行すると、個別ファイルのエクセルがタスクバーで開閉してしまい、画面がちらつく問題が発生しました。
- ExecuteExcel4MacroやApplication.ScreenUpdatingを試しましたが、処理が遅くなるため、個別ファイルのウィンドウだけを開閉し、処理の最後にエクセルアプリを閉じる方法を探しています。
- ベストアンサー
タスクバーのアプリ開閉を回避したいです。
30件程度のエクセル「個別ファイル」を集計するマクロについてです。 下記のコードを実行すると、VBAが記述されているエクセルの他に タスクバーで「個別ファイル」のエクセルが開閉してしまい、画面がちらちらしてしまいます。 ExecuteExcel4Macroを試し、かなり苦戦したのですが処理が遅かったです。 個別ファイルのウィンドウだけを開閉し、処理の最後にエクセルアプリを閉じる方法など ありませんでしょうか? 他の方法でも構いませんので、みなさまよろしくご回答願います。 WindowsXPとExcel2007を使用しております。 Application.ScreenUpdating = False Application.EnableEvents = False Set 個別ファイル = Workbooks.Open(Filename:=LocalFileName, ReadOnly:=True) '集計マクロ 個別ファイル.Close SaveChanges:=False Application.EnableEvents = True Application.ScreenUpdating = True
- mayu1992
- お礼率73% (49/67)
- オフィス系ソフト
- 回答数5
- ありがとう数2
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>個別ファイルも一緒に開く事があります ちょっと意味不明です。 先のリンク先の内容にある通り、どこかで指定が漏れているのかも? 一連のステップが終了した段階か、あるいは、ステップ実行しながらで タスクマネージャでExcelが新たに何処で立ち上がっているか確認されては? If SheetCount < 3 Then GoTo ERR0 End If ・・中略 If oBK.Worksheets(1).Cells(4, 5).Value Like "A00*" Then ・・中略 ElseIf _ oBK.Worksheets(3).Cells(4, 5).Value Like "A00*" Then oBK.Worksheets(3).Activate Call 抽出(oBK) Else ERR0: oBK.Close savechanges:=False Set oBK = Nothing ・・この後にも処理は続いているのですよね? If に対するEnd If が無くてコンパイルエラーにはなっていないのなら こちらの杞憂ですけど。 勝手に想像して oBK.Worksheets(3).Cells(4, 5).Value Like "A00*" Then oBK.Worksheets(3).Activate Call 抽出(oBK) End If ERR0: oBK.Close savechanges:=False Set oBK = Nothing oXL.Quit 'どこかで最終的に閉じてますか? msgbox "終わったよ" のような感じではないかと・・ ご参考まで。
その他の回答 (4)
- nicotinism
- ベストアンサー率70% (1019/1452)
Dim oXL As New Excel.Application Dim oBK As New Excel.Workbook 'oXL.Visible = True oXL.Workbooks.Open LocalFileName, ReadOnly:=True '"d:\DATA\123.xls" Set oBK = oXL.Workbooks(1) 'Debug.Print oBK.Sheets(1).Name Workbooks(DataArr(i, 0)).Worksheets(1).Activate '↑↓これは呼び出し先のBookではなく自身のExcel上のBookを参照していると思います SheetCount = ActiveWorkbook.Worksheets.Count If SheetCount < 3 Then GoTo ERR0 End If '↓このシート・ブックも参照先が怪しいような If Worksheets(1).Cells(4, 5).Value Like "A00*" Or _ Worksheets(1).Cells(4, 5).Value Like "a00*" Then Workbooks(DataArr(i, 0)).Worksheets(1).Activate Call 抽出 ElseIf Worksheets(2).Cells(4, 5).Value Like "A00*" Or _ Worksheets(2).Cells(4, 5).Value Like "a00*" Then Workbooks(DataArr(i, 0)).Worksheets(2).Activate Call 抽出 End If oBK.Close savechanges:=False Set oBK = Nothing ←------------------開いたきり使って無さそうなのも? どこでエラーになったかが不明ですが、Index・・ なので真っ先に疑いたくなるのは、DataArr(i, 0) です。 下記リンクは実行時バインディングの場合ですが考え方は共通です http://homepage1.nifty.com/rucio/main/technique/teq_15.htm oXL、oBK、を操作したい場合はそれを明示する必要があります。
補足
ご回答ありがとうございます。 取り合えず、下記コードで動作しました。(ご参考まで) 画面が動かないので抜群の仕事してなさそう感が漂いました^^; 何故か、このVBAを実行すると、たまに、個別ファイルも一緒に開く事があります。。。 わかりますでしょうか??(ご回答頂けなかったら、とりあえず閉め切ります) >Set oBK = Nothing ←------------------開いたきり使って無さそうなのも? 確かに有っても無くても動作とタスクには影響が無かったです。 Dim oXL As New Excel.Application Dim oBK As New Excel.Workbook oXL.Workbooks.Open LocalFileName, ReadOnly:=True Set oBK = oXL.Workbooks(1) SheetCount = oBK.Sheets.Count If SheetCount < 3 Then GoTo ERR0 End If If oBK.Worksheets(1).Cells(4, 5).Value Like "A00*" Then oBK.Worksheets(1).Activate Call 抽出(oBK) ElseIf _ oBK.Worksheets(2).Cells(4, 5).Value Like "A00*" Then oBK.Worksheets(2).Activate Call 抽出(oBK) ElseIf _ oBK.Worksheets(3).Cells(4, 5).Value Like "A00*" Then oBK.Worksheets(3).Activate Call 抽出(oBK) Else ERR0: oBK.Close savechanges:=False Set oBK = Nothing
- end-u
- ベストアンサー率79% (496/625)
>エクセルファイルを他にも開いている時に実行すると、... なるほど。 そこも気になるようでしたら、nicotinismさんの案を検討なさってください。 他の案としては、BookをOpenせずに集計する方法くらいですかね。 単純な参照で可能であれば、の話ですけど。 http://okwave.jp/qa/q6298551.html?order=asc >ExecuteExcel4Macroを試し、かなり苦戦したのですが処理が遅かったです。 実はExecuteExcel4Macroよりも普通に参照数式を使ったほうが速いのです。 または、個別ファイルの形式がデータテーブル的なものだったら QueryTable(外部データの取り込み)を使って 同一ファイル内の作業シートで処理できるかもしれませんが。
補足
ご回答ありがとうございました。 単純参照が有効な際は、活用させて頂きますね。
- end-u
- ベストアンサー率79% (496/625)
Excelのオプション「すべてのウィンドウをタスクバーに表示する」設定になっているからでしょうね。 そのチェックを外せば良いだけですが、通常時は「..タスクバーに表示」しておきたいならコードでの対応が必要です。 処理冒頭に Dim flg As Boolean flg = Application.ShowWindowsInTaskbar Application.ShowWindowsInTaskbar = False ShowWindowsInTaskbarプロパティの設定を覚えておいてFalseにする。 処理後に戻す。 Application.ShowWindowsInTaskbar = flg ..みたいな感じです。
お礼
お礼という機能があるのですね。。。 今回も勉強になりました。 また質問した時には是非ご回答をお願いしますね^^
補足
end-uさん ご回答ありがとうございます。 エクセルファイルを他にも開いている時に実行すると、エクセルが整列!処理・・・解散!! みたいで、「仕事をしている気がしました」^^ これも凄い知識だなぁと思いました。 コードも複雑じゃないし良いかなと思いますが、もうしばらく検討します。
- nicotinism
- ベストアンサー率70% (1019/1452)
個人的には・・ >画面がちらちらしてしまいます 仕事してるな・・という感じがして好きなのですけど 他にも方法があるかもしれませんが、新たなExcelのインスタンスを立ち上げて そこで操作してみては如何でしょう? Sub t() Dim oXL As New Excel.Application Dim oBK As New Excel.Workbook 'oXL.Visible = True oXL.Workbooks.Open "d:\DATA\123.xls" Set oBK = oXL.Workbooks(1) Debug.Print oBK.Sheets(1).Name oBK.Close savechanges:=False Set oBK = Nothing oXL.Quit End Sub
補足
nicotinismさん 回答ありがとうございます。 >仕事してるな・・・っていうのがツボにはまりました^^ 確かにせこせことやってる感じがしますね。 本題ですが、ご提示頂いたコード(Debug.Printがわかりませんが。。)をMsgBoxに替えてよい感じだと思いました。 しかし、私のコードに付け加えると「インデックスが有効範囲にありません。」とエラーが出てしまいました。 Dim oXL As New Excel.Application Dim oBK As New Excel.Workbook 'oXL.Visible = True oXL.Workbooks.Open LocalFileName, ReadOnly:=True '"d:\DATA\123.xls" Set oBK = oXL.Workbooks(1) 'Debug.Print oBK.Sheets(1).Name Workbooks(DataArr(i, 0)).Worksheets(1).Activate SheetCount = ActiveWorkbook.Worksheets.Count If SheetCount < 3 Then GoTo ERR0 End If If Worksheets(1).Cells(4, 5).Value Like "A00*" Or _ Worksheets(1).Cells(4, 5).Value Like "a00*" Then Workbooks(DataArr(i, 0)).Worksheets(1).Activate Call 抽出() ElseIf Worksheets(2).Cells(4, 5).Value Like "A00*" Or _ Worksheets(2).Cells(4, 5).Value Like "a00*" Then Workbooks(DataArr(i, 0)).Worksheets(2).Activate Call 抽出() End If oBK.Close savechanges:=False Set oBK = Nothing 前後省略しておりますが、わかりますでしょうか?
関連するQ&A
- VBA EnableEventsの動作
Win7 Excel2013使用 Application.EnableEventsの動作でおかしな事がおきているので 解決方法を教えて頂きたいのですが、 シートの並びかえマクロを作成し、 その中で最初と最後にApplication.EnableEventsとscreenupdating を false→処理→trueで設定しています。 マクロ実行後、別のマクロ(sheetchangeイベント)を実行しようとしたところ マクロ動作せず、状況を調べるために sub test() msgbox Application.EnableEvents msgbox Application.ScreenUpdating End sub 上記testマクロでそれぞれの状況を表示させたところ、どちらもtrueがかえってきました。 ただ、もう一度このtestマクロを実行するとApplication.EnableEventsだけfalseとなります。 シートの並びかえマクロのデバッグで検証を行いましたが、特にエラーはなく、最後のtrueまで 実行される事は確認しました。 何か考えられることはありますでしょうか?
- 締切済み
- Excel(エクセル)
- VBAでBOOKを開かずにプロパティ変更
エクセル2013です。 特定のフォルダ内のエクセルのBOOKのプロパティの作成者をすべて変えようと思います。 いろいろ試して、以下のコードでできるようになりました。 しかし、下記のコードではいちいちファイルを開かなくてはなりませんのでサイズが大きかったり、数が多いと結構時間がかかります。 手作業でファイルのプロパティを変えるときは、エクスプローラで右クリックすれば開かなくとも簡単にできます。VBAでもファイルを開かずにプロパティを変更するにはどうすればよいのでしょうか?お教えいただければ幸いです。 Sub TEST20190710() Dim myFdr As String, fnm As String Dim wb As Workbook Dim n As Long Const NEW_AUTHOR As String = "emaxemax" Application.ScreenUpdating = False Application.EnableEvents = False myFdr = "C:\Users\User\Documents\TEST01" fnm = Dir(myFdr & "\*.xls?") Do Until fnm = Empty Set wb = Workbooks.Open(myFdr & "\" & fnm) Application.DisplayAlerts = False wb.BuiltinDocumentProperties("Author").Value = NEW_AUTHOR wb.Close SaveChanges:=True Application.DisplayAlerts = True n = n + 1 fnm = Dir Loop Application.ScreenUpdating = True Application.EnableEvents = True MsgBox n & "件のブックを処理しましました。", vbInformation End Sub
- ベストアンサー
- Excel(エクセル)
- キーボードでScreenUpdatingの切り替え
Application.ScreenUpdating = True Application.ScreenUpdating = False の切り替えをキーボードからコントロールすることは可能 でしょうか?かなり長いマクロの処理があるのですが、 処理の途中で画面更新をON/OFFさせて進行状況を見たいのです。
- ベストアンサー
- オフィス系ソフト
- EnableEventsの意味は
VBAを勉強中の初心者です。 Excelでプロシージャの中に書かれている次の文は、どういう意味を持っているのですか。 Application.EnableEvents = False '処理命令文 Application.EnableEvents = True EnableEventsとは、何を可能にさせると言っているのでしょうか。 = Falseとは、何が違うと言っているのでしょうか。 割り込み禁止で、ここで処理が実行されている間は、他の余分なことは受け付けないと言っているのかと勝手な想像もしていますが、どうでしょうか。 教えて下さい。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excelの三つのVBAを一つにまとめる。
初めまして、よろしくお願いします。当方全くの素人でVBAの基礎もよくわからず、ネットから拾ってきていじった三つのVBAがあります。この三つ、一つ一つは個別に機能するのですが、VBAとして正しいのかさえよく解っていません。この三つを一つにまとめて、同時に機能するようにしたいと頭を抱えています。 Sub TEST() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Range("b10:b20").Insert shift:=xlShiftToRight Range("b10:b20").Value = Range("a10:a20").Value Application.OnTime TimeValue("09:00:00"), "TEST" Application.ScreenUpdating = True Application.EnableEvents = True ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST1() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c30:c40").Copy Range("d30:d40").PasteSpecial Paste:=xlPasteValues Range("b30:b40").Copy Range("c30:c40").PasteSpecial Paste:=xlPasteValues Range("a30:a40").Copy Range("b30:b40").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("01:00:00") Application.OnTime nextTime, "TEST1" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST2() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c50:c60").Copy Range("d50:d60").PasteSpecial Paste:=xlPasteValues Range("b50:b60").Copy Range("c50:c60").PasteSpecial Paste:=xlPasteValues Range("a50:a60").Copy Range("b50:b60").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("00:10:00") Application.OnTime nextTime, "TEST2" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________ 解る方、よろしくお願いします。
- 締切済み
- オフィス系ソフト
- エクセル2010をVBAによりリボンの最小化処理
前回、「エクセル2010をマクロによりリボンの最小化処理(QNo.7450319)」により、 Sub macro1() CommandBars.ExecuteMso "MinimizeRibbon" End sub とします。 再度実行すると再表示します。 との回答をいただき早速利用しておりますが、FALSEとTRUEを使い、最小化と再表示を下記の様なコ-ドで出来ないものか、ご教示願います。 (リボンの最小化) Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""RIBBON"",FALSE)" (リボンの再表示) Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""RIBBON"",TRUE)"
- 締切済み
- オフィス系ソフト
- ファイルの保存場所を設定してしまう方法
ファイルを保存する時に、保存先を指定できるマクロ(下記参照)があります。 保存場所あらかじめ設定するには、何を足せばいいのでしょうか? Sub NameSave() Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show arg1:=ファイル名 Application.EnableEvents = True End Sub vbaは初心者です。 エクセル2003を使っています。 ご存知の方、どうぞ教えてください。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- ExcelマクロのApplication.EnableEvents
Sub AAA() Application.EnableEvents = False If a = 0 then 処理A End If Application.EnableEvents = True End Sub このようなコードを組んでいます。 処理Aは、他シートへの書込みを行っており、 他シートのWorksheet_Changeイベントが動いて欲しくないので、 上記の位置にApplication.EnableEventsのFalseとTrueを入れたのですが、 (FalseとTrueを入れた位置は「If文の前後」ではなく、「コードの最初と最後」です) 処理Aによって他シートのWorksheet_Changeイベントも動きました。 ここで、 Application.EnableEvents = False 処理A Application.EnableEvents = True のように記述したら、処理Aによる他シートのWorksheet_Changeイベントは止められました。 動かしたくない処理がある場合は、 その処理を行っている部分をピンポイントでFalseとTrueで挟まないといけないのでしょうか。 (最初と最後に宣言するのではダメなのでしょうか) それとも今回のような動作をした要因は別にあるのでしょうか。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAで読み取りパスワード回避
エクセル2010です。 以下のコードで任意のフォルダ内のエクセルBOOKから所定のデータを取得できます。 しかし、指定フォルダ内に読み取りパスワードが設定されたものがあると、開くことができずに止まってしまいます。 読み取りパスワードが同一で、事前に分かっていればコードにPassword:="AAAABBBB" などと書き入れればいいと思うのですが、事前にはわかりませんし、パスワードもそれぞれ異なります。 そこで、開けなかった場合には、そのBOOKを飛ばしてすすみ、別シートに飛ばしたBOOK名を記録しておきたいのです。 (BOOK作成者にあとからパスワードを聞くため) しかし、残念ながらどのように書けばいいのか思いつきません。 ご指導いただければ幸いです。 Sub TEST001() Dim wb(1) As Workbook Dim ws(1) As Worksheet Dim myFdr As String, fn As String Dim i As Long With Application.FileDialog(msoFileDialogFolderPicker) 'フォルダ指定 If .Show = True Then myFdr = .SelectedItems(1) Else Exit Sub End If End With Application.ScreenUpdating = False '画面更新を一時停止 Set wb(0) = ThisWorkbook 'このコピー先ブックをwb(0)とする。 Set ws(0) = wb(0).Sheets(1) 'wb(0)の1枚目のシートをws(0)とする。 fn = Dir(myFdr & "\*.xls*") 'フォルダ内のExcelブックを検索 Do Until fn = Empty '全て検索 Application.EnableEvents = False Set wb(1) = Workbooks.Open(myFdr & "\" & fn, UpdateLinks:=False, ReadOnly:=True) 'そのブックを開きwb(1)とする。 Set ws(1) = wb(1).Worksheets(1) i = i + 1 ws(0).Cells(i, "A").Value = ws(1).Range("B2") 'ws(0)に転記 ws(0).Cells(i, "B").Value = wb(1).Name ws(0).Cells(i, "C").Value = ws(1).Name wb(1).Close (False) '保存せず閉じる Application.EnableEvents = True fn = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新停止を解除 MsgBox i & "個取得" End Sub
- ベストアンサー
- Excel(エクセル)
- エクセル マクロ 値の貼り付け
以下のエクセルのマクロで値のみを貼り付けたいのですが、.valueを指定しても上手くできません。 どのように修正すればいいか教えてください。 Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\ファイルA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("E4:AR4").Copy wb.Sheets("BBB").Range("E4:AR4") Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True
- ベストアンサー
- オフィス系ソフト
お礼
自book(VBAが記述されている)を開くと同時に(タスク的には、開く直前) 前回、oXL.Workbooks.Open LocalFileName, ReadOnly:=Trueで開かれた 個別ファイル(LocalFileName)が立ち上がるという現象です。 言葉足らずですみません。 現状、その現象が出てないので把握出来なくなりましたが、「ステップ実行」 というもので確認していきたいと思います。 また解らなくなった時に質問したいと思います。 End Ifはコピペ落ちでした。 oXL.Quitはご提示いただいた感じで使っております^^ 長い間お付き合い下さりありがとうございました。