0

特定のフォルダー内のすべての Excel ファイルのレコードを作成し、さまざまなセルからの情報をフィールドに入力するフォームを Access 2010 で作成しています。このマクロは、Excel ワークブックのすべてのファイル名 (さまざまな英数字シーケンス) を配列に入力し、それらのファイルを調べて、Excel シートごとに新しいレコードを作成します。

Private Sub PopulateArray_Click()
    Dim strListOfFiles() As String
    Dim intCount As Integer
    intCount = 0

    Dim sFile As String
    sFile = Dir$("P:\Share\Manufacturing\Propeller\Finalized" & "\*.*", vbDirectory Or vbHidden Or vbSystem Or vbReadOnly Or vbArchive)
    Do Until sFile = vbNullString
        If sFile <> "." Then ' relative path meaning this directory
            If sFile <> ".." Then ' relative path meaning parent directory
                ReDim Preserve strListOfFiles(0 To (intCount + 1)) As String
                strListOfFiles(intCount) = sFile
                intCount = intCount + 1
            End If
        End If
        sFile = Dir$()
    Loop

    Dim MyDB As DAO.Database
    Dim MyRS As DAO.Recordset
    Set MyDB = CurrentDb()
    Set MyRS = MyDB.OpenRecordset("Record", dbOpenDynaset)

    For Index = 0 To UBound(strListOfFiles)
        MyRS.AddNew
        MyRS![SerialNumber] = "'P:\Share\Manufacturing\Propeller\Finalized\[" & strListOfFiles(Index) & "]Order Input'!B15"
        MyRS.Update
    Next
End Sub

ほとんどの作業は完了しましたが、最後のステップで行き詰まりました。問題は、For ループの「MyRS![SerialNumber]」ビットで発生します。現時点では、セル自体の値ではなく、セルへの(正しい)ファイルパスを出力するだけです。

4

1 に答える 1

0

もちろん、ワークブックを開いていないためです。MS Excel オブジェクト ライブラリへの参照を含める必要があります (最新は、MSO 2007 を搭載した私のコンピューターでは 11.0 です)。

次に、Excel「名前空間」を使用して、次のように Excel オブジェクトにアクセスできます。

Dim xlApp as Excel.Application
Dim xlWb as Excel.Workbook
Dim cell as Excel.Range

With xlApp
    .Visible = true
    Set xlWb = .Workbooks.Open(...)
End With

// And so on...

編集: 参照を含めるには、Alt+F11 を入力して VBA エディターに入ってから、その Excel オブジェクト ライブラリを確認する必要がありますToolsReferences

于 2012-10-06T00:06:43.107 に答える