- ベストアンサー
VB6.0でエクセルを扱うプログラムについて
こんにちは。VB初級者です。宜しくお願いします。 現在、VB6.0でエクセルの表を操作するようなプログラムを作っています。下に書いたプログラム(わかりにくいとは思いますが、ご教授お願いします。)で値の更新は出来たようなのですが、実際に表を開こうとすると”不正な処理が行われました”というエラーメッセージが出て開くことが出来ません。ADOオブジェクトでエクセルを扱うのがちょっとおかしい(?)のかもしれませんが、今回はEXCELオブジェクトは使わないという方針です。 自分ではどこが間違っているかわかりませんでしたので教えて頂ければと思います。宜しくお願い致します。 Private Sub Command1_Click() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.Properties("Extended Properties") = "Excel 8.0" cn.Properties("Data Source") = "C:\VB\株価管理\株価.xls" cn.Open Dim cmd As ADODB.Command Dim mySQL As String mySQL = "update [株価$] set 高値 =10000 where 高値 = 7" Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = mySQL cmd.Execute Set rst = New ADODB.Recordset rst.Source = "Select * From [株価$]" rst.ActiveConnection = cn rst.CursorType = adOpenDynamic rst.Open , , , , adCmdText Do While Not rst.EOF Debug.Print rst.Fields("高値") rst.MoveNext Loop rst.Close cn.Close Set rst = Nothing Set cn = Nothing Set cmd = Nothing End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私は力なく、直接の答えを答えられそうにありません。しかし、コーディング内容でなく、環境などの問題ではないでしょうか。 私はVB6を使える環境になく、アクセス2000で下記やって見ました。うまくいくようですよ。 参考にしてください。 エクセルにシートの「Sheet1」で 下記を作りました。 (でたらめデータですみません) A列 B列 C列 氏名 株価 高値 山田 18.25 8 大田 18.45 7 大川 7 8 近藤 7 7 下田 1 8 大塚 4 1 にしました。 Private Sub Command1_Click() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.Properties("Extended Properties") = "Excel 8.0" cn.Properties("Data Source") = "C:\Documents and Settings\xxx\xxxxxx\あああ.xls" cn.Open Dim cmd As ADODB.Command Dim mySQL As String mySQL = "update [Sheet1$] set 高値 =10000 where 高値 = 7" Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = mySQL cmd.Execute Set rst = New ADODB.Recordset rst.Source = "Select * From [Sheet1$]" rst.ActiveConnection = cn rst.CursorType = adOpenDynamic rst.Open , , , , adCmdText '------ Do While Not rst.EOF MsgBox Nz(rst.Fields("株価")) rst.MoveNext Loop '----- rst.Close cn.Close Set rst = Nothing Set cn = Nothing Set cmd = Nothing End Sub 結果 氏名 株価 高値 山田 18.25 8 大田 18.45 10000 大川 7 8 近藤 7 10000 下田 1 8 大塚 4 1 Msgboxも正しく出ます。 データ関連以外は変えてませんが、 NZ関数は、止まるのでアクセス用に入れました。
その他の回答 (1)
- fortranxp
- ベストアンサー率26% (181/684)
見たところ全然動かない理由が不明です。 VB6.0Learning+EXCEL2003で実行しましたが 高値=7 のとき 10000になりました。 プロジェクトのツールバーで参照設定やコンポーネントでADOを使用可能にされてますか? #1さんのMsgBox Nz(rst.Fields("株価"))は"高値" ですね。
お礼
回答有難うございます。 まったく動かないという訳ではなく、更新したファイルが何故かエクセルでは開くことが出来ないという状態でした。 ->プロジェクトのツールバーで参照設定やコンポーネントでADOを使用可能にされてますか? 確信したところ、チェックは入っていました。 結局、原因はわからずじまいでしたが、Recordsetに関連した余分なプログラム個所を取り除くことで正常動作しました。 有難うございました。
お礼
早速答えていただき有難うございます。 あのプログラムを実行すると最終的にEXCELファイルが壊れるという状況でしたが、ACCESS2000では問題なかったですか。ということはプログラムには問題がないのでしょうか? あと指摘して頂いた環境設定ではEXCELファイルのプロパティ等をいじってみましたが、うまくいきませんでした。とりあえずいじれる所をいじって頑張ってみます。 有難うございました。