tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
すでに起動中のExcelファイルをVBから編集する(VB6.0 基本編) ( No.19 )  [親スレッドへ]
日時: 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

但し、上記もファイルの起動状態で取得できない場合がありますので注意して下さい。



 [スレッド一覧へ] [親スレッドへ]