0

Excel シートからデータをインポートし、そのデータを適切なテーブルに追加する Access 2010 データベースがあります。私が抱えている問題は、インポートすると、データに顧客 ID が添付されないため、テーブルの cust_ID フィールドが null になることです。必要なのは、インポートごとに顧客が誰であるかをユーザーに尋ね、その顧客の ID を見つけて、その値をすべての null フィールドに入れるマクロです。私はこれについて多くの異なる試みを行いました (ほとんどの場合、マクロ ビルダーは、このために VBA をどこから開始すればよいかさえ知りません) どれも結果を示していません。私の最新のものは近いと思いますが、何らかの理由でインポート後に実行されていません。「挿入後」マクロがありますが、[Customer Name] が TBL_Customers から custID を検索し、それを各 null フィールドに挿入するようにユーザーに促すという考えでした。残念ながら、データをインポートしても何も起こらず、その理由がよくわかりません。

Parameters Name: Customer Name

Look Up A Record In TBL_Customers
Where Condition =[TBL_Customers].[FLD_Customer_Name]=[Customer Name]
Alias custName

Look Up A Record In TBL_Customers
    Where Condition =[TBL_Customers].[FLD_Customer_PK_ID]=[custName]
    Alias custID

For Each Record In TBL_Contacts
Where condition =IsNull([FLD_Contact_FK_Customer_ID])

EditRecord
    SetField
        Name FLD_Contact_FK_Customer_ID
        Value =[custID]
End EditRecord 

私が考えていた別の可能性は、Excel シートに顧客の名前を含む別の列を作成することであり、Access はその列に基づいて cust_ID を検索するだけで済みます。私の問題は、Access に Excel シートから顧客名をインポートしてその顧客の ID を見つけ、その ID を適切なテーブルに挿入するように指示する方法がわからないことです。そのため、最初のオプションに傾いていました。

コメントで述べたように、私はさまざまなことを試しましたが、VBA/Access にはかなり慣れていないため、試すアイデアが不足しています。どちらが簡単/良いかわからないので、アイデア/提案/推奨事項は大歓迎です。

4

2 に答える 2

0

これは、正しい方向に進む可能性のあるもののサンプルです。私の場合、Excel からのインポートで同様の状況がありましたが、多くの場合、1 つのデータが欠落していました。私がしたことは、「ユーザー」がExcelドキュメントをサブフォルダーに保存し、フォルダー名の一部として顧客IDを使用することでした。スクリプト ライブラリを使用すると、サブフォルダーを再帰的に処理できます。カスタム FindCustomerID 関数を使用して、探している ID をパス名から解析します。インポートが行われると、顧客 ID を追加できます。

Function ImportBlah(importDir As String, tbl As String)

Dim importPath As String
Dim fs As Scripting.FileSystemObject
Dim fo, x AS Folder
Dim fi AS File
Dim custID As String

Set fs = CreateObject("Scripting.FileSystemObject") 

With fs
    Set fo = .GetFolder(importDir)
    For Each x In fo.SubFolders
        For Each fi In x.Files
            If Not (fi.Attributes Mod 8 >= 4) Then 'If not a system file
                DoCmd.TransferText acImportDelim, "import_specs", tbl, fi, True
                custID = FindCustomerID(x.Path)
                CurrentDb.Execute "UPDATE " & tbl & " SET FileName = '" _ 
                   & fi.ParentFolder.name & "\" & fi.name & "' WHERE FileName IS NULL", _ 
                   dbFailOnError 'Add filename to Filename column
                CurrentDb.Execute "UPDATE " & tbl & " SET custID = '" & _ 
                   custID & "' WHERE custID IS NULL", dbFailOnError 'Add custID to custID column
                .MoveFile fi, x & "\Imported\"
            End If
        Next
    Next
End With    
End Function

このコードでは、Microsoft Scripting Runtime への参照を有効にする必要があります。

于 2013-09-03T19:53:47.303 に答える