|
こんばんは。
サンプルを考えてみました。
エクセルシートとアクセステーブルのフィールドが一致しているのが条件です。
エクセルの1行目が項目行(=アクセスのフィールド名)
2行目以降にデータがあるものとします。
>Excel97からAccess97へDaoにより接続し、データを保存しています。
>(注文番号、お客様、工程、工程数量など)
>そこでExcelからAccessへデータを保存する場合、同一の注文番号がAccess側に
>データが存在するかどうか確認し、なければ保存し、あればデータの更新を
>するかどうかのメッセージが出るようにしたいのです。
以下標準モジュールに
Sub test01()
Const DATA_BASE_NAME As String = "I:\MDB\dbTest01.mdb"
Const TABLE_NAME As String = "acsTable01"
Dim myWS As Workspace
Dim myDB As Database
Dim myTable As Recordset
Dim myID As String
Dim i As Long, j As Long
Set myWS = DBEngine.Workspaces(0)
Set myDB = myWS.OpenDatabase(DATA_BASE_NAME)
Set myTable = myDB.OpenRecordset(TABLE_NAME, dbOpenDynaset)
With myTable
For i = 2 To Range("a65536").End(xlUp).Row
myID = Cells(i, 1).Value
.FindFirst "注文番号=" & myID
.Edit
If .NoMatch = False Then
If MsgBox("受注番号 " & myID & " が見つかりました" & _
Chr(10) & "データを更新しますか?", vbOKCancel) = vbOK Then
For j = 2 To Range("IV1").End(xlToLeft).Column
.Fields(j - 1) = Cells(i, j).Value
Next
End If
Else
.AddNew
For j = 1 To Range("IV1").End(xlToLeft).Column
.Fields(j - 1) = Cells(i, j).Value
Next
End If
.Update
Next
End With
myDB.Close
myWS.Close
End Sub
>
>今後作成する予定なのですがExcel側から注文番号でお客様を出せるように
>したいと考えています。こちらに関しても教えて頂けますでしょうか。
>
>勝手なことばかり言いますがよろしくお願いします。
A列に注文番号を入れると表示します
以下対象シートのモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
Const DATA_BASE_NAME As String = "I:\MDB\dbTest01.mdb"
Const TABLE_NAME As String = "acsTable01"
Dim myWS As Workspace
Dim myDB As Database
Dim myTable As Recordset
Dim myID As String
Dim i As Long, j As Long
With Target
If .Count > 1 Then Exit Sub
If .Value = "" Then Exit Sub
If .Row = 1 Then Exit Sub
If .Column <> 1 Then Exit Sub
myID = .Value
End With
Set myWS = DBEngine.Workspaces(0)
Set myDB = myWS.OpenDatabase(DATA_BASE_NAME)
Set myTable = myDB.OpenRecordset(TABLE_NAME, dbOpenDynaset)
With myTable
.FindFirst "注文番号=" & myID
If .NoMatch = False Then
For j = 1 To .Fields.Count - 1
Cells(Target.Row, j + 1).Value = .Fields(j)
Next
Else
MsgBox "注文番号 " & myID & " が見つかりません"
End If
End With
myDB.Close
myWS.Close
End Sub
お試しください。
では
|
|