Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4942 / 13646 ツリー ←次へ | 前へ→

【53431】別インスタンス間でのセルの参照 yhar 08/1/10(木) 17:07 質問[未読]
【53433】Re:別インスタンス間でのセルの参照 ichinose 08/1/10(木) 22:34 発言[未読]
【53457】Re:別インスタンス間でのセルの参照 yhar 08/1/14(月) 12:53 質問[未読]
【53459】Re:別インスタンス間でのセルの参照 ichinose 08/1/14(月) 17:36 発言[未読]
【53460】Re:別インスタンス間でのセルの参照 yhar 08/1/14(月) 18:46 お礼[未読]

【53431】別インスタンス間でのセルの参照
質問  yhar  - 08/1/10(木) 17:07 -

引用なし
パスワード
   いつもお世話になっております。
プログラム上の都合で2つのエクセルを別インスタンス(別ウィンドウ)として立上てマクロを実行しています。

この場合、別インスタンス間でセルの値を参照することは可能でしょうか?現状、別インスタンスでの起動は必須ですが、その前提で代替の方法は無いでしょうか?

よろしくお願いします。

【53433】Re:別インスタンス間でのセルの参照
発言  ichinose  - 08/1/10(木) 22:34 -

引用なし
パスワード
   ▼yhar さん:
こんばんは。

>いつもお世話になっております。
>プログラム上の都合で2つのエクセルを別インスタンス(別ウィンドウ)として立上てマクロを実行しています。
>
>この場合、別インスタンス間でセルの値を参照することは可能でしょうか?現状、別インスタンスでの起動は必須ですが、その前提で代替の方法は無いでしょうか?

具体的な仕様を提示してほしいのですが(極簡単な)

新規ブックの標準モジュールに
'===================================================
Sub main()
  Dim app As Application
  With CreateObject("excel.application")
    .Visible = True
    With .Workbooks.Add
     With .ActiveSheet
       .Range("a1").Value = "別インスタンスのExcel上のブックに書き込み"
      
       Range("a5").Value = .Range("a1").Value
       AppActivate Application.Caption
       DoEvents
       MsgBox "別インスタンスのセルの値を参照できました" & _
          vbCrLf & "別インスタンスで作成したブックのセルA1と比較してください"
      
       End With
     End With
    End With
End Sub

こんなことが出来ればよいのですか?

【53457】Re:別インスタンス間でのセルの参照
質問  yhar  - 08/1/14(月) 12:53 -

引用なし
パスワード
   ichinoseさん

いつも貴重なアドバイスをありがとうございます。
さて、御教示頂いた下記のコードでは
●mainから開いた別インスタンスのワークシートのセルを
 「With」を使って一連の記述で参照する。
と言う形になっています。

具体的な仕様も書かずに恐縮ですが、やりたいことは
●既に起動している別インスタンスのワークシートのセル
 の値を
●一定の周期で参照して取り込む
と言うことです。

もう少し具体的?に言うと

Dim app As Application
Set app = 開いている別インスタンスのファイルの名前
Range("a5").Value = app.Worksheets("sheet1").Range("a1").Value

と言った記述で参照出来ないかと言うことです。
ご提案のコードを見る限り出来そうな気がしますが、上のSetとDimの
ところをどう表記して良いのか… 基本が分かっていないのが良く分
かる今日この頃です。

ちなみに下記のコードで別インスタンス起動をしています。
Dim Myapp As Object
Set Myapp = CreateObject("excel.Application")
  With Myapp
    .Visible = True
    .Workbooks.Open ThisWorkbook.Path & "\ura.xls"
  End With

▼ichinose さん:
>▼yhar さん:
>こんばんは。
>具体的な仕様を提示してほしいのですが(極簡単な)
>
>新規ブックの標準モジュールに
>'===================================================
>Sub main()
>  Dim app As Application
>  With CreateObject("excel.application")
>    .Visible = True
>    With .Workbooks.Add
>     With .ActiveSheet
>       .Range("a1").Value = "別インスタンスのExcel上のブックに書き込み"
>      
>       Range("a5").Value = .Range("a1").Value
>       AppActivate Application.Caption
>       DoEvents
>       MsgBox "別インスタンスのセルの値を参照できました" & _
>          vbCrLf & "別インスタンスで作成したブックのセルA1と比較してください"
>      
>       End With
>     End With
>    End With
>End Sub
>
>こんなことが出来ればよいのですか?

【53459】Re:別インスタンス間でのセルの参照
発言  ichinose  - 08/1/14(月) 17:36 -

引用なし
パスワード
   ▼yhar さん:
こんばんは。


>具体的な仕様も書かずに恐縮ですが、やりたいことは
>●既に起動している別インスタンスのワークシートのセル
> の値を
>●一定の周期で参照して取り込む
>と言うことです。
>
>もう少し具体的?に言うと
>
>Dim app As Application
>Set app = 開いている別インスタンスのファイルの名前
>Range("a5").Value = app.Worksheets("sheet1").Range("a1").Value
>
>と言った記述で参照出来ないかと言うことです。


>ご提案のコードを見る限り出来そうな気がしますが、上のSetとDimの
>ところをどう表記して良いのか… 基本が分かっていないのが良く分
>かる今日この頃です。
>


>ちなみに下記のコードで別インスタンス起動をしています。
でしたら、下記のMyappというオブジェクトか これを基に開いたブックオブジェクトを
いつでも参照可能にしておけば、よいですね!!


public Myapp As Object
Public mybook as workbook


sub main()
Set Myapp = CreateObject("excel.Application")
>  With Myapp
>    .Visible = True
    set mybook=.Workbooks.Open(ThisWorkbook.Path & "\ura.xls")
>  End With

なんてしておけば、

Range("a5").Value = mybook.Worksheets("sheet1").Range("a1").Value

で参照可能です。私なら、たぶんこの方法が第一候補ですね!!

他には
ThisWorkbook.Path & "\ura.xls"このブックが既に別インスタンスのExcelで
開かれている状態なら

Sub test2()
  Dim bk As Workbook
  Set bk = GetObject(ThisWorkbook.Path & "\ura.xls")
  MsgBox bk.Worksheets("sheet1").Range("a1").Value
End Sub

こんな方法でもブックオブジェクトが取得できます。

大抵、前者でうまくいきますが、試してみてください

【53460】Re:別インスタンス間でのセルの参照
お礼  yhar  - 08/1/14(月) 18:46 -

引用なし
パスワード
   ichinoseさん

いつもいつもありがとうございます。
自分なりにあれこれ試してみて、下記の記述を加えることで別インスタンスで開いたセルの値を取り込むことが出来ました。

Worksheets("Sheet1").Range("D5").Value = Myapp.ActiveSheet.Range("B8").Value

これでほぼ思い通りのプログラムが完成できそうです。
た・だ・し…
ura.xlsでのセルへの書込み(入力開始からEnterまで)に時間が掛かるとその間マクロは止るようです。この辺は参照周期などを上手く見繕ってやる必要がありそうです。

この親記事の2つの方法についてもしっかり解釈するよう勤めます。
ご親切な対応本当にありがとうございました。

4942 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free