お世話なっております。今回はVB6を使ったCSVファイルの処理について、聞きたいことがあります。サーバからファイルをダウンロードし、開いた後に、手入力の処理があって、その処理が終わるまで、プログラムを待機状態にして頂きたいのですが、そのソースの書き方についてよく分からないので、どなたが教えて頂けませんか。宜しくお願いいたします。
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlBook = xlApp.Workbooks.open(myFile)
Set xlSheet = xlBook.Worksheets("ml")
xlApp.Visible = True
Form1.SetFocus
Label1.Caption = vbCrLf & " ☆ ML-CSVファイルを開きました ☆ "
xlApp.DisplayAlerts = False
'データ処理を行う
*****************************************************
Do While xlBook.StillExecuting
DoEvents ' 前の処理が終わるまで待機
Loop
xlBook.SaveAs myFile, xlCSV
xlApp.DisplayAlerts = True
xlBook.Close
Form1.SetFocus
Label1.Caption = vbCrLf & " ☆ ML-CSVファイルを閉じました ☆ "
補充です:
Do While xlBook.StillExecuting
DoEvents ' 前の処理が終わるまで待機
Loop
を使うと、実行時エラー'438'
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
というエラーが出ます。
> Do While xlBook.StillExecuting
> DoEvents ' 前の処理が終わるまで待機
> Loop
>を使うと、実行時エラー'438'
>「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
>というエラーが出ます。
そりゃ、自分で勝手に考えた命令だからでしょ?(^^;)
『用意されてない命令を書かれても何をすればいいか分かりません。』という
意味のエラーメッセージが出ているわけですが、どこが疑問なんですか???
>手入力の処理があって、その処理が終わるまで、プログラムを待機状態にして頂きたいのですが
このままでは終わりの判断ができません。
10分くらいトイレに行ってたら入力は終わったと勝手に判断して
保存していいのですか?どういう条件で終わりだと判断しますか?
普通は[ファイル保存]のボタンを用意するなり、何らかのユーザの
アクションで次の処理を行います。
特攻隊長まるるうさん、早速返事してくださって、ありがとうございます。
終わりの判断は、CSVファイルの閉じるボタンが押された時点となります。
やはりボタン一つでファイルのダウンロード、編集、アップロードすることは無理でしょうか。
今、「ファイル保存」というボタンを作って、実行してみます。
ご指導ありがとうございます。
>終わりの判断は、CSVファイルの閉じるボタンが押された時点となります。
というか Excel のブックを閉じる時ね?WithEvents を使えば Excel 側の
イベントをVB側で取れると思います。
>今、「ファイル保存」というボタンを作って、実行してみます。
そちらを採用するなら上の処理は必要なくなりますね。
>やはりボタン一つでファイルのダウンロード、編集、アップロードすることは無理でしょうか。
実力と設計次第でしょう。
特攻隊長まるるうさん、ご指導ありがとうございます。
とりあえず「ファイル保存」というボタンを作って、プログラムを作成しました。
また、WithEventsの使い方について、一応調べてところ、
Dim WithEvents MyButton As Office.CommandBarButton
という使い方で宜しいですか。
またご指導を宜しくお願い致します。
>とりあえず「ファイル保存」というボタンを作って、プログラムを作成しました。
>また、WithEventsの使い方について、一応調べてところ、
>Dim WithEvents MyButton As Office.CommandBarButton
>という使い方で宜しいですか。
ごっちゃになってるかもね。
まず、ボクが最初に意図した
>「ファイル保存」というボタンを作って
はフォーム上にボタンを追加するということです。CSVファイルを
閉じた時には保存しません。
ユーザに編集作業が終わった時点でフォーム上のボタンを押して
もらいます。そのイベントをきっかけにCSVファイルを保存して
終了します。
>Dim WithEvents MyButton As Office.CommandBarButton
# ローカル変数で無いなら、Dim はやめて Private とかにしてください。
上のコードを使うとすると、VBからExcelメニューを追加してExcelメニューの
ボタンを新しく用意するということ?別にそれでもいいけど、
>CSVファイルの閉じるボタンが押された時点となります。
の閉じるボタンってどれのこと?タイトルバーの右端の×ボタンの
ことではないの?あれは CommandBarButton じゃないけど?。
WithEvents を使うならボタンのイベントではなくって、
Workbook.BeforeClose イベントとかでいいと思う。。。
横から失礼します。
色々みてるともう、大変なんだろうと思うので
Webbrowserコントロールでダウンロードして
そこに表示させて処理を行ってもらい、
終了時にquery_unloadあたりで
inetかなにかでアップしてしまうというのはどうでしょうか。
inetならstillexecutingは使えますしね(^^;
多分これが楽かなと思いました。
ツイート | ![]() |