■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#11091-0
Ms-Accessですでに存在しているテーブルかどうかを返す関数
Accessですでに存在しているテーブル名かどうかを返す関数ってありますか?
Accessで別データベースからテーブルを取り込む際に、

テーブル名1(お尻に追い番がついてしまいます)となってしまうので、
すでに存在するテーブルかどうかをVBAで確認したいと思っていますが、(^^;

関数(テーブル名)=True
とかできるような関数ってあるんでしょうか?
ヘルプで見てもわからないので投稿させてもらいました。
他に何かいい知恵でもありましたらご存知の方、伝授してください。。。
#11092-0
RE#11091:Ms-Accessですでに存在しているテーブルかどうかを返す関数
> Accessですでに存在しているテーブル名かどうかを返す関数ってありますか?
> Accessで別データベースからテーブルを取り込む際に、
> テーブル名1(お尻に追い番がついてしまいます)となってしまうので、
> すでに存在するテーブルかどうかをVBAで確認したいと思っていますが、(^^;

存在するかどうかを調べるよりも、取り込む前に、
既存のテーブルを破棄してしまえばよいのでは?

テーブルが無いときに破棄しようとすれば、当然エラーになりますが、
エラートラップして無視してしまえば済むように思えます。


> 関数(テーブル名)=True
> とかできるような関数ってあるんでしょうか?

とりあえず、テーブルオブジェクトを For Each で列挙して調べるとか。
#11094-0
RE#11092:Ms-Accessですでに存在しているテーブルかどうかを返す関数
ありがとうございます。

> 
> 存在するかどうかを調べるよりも、取り込む前に、
> 既存のテーブルを破棄してしまえばよいのでは?

> テーブルが無いときに破棄しようとすれば、当然エラーになりますが、
> エラートラップして無視してしまえば済むように思えます。
そーなんです。
テーブルを破棄しようとしてて、
テーブルが無いときにエラーが返ってくるので、
テーブルがあるかないかを確認した方がいいのかなーと思ったわけなのです。

でも、、、、エラートラップすればいいということですが、、
すみません。。。
エラートラップして無視するってどういうことなのでしょうか?
恥ずかしながら、、よくわかりません。
エラーメッセージを表示しないようにする方法があるのでしょうね。ちょっと調べてみます。
#11095-0
RE#11094:Ms-Accessですでに存在しているテーブルかどうかを返す関数
> でも、、、、エラートラップすればいいということですが、、
> すみません。。。
> エラートラップして無視するってどういうことなのでしょうか?
> 恥ずかしながら、、よくわかりません。
> エラーメッセージを表示しないようにする方法があるのでしょうね。ちょっと調べてみます。
> 
 では,補足ということで追記します。テーブルが無かった場合にエラーメッセージが帰ってくると思いま
す。その時に,エラーメッセージの左上にエラー番号がでると思います。そのエラー?で判断させるという
ことです。例えばAccessでデータ操作をしているとよく起こる「Null値の使い方が不正です」というエラー
はエラー?が94なので,

Private Sub Command1_Click()

 On Error Goto Er       'エラートラップの開始

           ・
           ・
           ・
           ・
           ・
           ・
           ・
Exit Sub

Er:
 Select Case Err.Number
    Case 94
       Resume Next          '次の行から処理続行
 End Select
End Sub

 といった具合です。On Error GotoやResume Nextについての詳細はヘルプを参考にしてください。で
は。
#11114-0
RE#11095:Ms-Accessですでに存在しているテーブルかどうかを返す関数
>  では,補足ということで追記します。テーブルが無かった場合にエラーメッセージが帰ってくると思いま
> す。その時に,エラーメッセージの左上にエラー番号がでると思います。そのエラー?で判断させるという
> ことです。例えばAccessでデータ操作をしているとよく起こる「Null値の使い方が不正です」というエラー
> はエラー?が94なので,
> 
> Private Sub Command1_Click()
> 
>  On Error Goto Er       'エラートラップの開始
> 
>            ・
>            ・
>            ・
>            ・
>            ・
>            ・
>            ・
> Exit Sub
> 
> Er:
>  Select Case Err.Number
>     Case 94
>        Resume Next          '次の行から処理続行
>  End Select
> End Sub
> 
>  といった具合です。On Error GotoやResume Nextについての詳細はヘルプを参考にしてください。で
> は。

本当にすみません。
エラーのときに出てくるNoをそういうふうに使うんですね。すごーい。
まだ実際にはやっていませんが、トライしてみます。
本当に何度も助言くださいまして、ありがとうございました
感謝感謝!です。(^o^)
#11115-0
RE#11114:Ms-Accessですでに存在しているテーブルかどうかを返す関数
↓匿名になってしまいました。
すみません。。こばゆみが投稿しました。
#11116-0
RE#11094:Ms-Accessですでに存在しているテーブルかどうかを返す関数
ぽーらべあと申します。

> テーブルを破棄しようとしてて、
> テーブルが無いときにエラーが返ってくるので、
> テーブルがあるかないかを確認した方がいいのかなーと思ったわけなのです。

私は以下のモジュールを使用して、テーブルの存在を確認しています。
どこからとってきたソースかは不明。(--);

' 機  能:指定したテーブルが存在するか確認します
' 引 数:sFileName     ファイル名
'         sTableName    テーブル名
' 戻り値: 0            :正常終了 テーブルがない
'          1            :正常終了 テーブルが存在
'         -1            :異常終了
Public Function ExistTable(sFileName As String, sTableName As String) As Integer
    Dim MyDatabase As Database
    Dim nFlag As Integer
    Dim i As Integer
    On Error GoTo ErrorHandler
    ExistTable = 0
    Set MyDatabase = Workspaces(0).OpenDatabase(sFileName)

'指定したテーブルが存在するかチェックします。
    For i = 0 To MyDatabase.TableDefs.Count - 1
        If MyDatabase.TableDefs(i).Name = sTableName Then

'存在したら戻り値を「1」にセットします。
            ExistTable = 1
            Exit For
        End If
    Next i
    MyDatabase.Close
    Exit Function
ErrorHandler:
    ExistTable = -1
End Function
#11129-0
RE#11116:Ms-Accessですでに存在しているテーブルかどうかを返す関数
> ぽーらべあと申します。
> 
> > テーブルを破棄しようとしてて、
> > テーブルが無いときにエラーが返ってくるので、
> > テーブルがあるかないかを確認した方がいいのかなーと思ったわけなのです。
> 
> 私は以下のモジュールを使用して、テーブルの存在を確認しています。
> どこからとってきたソースかは不明。(--);

ぽーらべあさん、
どうもありがとうございます。

魔界の仮面弁士さんに教えていただいた方法で、実現することができました。
ぽーらべあさんのソースもさっそくやってみます。
結局、存在しているテーブルかどうかを返す関数というのは
ないみたいですが、いろいろな考え方を知ることができて大変参考になりました。
ほーーーんとに!ありがとうございました!!!!(^o^//
#11130-0
RE#11129:Ms-Accessですでに存在しているテーブルかどうかを返す関数
>>> テーブルがあるかないかを確認した方がいいのかなーと思ったわけなのです。
> 結局、存在しているテーブルかどうかを返す関数というのは
> ないみたいですが、いろいろな考え方を知ることができて大変参考になりました。

あまり汎用的ではありませんが、確認する方法はあります。

    TableName = "テーブル1"
    If CBool(DCount("*", "MSysObjects", "[Name]=""" & TableName & """")) = True Then
        MsgBox TableName & "は存在します。"
    Else
        MsgBox TableName & "は存在しません。"
    End If


まぁ今回は、あまり深く考えずに、

   On Error Resume Next
   CurrentDb.TableDefs.Delete TableName
   On Error GoTo 0

   '(インポート処理)

で良いとは思いますが。(^^A
このページと関連する記事:
#22692-0テーブルの存在確認(ADO)2001-08-27(月) 10:24
#9681-0mdb内のテーブル存在チェック方法2000-04-17(月) 19:13
#27465-0nullの回避の賢いやり方はあるでしょうか?2000-08-07(月) 16:08
#1982-0テーブル名にスペース2002-04-16(火) 17:19
#8348-0ファイル書き込みエラーでリトライさせたい1999-10-27(水) 17:44
#19543-0Formの使用制限方法2001-03-13(火) 12:39
#2235-0ありがとうございます。1999-10-12(火) 12:00
#12609-0トラップがかからない2000-01-04(火) 13:48
#43186-0On Errorステートメントについて2001-05-19(土) 14:52
#543-2立ち上がっているEXCELをすべて閉じる2003-12-10(水) 17:46
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)