1

以下に、ユーザーがExcelファイルを選択できるようにするこの機能があり、データをテーブル(MyTable)にインポートします。1 列の Excel ファイルです。インポート先のテーブルには 2 つの列 (F1、F2) が含まれています。

その 2 番目の列に次の情報を取得するには、DoCmd.RunSQL コマンドが必要です。

MyTable.F1 は OEM 部品番号です。その番号を取得し、(JDSubs) テーブルの 2 つの列 (OEMPartNumer、OEMSub) と比較する必要があります。一致が見つかった場合は、(JDSubs からの 2 つの一致を比較する必要があります。 )テーブルで、列(OEMItem)の(AMI)テーブルでそれを見つけようとします一致することがわかった場合、テーブル(AMI)の列(Item)から値を返し、それを(MyTable)列(F2)に挿入する必要があります

テーブル コンテンツの例

MyTable
----------------
F1       | F2
AR77530  | 
AR12345  |

JDSubs
---------------------------
OEMPartNumer    | OEMSub
AR65123         | AR77530
AR12345         | AR56242

AMI
---------------------------
Item            | OEMItem
AMAR77530       | AR77530
AMAR56242       | AR12345

したがって、Excel ファイルからインポートされる番号は、2 つの番号のいずれかになる可能性があります (サブ番号がない場合もあります)。

会社の部品番号 (AMI) と OEM 番号を一致させる必要があるだけです

これは、ワークシートを MyTable にインポートする関数です。一致する AMI 番号で埋められた F2 列を取得し、元に戻す必要があります。

 Sub Import()
    Dim fDialog As Office.FileDialog
    Dim varFile As Variant
    Dim CustomerFile As String
    Dim LUser As String

    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
    .AllowMultiSelect = False
    .Title = "Please select your OEM part number file."
    .Filters.Clear
    .Filters.Add "Excel Spreadsheets", "*.xlsx"
    .Filters.Add "Excel Spreadsheets", "*.xls"
    .InitialFileName = "C:\Users\" & LUser & "\Desktop"
    If .Show = True Then
          'Loop through each file selected and add it to the list box.
          For Each varFile In .SelectedItems
             CustomerFile = varFile
          Next
    End If
    End With
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "MyTable", CustomerFile, False, "sheet1!A:A"
    DoCmd.RunSQL ?????


    Exit Sub

End Sub

また、ユーザーが一度に 1 つの番号を検索できるように、フォームをセットアップしました。これがその関数です。自動化されたプロセスが必要なだけです

Function fnSearchAndPopulate() As Boolean
Dim d As DAO.Database, r As DAO.Recordset, strSQL As String
Set d = CurrentDb
If Me.txtEnterNumber.Value = "" Then
    MsgBox "Please Enter Number", , "Error"
    Exit Function
End If
strSQL = " SELECT * FROM JDSubs Inner Join AMI on " & _
         " AMI.OEMItem=JDSubs.OEMPartNumber WHERE " & _
         " JDSubs.OEMPartNumber= '" & txtEnterNumber.Value & "' or " & _
         " JDSubs.OEMSub= '" & txtEnterNumber.Value & "
Debug.Print strSQL
Set r = d.OpenRecordset(strSQL)
If r.EOF Then
   MsgBox "OEM # " & Me.txtEnterNumber & " does not exist!", , "No AMI #"
  Set d = Nothing
  Exit Function
End If
'get here if there is a record
r.MoveFirst
'populate whatever textboxes
Me.txtAMINumber = r!Item
Me.txtDescription = r!Description
Me.txtOEMsubnumber = r!OEMSub

Set d = Nothing
Exit Function
End Function
4

1 に答える 1