OLEコンテナコントロールを使うには?

解決


xりこたんx  2006-12-01 20:27:02  No: 97311

こんにちは、
VB6を勉強し始めたばかりです。
OLEコンテナコントロールを使用してExcelが利用できることを知りました。
早速、フォームにOLEコントロールとコマンドボタンを配置して
次を実行しました。
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 1000
    Form1.OLE_Excel.object.Sheets("sheet1").Cells(i, 1) = i
Next i
MsgBox "終了"
End Sub

結果は正しく反映されるのですが、”終了”が表示されるまでに
20秒くらいかかります。
私のコードに不完全な部分があるのでしょうか?
実際は、配列(4000,2)ほどのデータを扱いたいと考えています。
(Win2000、Excel2000です。)

よろしくお願いします。


ヤマ@文系  2006-12-02 10:23:26  No: 97312

上のコードの
ループ処理のところにdoevents
OLEコントロール  visible=false
で7375ミリ秒から4484秒になりました。


ヤマ@文系  2006-12-03 03:14:21  No: 97313

訂正:4484秒->4484ミリ秒(^^;


xりこたんx  2006-12-04 19:37:18  No: 97314

ヤマ@文系さん、ありがとうございます。
経過を表示させない方法ですね。
私の環境では、思ったほど効果がないみたいですが
この処理は有効と思うので残しておきます。

このくらいの時間がかかるものなのでしょうね。
もう少し粘ってみます。

(確認・返事が遅くなってすみませんでした。)


ヤマ@文系  2006-12-05 09:41:05  No: 97315

ただExcelを利用したいというのであれば
参照設定やcreateobjectなどで扱うという方法もあります。
'花ちゃん様のサイトにサンプルが多数ありますのでご参考に
'http://hanatyan.sakura.ne.jp/

doeventsの回数を減らすと速度があがるかもしれません
if i mod 100 =0 then doevents
など


xりこたんx  2006-12-08 02:12:18  No: 97316

ヤマ@文系さん、ありがとうございます。
VB6からexcelをコントロールした方がいいようですね。
サンプルを参考にがんばってみます。

ありがとうございました。


xりこたんx  2006-12-12 19:11:21  No: 97317

解決済みですが、配列を使ったら速くなりました。
参考までに!

Private Sub Command1_Click()
Dim i As Integer
Dim Hairetu(1 To 1000, 1) As Variant

Form1.OLE_Excel.Visible = False

For i = 1 To 1000
    Hairetu(i, 0) = i
Next i
Form1.OLE_Excel.object.Sheets("sheet1").range("A1:A1000") = Hairetu
Form1.OLE_Excel.Visible = True
MsgBox "終了"

End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加