• ベストアンサー

ExcelのVisibleについて

VB6.0でデータベースから取得したデータをExcelに 出力するプログラムを作っています。 ExcelのVisibleをFalseに設定して出力処理を行って いるのですが、処理中に他のExcelを起動させると Visible=Falseの設定が解除されて処理中の動作が 見えてしまいます。 Excelのアプリケーションに対してVisible=Falseに 設定しているのが原因ではと思って、ブックに対して 下記のように設定しても駄目でした。 WorkBooks("XXX.xls").Windows(1).Visible = False 出力するテーブルのフィールドが多いため、10分近く処理に時間がかかります。 その間に他のExcelを立ち上げても、処理中のExcelのVisible=Falseの設定が解除されないようにする方法はないでしょうか?

noname#139383
noname#139383

質問者が選んだベストアンサー

  • ベストアンサー
  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.4

VB6ですから、Excelを参照設定したうえで WithEventつきオブジェクトとして、Excelのイベントを拾ったらどうでしょうか。 例えば、このケースなら「WorkSheetOpen」イベントで WorkBooks("XXX.xls").Windows(1).Visible = False # 本当はブックもオブジェクト変数に格納しておき # .Windows(oBook.Name)のようにすべきですが としてみましょう。 一瞬表示されてしまいますが、すぐ隠れると思います。 私が実際やったのは、確かWorkSheetOpenイベントで開かれたら(開いたほうのファイルを)すぐ消してしまう方法でした。 Excelを開かれると何をされるか分からないので(笑)、起動時および起動後もExcel(およびブック)のインスタンスを監視して処理中はExcelで別の操作を出来ないようにした記憶があります(完全ではありませんでしたけど)。

その他の回答 (3)

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.3

>その間に他のExcelを立ち上げても、 >処理中のExcelのVisible=Falseの設定が >解除されないようにする方法はないでしょうか? 開く側が「意識」して別インスタンスになるように しない限り無理です。 ただブックをダブルクリックして開くなら、 既にあるExcelのインスタンスで開いてしまいます。 たとえば、開きたいブックのショートカットを作って そのリンク先に "C:\Program Files\Microsoft Office\Office\EXCEL.EXE" を書き加えて空白1文字の後に元々のブックのパスを 入れて、これで開いてみるとどうでしょうか。 他のブックが開いている時にこれをやると、 別のExcelウィンドウで開きますから。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

> 出力するテーブルのフィールドが多いため、10分近く処理に時間がかかります。 セルに一個ずつ代入しています? 2次元配列から一気に代入する方法があります。(過去ログ) >その間に他のExcelを立ち上げても、処理中のExcelのVisible=Falseの設定が解除されないようにする方法はないでしょうか? 分かりません。 Excelオートメーションを使わずに、ADOまたはExcelクリエータ(市販ライブラリ)を使うとか。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

>処理中のExcelのVisible=Falseの設定が解除されないようにする方法 これはないわけでもないかもしれないけど、フと思ったので、参考がてらに発言です。 >出力するテーブルのフィールドが多いため、10分近く処理 おそらく ------------------- for i = 1 to レコード数   ・処理1.読み   ・処理2.書き   Doevent next i ------------------- としているからでは? 可能であれば、 ------------------- for i = 1 to レコード数   ・処理1.読み next i ・処理2.書き ------------------- というように処理を変えたら早くなると思います。 値を一個づつ設定するより、配列をそのまま出力してあげたら、より高速です。 (配列をそのままセットする[Todo36]氏の履歴があるはずなのですが、見つかりませんでした。)

関連するQ&A

  • Excelのブック名の変更

    VB.NET 2002でEXCELにDBの内容を書き出す処理をしています。 エクセルのテンプレートで雛形を作り、 xls_Book = xls_App.Workbooks.Add(CurDir() & "\テンプレート.xlt") で開いています。 エクセルをVisible=Trueにすると、ブック名が「テンプレート1」と表示 され、ブック名を変えたいのですが可能でしょうか? 良い方法がありましたら、よろしく お願いします。

  • ACCESSからexcelを操作

    accessのVBからEXCELのデータ編集を行う際、 最後エクセルを開放しているつもりなのですが、できていないようです。 ※タスクマネージャーにエクセルのタスクが残っており、 該当のファイルを開くと白くなっている。閉じて再度開くと正常動作する。 いくつかの帳票がありますが、 現象が起こるものと起こらないものがあります。 試しに Xls_app.ScreenUpdating = Trueにしてみるとタスクには残っているが 問題なく開けます。 Xls_app.ScreenUpdating = Falseだとタスクにも残るし、ファイルを開くと白くなっているような感じです。 しかし発生原因がわからず、再発するような気もするので根本原因を 突き止めたいです。 Excel起動時 ---------------- Set Xls_app = CreateObject("Excel.Application") Set Xls_book = Xls_app.Workbooks.Open(STR_out_file) Set Xls_sheet = Xls_book.Worksheets(STR_sheet1) Set Xls_sheet2 = Xls_book.Worksheets(STR_sheet2) 'DEBUG Xls_app.Visible = False Xls_app.ScreenUpdating = False Xls_app.UserControl = True ' Xls_app.Visible = True ' Xls_app.ScreenUpdating = True Private Sub Excel終了()----------------------- Xls_book.Close (True) Xls_app.Quit Set Xls_sheet = Nothing Set Xls_sheet2 = Nothing Set Xls_book = Nothing Set Xls_app = Nothing End Sub

  • visibleの機能について

    VBで「Label.visible」でFalseが非表示、Trueが表示だと思うのですが、Trueで非表示の場合があります。 プログラムではTrueにしたりFalseにしたりします。もしかしてvisibleの設定がおかしくなったのかなと思って実行中にvisibleの内容を表示してみてみましたが、Trueで非表示になる場合があります。必ず非表示になると言うわけではないので困っています。 原因がわかる方、もしかしてここでは?と言う方でも結構です。 宜しくお願い致します。

  • Excel VBAで別のブックからユーザーフォームの閉じる

    Excel VBAで別のブックからユーザーフォームの閉じたいのですが うまくいきません。 教えてください。 Private Sub CommandButton2_Click() Application.Visible = False Unload Workbook.("材料リスクマップ検索Ver2.xls")UserForm3・・・・※ Workbooks.Close userform3:=ThisWorkbook.Path & "あああ.xls" Workbooks("\いいい.xls").Close savechanges:=False UserForm1.Show vbModeless End Sub ※印のところが赤字にかわります。 コマンドボタン2は、いいい.xlsにあり、フォームを閉じたいのはあああ.xlsのUserform3です。 その後、ファイル名いいい.xlsは閉じます。 コードが間違っているかと思いますが、どんな風にすればよいかわかりません。初歩的なこととは思いますがよろしくお願い致します。

  • VB6からExcel出力し、ブックを閉じたとき異常終了

    Win98 FirstEdition VB6 SP3 Excel97 SR1 上記の環境において、下記のソースのように、VBからExcelを起動してデータを出力した際、Excelのブックを閉じると、「保存しますか?」の「はい」「いいえ」関わらず、あるいはブックをセーブした後閉じても、Excelが異常終了してしまいます。 ブックではなく、Excel自体を閉じた場合は全く問題ありません。 どなたか対処法をご存じな方いらっしゃいませんか? Dim objXls As Object Dim objBook As Object Dim objSheet As Object Set objXls = CreateObject("Excel.Application") objXls.Workbooks.Add objXls.Visible = False Set objBook = objXls.ActiveWorkbook Set objSheet = objBook.Worksheets(1) (中略) objXls.Visible = True

  • VisualBaic2005でExcelファイルを読む方法

    Dim oExl As Excel.Application Dim WorkBookName As Excel.Workbook Dim Open_WorkSheet_Name As Excel.Worksheet oExl = CreateObject("Excel.Application") WorkBookName = oExl.Workbooks.Open("d:\book011.xls", , False) この時点でExcelのファイルが開きません。 また、oExl.Visible = True を実行するとExcel自体は開くのですが、ファイルのオープンは できません。また、終了時に oExl.Workbooks.Close() oExl = Nothingを実行すると Excel自体は閉じるのですが、プロセスは残りまます。 VB2005からExcelファイルを読む方法とクローズ処理の方法を 教えてください。よろしくお願いします。

  • excelのデータをvbにとりこむ

    excelのあるセルのデータを取り込みたいのですが、 どうすればよいでしょうか? C:\123.xlsというファイルのsheet1の (2,4)というセルにある実数型のデータを 出力するという、意図です。 Private Sub Setting_Click() Dim xls As Object Dim xlsFilename As String Dim xlsSheetname As String xlsFilename = "C:\123.xls" xlsSheetname = "Sheet1" Set xls = CreateObject("Excel.Application") xls.Application.Visible = False xls.Application.Workbooks.Open xlsFilename Dim r1 As Double r1 = xls.Application.Workbooks.cells(2, 4).Value Print r1 end sub

  • VBでエクセルのバージョンを指定して開く

    PCにEXCEL2002と2013がインストールされています。 VBでエクセルを起動し、マクロを実行したいのですが、その際に起動するエクセルのバージョンを指定したいと考えています。 以下でやると標準設定のEXCELが開いてしまい、バージョンの指定ができません。 Dim xlApp As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApp.Workbooks xlBooks.Open("C:\test.xls") xlApp.Visible = True xlApp.Run("test.xls!macro") なにか方法はありますでしょうか?

  • ACCESS側からEXCELの書式を設定するには?

    ACCESSからEXCELにエクスポートした際、ACCESS側でEXCELの書式設定は行えますか?(例:セルAの幅がX桁等) データ件数が多すぎて、下記VBでエクスポート処理をしています。 DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, "" お手数ですが、ご教授願います。

  • JavascriptでのExcel起動について

    JavascriptでExcelを起動させてサーバー上のxlsファイルを編集したいのですが、読み取り専用になってしまいます。 ------------------------------------------------- Excel = new ActiveXObject("Excel.Application") Excel.Visible = true Excel.Workbooks.Open("http://localhost/test.xls") ------------------------------------------------- http://~で開くと読み取り専用になるのでしょうか? ちなみに、 1.xlsファイルは一般ユーザーも書き込み可能となっています。 2.readonlyパラメータをfalseにしても同様でした。 同様のケースで過去に解決された方、または良い案がある方。ご教授下さい。

専門家に質問してみよう