• 締切済み

officeでのOLEについて

もともとはEXCEL2000XPのVBAでマクロを作り、ACCESS2000のMDBを使用しています。 これはうまく機能しています。 これを、ACCESS97に落としたら、EXCEL2000からMDBを参照すると、NOMATCHがうまく機能してくれません。  インデックキーでテーブルを読みに行くのですが、NOMATCHでは、レコードがあるにもかかわらず、常にTRUEになってしまいます。  ACCESS97へのコンバート処理は、ACCESS2000にて旧バージョンへの変換を使用しました。  それに、ACCESS97でも、NOMATCHがうまく機能していません。 ACCESSはデータとプログラムと別々に作成しており、テーブルのリンクで結合しています。  アドインに問題があるのかな、と思ったりしているのですが良く分かりません。 どなたか御教授願います。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

( ・・)?ン なぜだろう。。。 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)
回答No.1

うーん・・・現状が把握できてません。。。 ソースを公開できませんか?

yamamichi
質問者

補足

早速返事を頂きありがとうございます。 補足させていただきます。 コードは次の通りです。 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をインストールしたために、何らかのファイルが壊れているのではないかと思われるのです。 明日、早速やってみようと思います。 よろしく御教授ください。

関連するQ&A