2009-11-06 16 views

答えて

6

方法:

Dim appAccess As Object 
''acTable=0 

Set appAccess = CreateObject("Access.Application") 
appAccess.OpenCurrentDatabase "C:\Docs\LTD.mdb" 

appAccess.DoCmd.Rename "NewTableName", 0, "OldTableName" 

appAccess.Quit 
Set appAccess = Nothing 
+1

あなたのコードがそれ自身の後でクリーンアップされればそれはいいと思いますか? –

+2

@David W Fenton私は、これは、アイデアが十分にあるはずであり、大部分は1行の回答でさえ十分であるという印象を受けました。 – Fionnuala

+1

@David W Fentonあなたが本当にそれが重要だと思うならば、答えを編集して自分で修正してください –

9

はここで(まだ会社の日常使用している)私のプログラムの一つの例です。これはvb6プログラムから取ったものですが、vbaでも実行されます。私はそれを確かめるためにテストしました。

この例では、新しいデータで更新される "mytable_tmp"という名前のテンポラリテーブルがあり、これを置き換えることでテーブル "mytable"に保存します。お使いのエクセルVBAエディタから

あなたは、次の2つのタイプライブラリへの参照を設定する必要があります:

  • は、「Microsoft ActiveXデータは、2.8オブジェクトライブラリ」
  • の「Microsoft ADO外部DDLための2.8と。

最初はADODB名前空間用で、2番目はADOX名前空間用です。 (おそらく2.5以前のMDACの以前のバージョンを持っているかもしれません;これもうまくいくはずです)。

Private Sub RenameTable() 
Dim cn   As New ADODB.Connection 
Dim cat  As ADOX.Catalog 
Const sDBFile As String = "c:\et\dbtest.mdb" 

    On Error GoTo ErrH 

    With cn 
     .Provider = "Microsoft.Jet.OLEDB.4.0" 
     .Mode = adModeShareDenyNone 
     .Properties("User ID") = "admin" 
     .Properties("Password") = "" 
     .Open sDBFile 
    End With 

    Set cat = New ADOX.Catalog 
    cat.ActiveConnection = cn 
    cat.Tables("mytable").Name = "mytable_old" 
    cat.Tables("mytable_tmp").Name = "mytable" 
    cat.Tables("mytable_old").Name = "mytable_tmp" 

ExitHere: 
    If Not cn Is Nothing Then 
     If Not cn.State = adStateClosed Then cn.Close 
     Set cn = Nothing 
    End If 
    Set cat = Nothing 
    Exit Sub 

ErrH: 
Dim sMsg As String 
    sMsg = "Massive problem over here man." 
    sMsg = sMsg & vbCrLf & "Description : " & cn.Errors.Item(0).Description 
    MsgBox sMsg, vbExclamation 
    GoTo ExitHere 
End Sub 

お役立てください。

+1

Remouの3行のコードよりこの長文のコードの唯一の価値は、Accessがインストールされていないとき。 –

+0

これはまた、同じコード内で単なるストレートコピー以上のことを行うオプションを提供します.ExcelユーザがAccessにアクセスできない場合があります。それでも、一般的に私はRemouの見た目をより使いやすくする必要があります。 – mavnn

+0

;)どのようにエラー処理とユーザーメッセージを含めるか。そして、そのフォーマットについては何ですか? (あなたがStewieの声でそれをするなら、はるかに楽しい)。 +1 – JeffO

0

上記のRemouのコードのわずかな代替方法があります。シェル関数を使用して必要なデータベースを開き、そのプロパティとメソッドにアクセスするGetObject関数を使用します。このようにする利点は です。1)Accessアプリケーションのウィンドウを開く方法を選択できます。私の目的のために、私はそれを隠しておきたい。 2)私はAccess 2003と2007の両方をインストールしていますが、Remouの方法では2003が開きますが、これは嫌です。私の方法(私は思う)は、ユーザーがそれをダブルクリックしたときに開くために使用したAccessウィンドウのバージョンに関係なく、ファイルを開きます。

データベースを操作する前に、データベースが開いていることを確認する必要があります。私はこれに対処するために単純な待機サブルーチンを使用しますが、あなたができるより洗練されたものがあります。

Sub Rename() 
    Dim ObjAccess As Object, MDB_Address As String, TaskID As Integer 

    MDB_Address = "C:\example.mdb" 

    TaskID = Shell("msaccess.exe " & Chr(34) & MDB_Address & Chr(34), vbHide) 
    Call Wait 
    Set ObjAccess = GetObject(MDB_Address) 
    ObjAccess.DoCmd.Rename "NewTableName", 0, "OldTableName" 
    ObjAccess.Quit 
    Set ObjAccess = Nothing 

End Sub 

Sub Wait() 

    Dim nHour As Date, nMinute As Date, nSecond As Date, waitTime As Date 

    nHour = Hour(Now()) 
    nMinute = Minute(Now()) 
    nSecond = Second(Now()) + 5 
    waitTime = TimeSerial(nHour, nMinute, nSecond) 
    Application.Wait waitTime 

End Sub 
関連する問題