こんにちは、
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です。)
よろしくお願いします。
上のコードの
ループ処理のところにdoevents
OLEコントロール visible=false
で7375ミリ秒から4484秒になりました。
訂正:4484秒->4484ミリ秒(^^;
ヤマ@文系さん、ありがとうございます。
経過を表示させない方法ですね。
私の環境では、思ったほど効果がないみたいですが
この処理は有効と思うので残しておきます。
このくらいの時間がかかるものなのでしょうね。
もう少し粘ってみます。
(確認・返事が遅くなってすみませんでした。)
ただExcelを利用したいというのであれば
参照設定やcreateobjectなどで扱うという方法もあります。
'花ちゃん様のサイトにサンプルが多数ありますのでご参考に
'http://hanatyan.sakura.ne.jp/
doeventsの回数を減らすと速度があがるかもしれません
if i mod 100 =0 then doevents
など
ヤマ@文系さん、ありがとうございます。
VB6からexcelをコントロールした方がいいようですね。
サンプルを参考にがんばってみます。
ありがとうございました。
解決済みですが、配列を使ったら速くなりました。
参考までに!
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
ツイート | ![]() |