- 締切済み
officeでのOLEについて
もともとはEXCEL2000XPのVBAでマクロを作り、ACCESS2000のMDBを使用しています。 これはうまく機能しています。 これを、ACCESS97に落としたら、EXCEL2000からMDBを参照すると、NOMATCHがうまく機能してくれません。 インデックキーでテーブルを読みに行くのですが、NOMATCHでは、レコードがあるにもかかわらず、常にTRUEになってしまいます。 ACCESS97へのコンバート処理は、ACCESS2000にて旧バージョンへの変換を使用しました。 それに、ACCESS97でも、NOMATCHがうまく機能していません。 ACCESSはデータとプログラムと別々に作成しており、テーブルのリンクで結合しています。 アドインに問題があるのかな、と思ったりしているのですが良く分かりません。 どなたか御教授願います。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
( ・・)?ン なぜだろう。。。 WIN2000SERVER_SP2 ACCESS2000_SP2 環境で、NoMatch はうまく反応してくれました。 で思ったのですが、SEEKを使わないのでよければ、SQL文で拾う方法があります。 これでだめなら、DBへの接続方式をADOにしてあげれば、きちんとできるような気がします。 Private Const DBName = "c:\DATA97.mdb" Private DB As Database Private BGrc As Recordset Private Sub Code_AfterUpdate() Me!systemname = getGyomu(Me!Code) End Sub 'あえて受けの「inVal」のタイプを宣言してません。 Private Function getGyomu(inVal) As Variant Dim tdfWork As TableDef Dim strField As String Dim strSQL As String getGyomu = Null Set DB = DBEngine.Workspaces(0).OpenDatabase(DBName) 'この処理は、インデックス名「BGprmkey」の割当たってるフィールド名を取得しているだけです。 '直接フィールド名を指定してあげたら、ここの部分の処理は省けます。 'strField = 《キーフィールド名》って感じ '「Gprmkey」に該当するフィールド名を得る Set tdfWork = DB.TableDefs("Gyomu") strField = tdfWork.Indexes("BGprmkey").Fields(0).Name 'Indexとなるフィールドの型がわからなかったので、二通り書いておきます。 '型にあわせて、どちらかを使用してください。 'SQL文の作成(キーとなるフィールドが数値型の場合) strSQL = "select Gyomu from Gyomu where " & strField & "=" & inVal 'SQL文の作成(キーとなるフィールドが文字列型の場合) strSQL = "select Gyomu from Gyomu where " & strField & "='" & inVal & "'" 'レコードセット Set BGrc = DB.OpenRecordset(strSQL) 'データが存在していたら取得 If Not BGrc.EOF Then getGyomu = BGrc.Fields(0).Value End If BGrc.Close DB.Close Set BGrc = Nothing Set DB = Nothing End Function
- TAGOSAKU7
- ベストアンサー率65% (276/422)
うーん・・・現状が把握できてません。。。 ソースを公開できませんか?
補足
早速返事を頂きありがとうございます。 補足させていただきます。 コードは次の通りです。 Accessでのフォームのコードです Const DBName = "DATA97.mdb" Public DB As Database Public BGrc As Recordset Private Sub Code_AfterUpdate() '=================================================== Set DB = DBEngine.Workspaces(0).OpenDatabase(DBName) Set BGrc = DB.OpenRecordset("Gyomu") BGrc.Index = "BGprmkey" BGrc.Seek "=", Me!code If Not BGrc.NoMatch Then Me!systemname = BGrc!gyomu Else Me!systemname = Null End If End Sub ただ、これだけのことなのですが、データがあるにもかかわらず、BGRC.NOMATCHが Trueになってしまいます。 これを、若干変更してEXCEL2000で 実行してみましたが、accessと同様の結果です。 アドインを比較してみたのですが、。。。。。 そこで、一つ思ったのですが、OFFICE2000をインストールしてから、ACCESS97をインストールしたために、何らかのファイルが壊れているのではないかと思われるのです。 明日、早速やってみようと思います。 よろしく御教授ください。