• ベストアンサー

VBでエクセルをOPEN

こんばんわ。VB初心者です。 VBのフォームにあるボタンを押すと、VBで作成したexeファイルのディレクトリを調べて、そこにエクセルファイル(****.xls)があるかチェックして、なかったらエクセルを起動しそのエクセルファイルをOPENしたいのですが、うまくオブジェクトがとれてなかったり、ディレクトリがちゃんと調べれてなかったりで、うまく動きません。 それから、エクセルを操作した最後にエクセルファイルをcloseしてエクセルアプリを終了させたいのですが、、それもうまく動きません。 どなたか、詳しいかたお手数ですがレスよろしくお願いいたします。

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

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

>オブジェクト変数 = GetObject("ファイルのパス") >としてるのですが、変数にNothing おそらく使用方法を間違えているからだと思います。 CreateObject("Excel.Application") と同様に GetObject("Excel.Application") としてから、取得したEXCEL内部のワークブック情報を得なければいけません。 Private Sub Command1_Click()   Dim xlsApp As Excel.Application   Dim xlsBook As Excel.Workbook      Dim findBookPath  As String      findBookPath = "C:\Book1.xls"      '起動チェック   On Error Resume Next   Set xlsApp = GetObject("Excel.Application")   On Error GoTo 0      '起動していなければEXCELを起動する   If (xlsApp Is Nothing) Then     Set xlsApp = CreateObject("Excel.Application")   End If         '起動中のEXCELアプリケーションのブック情報から、指定の物が開かれているかをチェックする   For Each xlsBook In xlsApp.Workbooks     '見つかったらループを抜ける     If StrComp(xlsBook.FullName, findBookPath, vbTextCompare) = 0 Then       Exit For     End If   Next xlsBook      'もし見つからなかったら、ワークブックをオープンする   If (xlsBook Is Nothing) Then     Set xlsBook = xlsApp.Workbooks.Open(findBookPath)   End If      '不可視なEXCELを可視するなら、これをつける   xlsApp.Visible = True End Sub

tariran
質問者

お礼

ありがとうございました。 とても助かりました。 おかげでプロセスが残らなくなりました。

その他の回答 (2)

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

検索を活用しましょう。 過去ログに存在しています。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=133035
  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

>VBで作成したexeファイル というのは、「自分自身」と解釈しても宜しいでしょうか? でしたらApp.Pathでディレクトリが取得できますよね。 エクセルファイルの存在はDirなんかで取れるかと。 あとは CreateObject("Excel.Application")と objExcel.Workbooks.Open("ファイルのパス") でエクセルとOpen。 処理が終わったらワークブックを閉じてオブジェクトを解放…ですね。 参考URLのサンプルは、きちんとオブジェクトを閉じていなくて心配な点もあるのですが…(^^; でも流れを掴むには良いと思いますよ。

参考URL:
http://homepage2.nifty.com/inform/vbmania/
tariran
質問者

補足

こんばんわ。回答ありがとうございます。 回答とネットを参考に、何とかできたのです。。わ~~い。 でも指定したエクセルファイルが既に開いている場合は、ファイルは開かないようにしているのですが、どうも、重複して開いてしまうのです。 既に開いているかどうかをチェックするのは。。。 オブジェクト変数 = GetObject("ファイルのパス") としてるのですが、変数にNothingって入っているんです。 ちゃんとPGはとおっているんですが・・・・・。 だから、既にエクセルファイルが開いてても、重複して開いちゃって。 とほほほ・・・・。 なぜなんでしょう。。。

関連するQ&A

  • VBで、エクセルファイルを操作

     VBでデータを使いエクセルのファイルを操作したいんですが、ファイルの場所を変えるとエラーが出てしまいます。 HTMLみたいに階層型(?)みたいに実行EXEがあるディレクトリ内のエクセルのファイルを操作させるような方法を教えてください。 (エクセルからも操作できるようにしたい)

  • VBからExcelクローズ検知

    VBで作成したaaa.exeの中でエクセルファイルbbb.xls、ccc.xlsを呼び出しています。 taskIdB = Shell("C:\Program Files\Microsoft Office\Office10\excel.exe C:\bbb.xls", vbHide) taskIdC = Shell("C:\Program Files\Microsoft Office\Office10\excel.exe C:\ccc.xls", vbHide) bbb.xls、ccc.xlsともにWorkbook_Openイベントで自動的にVBAが起動し、処理が終了すると自分自身を クローズするようになっています。 ここで問題になるのが、ccc.xls は bbb.xlsの処理完了を待ってから起動したいのですが、連続的に起動してしまう点です。 aaa.exeのなかで、bbb.xlsの終了を検知するなど、良い解決方法があればお教え下さい。 WindowsはXp pro.、VBは6.0、Excelは2002を使用しています。 よろしくお願いいたします。

  • VB2008とExcel2003連携

    VB2008とExcel2003連携 VBでExcelの操作を、VBのボタン操作でOPEN処理、CEL操作、CLOSE処理をそれぞれ単独に処理したいのですが方法がわかりません。以下の記述では、OPEN処理後、CEL操作のため再度呼び出すと、前回呼び出したOPEN処理の内容が残っていません。VBAはある程度理解していますが、VBのCLASS等の概念が良く理解できていません。できれば、OPEN処理、CELの処理、CLOSE処理を別々のSUBにしたいので、その方法を優先して教えていただければ幸いです。 宜しくお願いします。 Public Class Form1 Public Sub xlsAccess(ByVal xlPrc As String) Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim strFilename As String = "C:\TEST\SAMPLE.xls" 'ファイル名(フルパス)をセット Dim strSheetName As String = "Sheet1" 'シート名/シート名をセット ‘【EXCELファイルを開く】 If xlPrc = "OPEN" Then xlApp = CreateObject("Excel.Application") 'Application生成 xlApp.Workbooks.Open(Filename:=strFilename, UpdateLinks:=0) 'EXCELを開く xlApp.Visible = True 'EXCELの表示 xlBook = xlApp.Workbooks(Dir(strFilename)) 'Workbook xlSheet = xlBook.Worksheets(strSheetName) 'Worksheet xlSheet.Cells(1, 1).Value = "HELLO" End If '【EXCEL セル操作】 If xlPrc = "R/W" Then For k = 2 To 10 Step 1 xlSheet.Cells(k, 2).Value = xlSheet.Cells(1, 1).Value Next k End If ‘【EXCELファイル終了処理】 If xlPrc = "CLOSE" Then xlBook.Close(SaveChanges:=True) 'ブックを保存して終了 xlApp.Quit() 'EXCELを閉じる xlSheet = Nothing 'オブジェクトの解放 xlBook = Nothing 'オブジェクトの解放 xlApp = Nothing 'オブジェクトの解放 End If End Sub ‘【ボタン操作OPEN】 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click xlsAccess("OPEN") MsgBox("Open Excuted") End Sub ‘【ボタン操作、CEL操作】 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click xlsAccess("R/W") MsgBox("R/W Excuted") End Sub ‘【ボタン操作、CLOSE】 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click xlsAccess("CLOSE") MsgBox("CLOSE Excuted") End Sub End Class

  • VBからEXCELを起動する

    VBよりExcelを起動するプログラムで困っています。 1.VBよりGetObject関数でTest.xlsを開く 2.Test.xls内のAuto_Openマクロでパラメータファイルをよみ、そこに指定されているエクセルファイルを新しいブックでを開く ということをしたいのですが(「マクロを有効にする」のダイアログは表示されてもかまわないです)、何故かTest.xlsが開いたと思ったらすぐ閉じてしまいます(Excel自体は終了してないですべてのワークシートが閉じた状態)。 Auto_Openマクロは走ってるようなのですが、ついでにCloseマクロも走ってしまいます。 ちなみにTest.xlsを単体で動かしたときは問題なく動くのです・・・。 以前はVB4+Excel95の環境でAPI(CreateProcess)を使用し同作業を行っていたのですが、そのAPIが長いファイル名のスペース(OFFICEがある「Program File」のスペース)を認識しないそうで、この方法が使えないということでGetObjectを使用してみたのですが・・・。 何か根本的な間違いをしているのか、それともコードにエラーがあるのかさっぱりわからずお手上げです。 うまく疑問点を説明できているか不安なんですが、わかる方、どうかご指導願います。 よろしくお願いします。 ---------------------------------------- OSは、Windows 2000 アプリケーションは、Excel 2000 です ----------------------------------------

  • VB2005 で立ち上がった状態のEXCELファイルからデータ読込みだけしたいのですが

    どなた様かお助けください。VB2005を勉強中の素人です。 既に立ち上げた状態のEXCELファイルから単純に特定セルの数値をVBのラベルに読み取りたいだけなのですが、ネットや書籍にてVBでのEXCEL読込み方法について調べたのですが、どこの情報をみても、EXCELの立ち上げとクローズがセットになっており、既にEXCELファイルを開いた状態からでは2重起動となり、読み込みだけの仕方が分かりません。一応下記でファイルのオープンからのクローズまでができるようですが、[open]のところを取り除くとエラーになってしまいます。 ファイル名とセルだけが私の指定したい条件なのですが、なにか単純な読み取り方法はないでしょうか? というか私がアホすぎるのも原因だとは思いますが、ちょっとEXCEL情報読み込ませたかっただけなのにもう2日も悩んでおり、こんなに難しいとは思いませんでした。VBって初心者向けとかいわれていますけど6.0やら.netやらと情報が分散していて何するにも一苦労ですね。  いろいろ調べて下記のコードで最低限読み込みはできるようになりました。(短いコードが好きなので宣言とかはかなり除去しているからかな?時々表示されるセルデータもおかしくなります) EXCELオブジェクトライブラリの参照は済です。 ファイルのオープンとクローズを除去し最終的には立ち上げっぱなしのEXCELから単純な読込み(のみ)を1秒に1回程度繰り返してラベル表示を随時更新するのが目的です。ご助言お願いします。 Dim xlApp As New Excel.Application Dim xlFilePath As String = "C:\あつし\sample.xls" label1.Text = xlApp.Workbooks.Open(xlFilePath).Worksheets.Item(1).Range("A3").Value() xlApp.Quit()

  • VB6でEXCELをクローズ出来ない

    VB6でEXCELを使用した後クローズ処理をしたつもりですが、VBと別にEXCELを起動しVBで使ったEXCELを読み込もうとすると、「編集のためロックされています」とメッセージが出て、読み取り専用でしかオープン出来ません。また、VBでEXCELを繰り返しオープンするとメモリがいっぱいになってしまいます。 VBでのEXCELオープンは Dim fnm As String Dim exl As Object fnm = "EXCEL File名" 'フルパスで指定 Set exl = CreateObject("Excel.Application") exl.Application.Workbooks.Open FileName:=fnm クローズは Set exl = CreateObject("Excel.Application") exl.Application.Quit Set Sheet = Nothing Set BooK = Nothing Set ExcelApp = Nothing 以上です。なお、VBの参考書は入門書だけ持っていますが、このようなことは書いてありません。従って上のコードも意味もわからず、ネットから拾ってきたまま使用しています。参考書または、Webサイトを紹介して頂ければ有り難いです。

  • エクセル付きVBでファイルオープンすると止まる

    エクセル付きのVBでショートカットキーでマクロを起動し、他のエクセルのファイル(ブック)をオープンするとプログラムが止まり、以降のマクロを処理できません。VBの画面で実行ボタンをクリックするとマクロ通りに正しく処理されるので、マクロ自体に問題はないと思います。 どなたか同様の経験をされた方、もしくは解決方法をご存知の方、解決方法を教えてください。 マクロは「Workbooks.open("パス\ファイル名")」または「workbooks.open FileName:="パス\ファイル名"」としており、どちらも止まります。

  • vb から Excel vba をうまく操作できない。

    VB 初心者で、困っています。 Excel VBA でいろんなツールを作成していますが数が多くなったので、今回、このツールを呼び出すメニューを作ろうと考えて、VB2008でメニューを作成したのですがうまく動作しません。 Excel VBAで作成しているツールは、単独で動作させれば、一番最後に新たなExcelファイルを作成・画面表示でツール自体は終了。となるのですが、VBメニューからツールを起動させると、最後に作成しているはずのExcelファイルが画面表示されません。(ファイルは作成されているみたいですが・・・) ・Excel VBA の新たなファイルへの出力部分です。     Worksheets("シート").Copy     Unload Me     Application.WindowState = xlMaximized     Workbooks("●●.xls").Close SaveChanges:=False ・VB2008 で呼び出すメニューボタン部分です。 Dim Exap As Object Exap = CreateObject("Excel.application") Exap.Workbooks.open("C:\●●.xls") Exap = Nothing よろしくお願いします。

  • VBからエクセルを起動。そのあとエクセルを終了

    教えてください。 VBからエクセルを起動します。 そのあと、エクセルのシートの上にデータを貼り付けます。そして、エクセルを終了します。 しかし、エクセルが終了しません。 タスクバー上のエクセルをクリックすると終了します。 どうして、このような現象が起こるのかわかりません。 教えてください。 下記に同様のサンプルを書きました 誤記入があるかも知れませんが このような感じのプログラムです。 以上、よろしくお願いします。 public sub test Dim XApp as Excel.Application Dim nfilename as string Dim xlBook As Object Dim xlSheet As Object ' エクセルを起動 Set xlApp = New Excel.Application nfilename ="AAAA.xls" ' 指定されたファイルを開く Call xlApp.Workbooks.Open(nfilename) Set xlBook = xlApp.ActiveWorkbook Set xlSheet = xlBook.Worksheets(1) 'フォームを貼り付ける xlSheet.Range("a1").PasteSpecial      'ファイル名の作成 Filename="BBBB.xls" '保存 ChDir "C:\" xlBook.SaveAs Filename:=Filename,FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xlSheet = Nothing xlBook.Close True Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End sub

  • ExcelのVBで、別のExcelファイルを開いてactiveにするには

    ExcelのVBについての質問です。 「A.xlsのフォームでパラメータを入力し、その結果に応じて 別のExcelファイル(例えばB1.xls)を自動的に開く。 ユーザーは、B1.xlsに何か入力した後、B1.xlsを保存 終了する。 最初に戻って再びA.xlsのフォームに入力し... を繰り返す」 という作業を行いたいのです。 A.xlsでユーザーフォームをactiveにしたままだと、 B1.xlsを呼び出したときに、A.xlsのフォームがactiveで B1.xlsへ入力できません。(B1.xlsをActiveにしても A.xlsのユーザーフォームの方が優先されます) かと言って、A.xlsのフォームをhideしてから B1.xlsを呼び出すと、再びactiveにする際 B1.xlsを保存終了したことをA.xls側から検出する 必要があるのですが、この方法がわかりません。 何かよい方法はないでしょうか

専門家に質問してみよう