アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。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

A 回答 (2件)

私は力なく、直接の答えを答えられそうにありません。

しかし、コーディング内容でなく、環境などの問題ではないでしょうか。
私はVB6を使える環境になく、アクセス2000で下記やって見ました。うまくいくようですよ。
参考にしてください。
エクセルにシートの「Sheet1」で
下記を作りました。
(でたらめデータですみません)
A列   B列  C列
氏名株価高値
山田18.258
大田18.457
大川78
近藤77
下田18
大塚41
にしました。
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.258
大田18.4510000
大川78
近藤710000
下田18
大塚41
Msgboxも正しく出ます。
データ関連以外は変えてませんが、
NZ関数は、止まるのでアクセス用に入れました。
    • good
    • 0
この回答へのお礼

早速答えていただき有難うございます。

あのプログラムを実行すると最終的にEXCELファイルが壊れるという状況でしたが、ACCESS2000では問題なかったですか。ということはプログラムには問題がないのでしょうか? あと指摘して頂いた環境設定ではEXCELファイルのプロパティ等をいじってみましたが、うまくいきませんでした。とりあえずいじれる所をいじって頑張ってみます。

有難うございました。

お礼日時:2005/06/12 22:29

見たところ全然動かない理由が不明です。


VB6.0Learning+EXCEL2003で実行しましたが
高値=7 のとき 10000になりました。
プロジェクトのツールバーで参照設定やコンポーネントでADOを使用可能にされてますか?

#1さんのMsgBox Nz(rst.Fields("株価"))は"高値"
ですね。
    • good
    • 0
この回答へのお礼

回答有難うございます。
まったく動かないという訳ではなく、更新したファイルが何故かエクセルでは開くことが出来ないという状態でした。

->プロジェクトのツールバーで参照設定やコンポーネントでADOを使用可能にされてますか?
確信したところ、チェックは入っていました。

結局、原因はわからずじまいでしたが、Recordsetに関連した余分なプログラム個所を取り除くことで正常動作しました。
有難うございました。

お礼日時:2005/06/13 22:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!