- 日時: 2007/08/18 19:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:起動中のExcel,表示しているExcel,フルパス * ***********************************************************************************
元質問:表示中のエクセルの編集 - ひろ 2005/10/20-10:39 No.4690
VBからでは、普通にマウスでダブルクリックなどで表示したエクセルの編集を行う事は可能でしょうか?
----------------------------------------------------------------------------------- Re^2: 表示中のエクセルの編集 - GOD 2005/10/20-15:35 No.4703 ----------------------------------------------------------------------------------- > 試しては、いませんが、Excel で開いて使っているファイルを VB から編集する事は > できなかったはずです。(読み取り専用でしか開けない) と、当時は答えていたのですが。(上記は、私(花ちゃん)の怪答)
GetObjectでできないかな。 set xxx = GetObject(Path) ただ、GetObjectする前にファイルが開かれているかどうかのチェックが出来るか微妙だけど。 ---------------------------------------------------------------- と、GOD さんが回答されていたのだが、元質問者からの返事もなく、私も試しておらず そのままになっていたのですが、当時このサイトで GetObject を使ってExcelを起動していた サンプルが残っていたので改めて試して見ましたので、ここに掲載しておきます。
----------------------------------------------------------------------------------- すでに起動中のExcelファイル(ダブルクリック等で)をVBから編集する - 花ちゃん 2007/08/18 -----------------------------------------------------------------------------------
Option Explicit
Private Sub Command1_Click() '★こちらは、GetObject 関数を使って起動(実行時バインディング) '従って参照設定は必要ありません。
Dim xlApp As Object Dim xlFilePath As String Dim xlSheetName As String 'エクセルのファイル名 xlFilePath = "C:\test1.xls" 'ブックのシート名 xlSheetName = "Sheet1" 'エクセルへ参照 第二引数を省略すると起動中のファイルを使用する Set xlApp = GetObject(xlFilePath) xlApp.Application.Visible = True xlApp.Windows(1).Visible = True
'書込み方法色々 xlApp.ActiveSheet.Cells(4, 1).Value = "セル(4,1)に書込"
With xlApp.Worksheets(xlSheetName) .Range("A1") = "セル(A1)にテスト書込み" .Cells(2, 2).Value = "セル(2,2)にテスト書込みです" With .Cells(2, 2) .Font.Size = 18 'フォントサイズ .Font.Name = "MS P明朝" 'フォントの種類 .Font.Bold = True '太字に設定 End With 'A列の幅を8に設定 .Cells(1, 1).ColumnWidth = 8 '1行目の高さを26に設定 .Rows(1).RowHeight = 26
End With
'シートをExcelから印刷 xlApp.Worksheets(xlSheetName).PrintOut '3秒間表示しておく xlApp.Application.Wait Now + TimeValue("0:00:3") '保存時の問合せを非表示に設定 xlApp.Application.DisplayAlerts = False 'Worksheet を名前をつけて保存します xlApp.SaveAs xlFilePath 'エクセルの終了 xlApp.Application.Quit 'オブジェクトを解放 Set xlApp = Nothing End Sub
------------------------------------------------------------------------------ Set xlApp = GetObject(xlFilePath) 上記のように、第二引数を省略すると起動中のファイルを使用し、起動していなければ 新たに起動します。
但し、その為に予め、起動中のファイルのパスが解っている必要があります。
起動しているかどうかは、ここの逆引きヘルプの指定のファイルが使用中かどうかを調べるで 調べる事ができます。
起動中のExcelファイルが1個だけなら、 Set xlApp = GetObject(, "Excel.Application") のようにすれば取得する事ができます。
又、ファイルをマウスのダブルクリック等で複数表示している場合は、下記のようにすれば 起動しているExcelファイルのフルパスを取得できます。
Private Sub Command2_Click() Dim xlApp As Object Set xlApp = GetObject(, "Excel.Application") Dim myBook As Object For Each myBook In xlApp.Workbooks '起動中のExcelファイルのフルパスを取得 Debug.Print myBook.FullName Next 'xlApp.Application.Quit '起動中の全てのExcelを終了します。 Set xlApp = Nothing 'オブジェクトを解放 End Sub
但し、上記もファイルの起動状態で取得できない場合がありますので注意して下さい。
|