VBAについて質問です。x.mdbというmdbファイルがあります。この中に入っているデータとフォームを分離して1つのフォルダの中で管理したいと思います。例えばマイフォルダの中にx.mdbがあるとします。これをデータとフォームの2つのmdbにわけます。data.mdbとform1.mdbにします。form1.mdbのフォームを機動した時に、マイフォルダ以外にdata.mdbがあればエラーメッセージを出す。同一フォルダの中にdata.mdbがあればdata.mdbに接続するとうい形態をとりたいと思っています。これをどのように実現すればよいでしょうか?あくまでVBAでやりたいです。またx.mdbから2つにmdbをわける作業自体は普通にmdbファイルを作って、そこへdataとformをインポートするだけでよいのでしょうか?Access2003です。

回答の条件
  • 1人2回まで
  • 登録:2009/03/01 12:20:33
  • 終了:2009/03/08 12:25:03

回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/01 13:27:45

ポイント35pt

>そこへdataとformをインポートするだけでよいのでしょうか?

data.mdbやform1.mdbにインポートもしくはx.mdbからエクスポートするだけでいいです。


コードでは指定したマイフォルダにdata.mdbの存在チェック。

無ければファイルを取得するダイアログを開き、接続するデータベースを選択します。

data.mdbのパスさえわかれば後は接続するのはわかると思います。

Private Sub Form_Load()
    'マイフォルダのパスを指定
    Const myPath As String = "C:\abc\"
    Dim myName As String
    Dim Path As String
    
    Path = myPath & "\data.mdb"

    If Dir(Path) = "" Then
        With Application.FileDialog(msoFileDialogFilePicker)
            .Filters.Clear
            .Filters.Add "Accesssデータベース", "*.mdb"
            .AllowMultiSelect = False
            .Title = "接続するデータベースを選択してください"
            If CBool(.Show) Then
                Path = .SelectedItems(1)
            Else
                MsgBox "キャンセルされました。"
                Exit Sub
            End If
        End With
    End If
    
    '********************
    'data.mdbへの接続処理
    '********************
End Sub
id:akaired

ご回答ありがとうございます。mdbの存在チェックは理解できました。しかし、リンクを使わずに同一フォルダの中にあるmdbテーブルへどうやってVBAのみで接続すればよいかわかりません。どのようにおこなえばよいのでしょうか?

2009/03/01 17:10:31
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/01 19:06:59

ポイント35pt

ちょっと、間違いがありました。

>data.mdbやform1.mdbにインポートもしくはx.mdbからエクスポートするだけでいいです。

この後にテーブルをデザインヴューで開き、フォームのプロパティを出してデータのレコードソースというところを空白にしないといけません。


コードでレコードソースを指定する方法を追加するとこんな感じ。

Private Sub Form_Load()
    'マイフォルダのパスを指定
    Const myPath As String = "C:\abc"
    'テーブル名を指定
    Const myTable As String = "テーブル1"
    
    Dim myName As String
    Dim Path As String
    Dim sql As String
    
    Path = myPath & "\data.mdb"

    If Dir(Path) = "" Then
        With Application.FileDialog(msoFileDialogFilePicker)
            .Filters.Clear
            .Filters.Add "Accesssデータベース", "*.mdb"
            .AllowMultiSelect = False
            .Title = "接続するデータベースを選択してください"
            If CBool(.Show) Then
                Path = .SelectedItems(1)
            Else
                MsgBox "キャンセルされました。"
                Exit Sub
            End If
        End With
    End If

    sql = "SELECT * FROM " & myTable & " IN '" & Path & "'"
    Me.RecordSource = sql
End Sub
  • id:SALINGER
    >マイフォルダ以外にdata.mdbがあればエラーメッセージを出す。
    この部分は、ハードディスクのファイルを全て検索しないといけないので、品雑な処理になるかと。
    「マイフォルダにdata.mdbがなければエラーメッセージを出す」にしたほうがいいと思います。
  • id:SALINGER
    そもそも、マイフォルダというのはマイドキュメント?マイフォルダという名前のフォルダ?
  • id:akaired
    マイフォルダは任意のフォルダという意味でつけました。例えばCドライブ直下にabcフォルダを作ったとします。abcフォルダの中にdata.mdbがなければメッセージを出す、それ以外はフォームから接続するという処理にしたいと思っています。わかりにくくてすいませんでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません