■13288 / inTopicNo.1) |
Excel操作中のプログレスバーがうまく動作しない |
□投稿者/ こぱ (1回)-(2008/01/26(Sat) 19:16:35)
|
分類:[.NET 全般]
開発環境:WindowsXP,Excel2003 使用言語:VisualBasic6.0
VisualBasicを始めて2週間程で、まだ初心者です。 このような質問サイトに投稿するのも初めてです。 何かと失礼があると思いますが、その際にはご指摘を お願いします。
VBでExcelを操作し、データの更新及び上書き保存を行う プログラムを作成しています。 処理時間が20秒程かかる為、下記URLのサンプルを使用し、 処理中にプログレスバーを表示するようにしました。
http://www.winapi-database.com/CommonControls/ProgressBar/progressbar.html
Form1にあるコマンドボタンを押すと、コマンドクリックの イベントにより、プログレスバーを設定したForm2を 表示します。
続けて、Form2_Loadイベントでプログレスバーのカウントを 開始した後、Form1へ戻り、Excel操作を実行するように しました。
実際には、Form1のクリックイベントの中にExcel操作を入れて いますので、同時進行すると考えたのですが・・・
実際の動作は、コマンドボタンを押すとプログレスバーが 表示されますが、カウントが始まらず、Excelの処理が 開始され、Excel処理が終了してからプログレスバーの カウントが開始されてしまいます。
デバックすると、プログレスバーの起動処理を行った後に Excel処理へ移行しているのですが、画面に表示される内容は 前述のようになってしまいます。
Form1のコマンドボタンとForm2の記述は下記の通りです。 Form2に関しては、サンプルプログラムをほぼ丸ごと使用させて 頂き、Form2_Load時に起動するようにしました。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 'Form1のコマンドボタンクリック時の設定 Private Sub Command1_Click()
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim sndForm As Form2
Set sndForm = Form2 Call sndForm.Show
Set xlApp = CreateObject("Excel.Application") Set xlBook1 = xlApp.Workbooks.Open(〜〜〜〜〜 Set xlSheet =~〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
’以下Excel操作の記述
End Sub −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
'Form2_Loadイベント時の設定(プログレスバーの起動) −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Dim cnt As Long 'カウント用 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Private Sub Form_Load() 'タイマーイベントを禁止 Me.Timer1.Enabled = False 'コモンコントロールを初期化する Dim cc As tagINITCOMMONCONTROLSEX cc.dwSize = Len(cc) cc.dwICC = ICC_PROGRESS_CLASS 'プログレスバーの作成 hProgWnd = CreateWindowEx(0, PROGRESS_CLASS, "Progress Bar", _ WS_CHILD Or WS_VISIBLE Or WS_BORDER Or PBS_SMOOTH, _ 10, 10, 290, 20, Me.hWnd, 0, App.hInstance, 0) '範囲の設定(0〜100) Call SendMessage(hProgWnd, PBM_SETRANGE, 0, GetLong(100, 0)) 'ステップの設定 Call SendMessage(hProgWnd, PBM_SETSTEP, 1, 0) 'プログレスバーの値を0にする Call SendMessage(hProgWnd, PBM_SETPOS, 0, 0) cnt = 0 'タイマーイベントを許可 Me.Timer1.Interval = 100 '100ミリ秒 Me.Timer1.Enabled = True
End Sub −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Private Sub Timer1_Timer() 'プログレスバーのカウント cnt = cnt + 1 Call SendMessage(hProgWnd, PBM_SETPOS, cnt, 0) Me.Label1.Caption = Str(cnt) + "%" If cnt > 99 Then 'カウントを終了 cnt = 0 Me.Timer1.Enabled = False End If End Sub −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Call sndForm.ShowのところでForm2_loadイベントが発生し、 その後ExcelApplicationに移動しているのをデバックで 確認しています。
ちなみに、Excel処理の動作とプログレスバーの動作は、 単体ではどちらも正常に動く事を確認しています。
説明がうまく出来ないのですが、お分かり頂けたでしょうか。 よろしくお願いします。
|
|