Excel VBA質問箱 IV

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

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


28863 / 76732 ←次へ | 前へ→

【53159】Re:2つのファイルのマクロの同時実行
発言  ichinose  - 07/12/17(月) 21:55 -

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

>そろそろ私の能力では限界に来ているようで、コードを整理して教えを請いたいと
>思います。
>
>現時点での問題は
>1.Myapp.Run "ura.xls!Module1.ECGetData" で ura.xlsのマクロを実行すると
>  ura.xls が表示された状態で、omote.xls は、マクロの実行待ちの状態にな
>  ってしまう。
>2.ura.xlsで取得したデータを別インスタンスで開いているomote.xlsのあるセル
>  へ書き込む方法がわからない。
>の2点です。

もうちょっと簡単な例題しましょう!!

ブックを二つ用意します。

1のブック dsptime.xls
 機能 ユーザーフォームに時間経過を表示する機能を持つ

2のブック setcell.xls
 機能 setcell.xlsの最左端シートのA列に1から20000までの数値を書き込む
    時間を計測し、セルB1に設定する


dsptime.xls

ユーザーフォーム(Userform1)を一つ用意してください。
  このUserform1には、
     Label1 開始時間の表示
     Label2 現在の時間を表示
  という二つのラベルを用意してください。

  ふたつのラベルには、hh:mm:ss形式で時刻を表示しますので、それに
  足りうる幅をラベルは有します。

コードです。


Thisworkbookのモジュール
'==================================================================
Sub set_proc()
  Application.OnTime Now(), "thisworkbook.dspform"
End Sub
'==================================================================
Sub dspform()
  UserForm1.Show
End Sub
'==================================================================
Sub unloadform()
'  Userform1の消去
  Unload UserForm1
End Sub
'==================================================================
Sub hideform()
'  時間表示を停止する
  UserForm1.dsp = False
End Sub
'==================================================================
Sub set_tm(rng As Range)
'  開始から、停止までの時間を指定されたセルに設定する 
  rng.Value = UserForm1.時間
End Sub

Userform1のモジュールに
'===================================================================
Option Explicit
Public dsp As Boolean
Public 時間 As Date
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'===================================================================
Private Sub UserForm_Activate()
  dsp = True
  Label1.Caption = Format([now()], "hh:mm:ss")
  Do While dsp = True
    Label2.Caption = Format([now()], "hh:mm:ss")
    DoEvents
    Sleep 300
    Loop
  時間 = CDate(Label2.Caption) - CDate(Label1.Caption)
  Me.Hide
End Sub
'===================================================================
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode <> 1 Then
    Cancel = True
    End If
End Sub


setcell.xlsのコード
標準モジュールに
'=====================================================================
Sub main()
  Dim g0 As Long
  Dim ex As Application
  Dim dbk As Excel.Workbook
  Set ex = CreateObject("excel.application")
  Set dbk = ex.Workbooks.Open(ThisWorkbook.Path & "\disptime.xls")
  ex.Run dbk.Name & "!thisworkbook.set_proc"
  ThisWorkbook.Activate
  Worksheets(1).Activate
  Range("a:a").ClearContents
  For g0 = 1 To 20000
    With Cells(g0, 1)
     .Select
     .Value = g0
     End With
    Next
  Worksheets(1).Range("b1").NumberFormatLocal = "hh:mm:ss"
  ex.Run dbk.Name & "!thisworkbook.hideform"
  ex.Run dbk.Name & "!thisworkbook.set_tm", Worksheets(1).Range("b1")
  ex.Run dbk.Name & "!thisworkbook.unloadform"
  dbk.Close False
  ex.Quit
End Sub


上記のブックを同じフォルダ上に保存した後、
setcell.xlsだけを開いて、mainを実行して動作とコードを確認してください。

Application.Run でそのまま目的のコードを実行させると
同期が取れてしまいます。

非同期に作動するように工夫することがポイントですよ!!

0 hits

【53100】2つのファイルのマクロの同時実行 yhar 07/12/14(金) 16:47 質問
【53104】Re:2つのファイルのマクロの同時実行 ichinose 07/12/15(土) 9:36 発言
【53142】Re:2つのファイルのマクロの同時実行 yhar 07/12/17(月) 11:19 質問
【53149】Re:2つのファイルのマクロの同時実行 yhar 07/12/17(月) 17:22 質問
【53159】Re:2つのファイルのマクロの同時実行 ichinose 07/12/17(月) 21:55 発言
【53166】Re:2つのファイルのマクロの同時実行 一... ichinose 07/12/18(火) 7:41 発言
【53168】Re:2つのファイルのマクロの同時実行 追伸 ichinose 07/12/18(火) 8:28 発言
【53169】★まずは御礼★ 追伸 yhar 07/12/18(火) 8:45 お礼
【53185】Re:2つのファイルのマクロの同時実行 ichinose 07/12/18(火) 21:27 発言
【53430】【御礼】2つのファイルのマクロの同時実行 yhar 08/1/10(木) 16:55 お礼
【53143】Re:2つのファイルのマクロの同時実行 Who Me? 07/12/17(月) 11:34 発言
【53144】Re:2つのファイルのマクロの同時実行 yhar 07/12/17(月) 13:44 お礼

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