Динамическая выборка имени файла данных и привязка к sql в VBA

#vba #excel #csv

#vba #excel #csv

Вопрос:

 'fetching the file full name from from the range
Filename = ThisWorkbook.Worksheets("Sheet1").Range("FileEnv"). Value
'fetching the filename from the path fetched from above range
dataFile = FileNameFromPath(Filename)
'this function fetched the file name correctly as Product.csv
Sql = "select * from [dataFile]"
  

Теперь в sql он не извлекает файл данных как product.csv.It принимает только файл данных bcoznof, из-за которого я получаю сообщение об ошибке несуществующего файла.

Помогите, пожалуйста?

Комментарии:

1. Какая ошибка у вас и где?

2. В промежуточном окне я вижу sql как select * из файла данных, тогда как он должен быть select * из product.csv. значение файла данных, т.е. product.csv, должно быть в sql-запросе.

3. хорошая ссылка Excel VBA Введение Часть 30 — ADO (ActiveX Data Objects) Запрашивает базу данных. Пожалуйста, рассмотрите возможность рефакторинга вашего вопроса перед рефакторингом вашего кода.

4. Cn.open(«поставщик = Microsoft.Jet.OLRDB.4.0;» amp; _ «Источник данных = » amp; Путь amp;»;» amp; _ «Расширенные свойства =»»текст; HDR = Да; FMT = С разделителями; IMEX = 1;»»»

5. @ThomasInzina выдает ошибку, поскольку dataFile.text не найден или не существует. Он по-прежнему принимает файл данных в качестве имени файла. Он должен принимать значение product.csv, которое я присвоил ему в моем описании кода в сообщении.

Ответ №1:

Похоже, что:

Sql = "select * from [dataFile]"

Должно быть

Sql = "SELECT * FROM [" amp; dataFile amp; "]"

Я объединил ваш код с примером из «Много шума из текстовых файлов«, чтобы дать вам лучший пример.

 Sub Example()
    Dim conn As Object, rs As Object
    Dim Filename As String, dataFile As String


    'Refernce: https://msdn.microsoft.com/en-us/library/ms974559.aspx

    On Error Resume Next
    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adCmdText = amp;H1

    Filename = ThisWorkbook.Worksheets("Sheet1").Range("FileEnv").Value
    dataFile = FileNameFromPath(Filename)

    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" amp; _
              "Data Source=" amp; Filename amp; ";" amp; _
              "Extended Properties=""text;HDR=YES;FMT=Delimited"""

    rs.Open "SELECT * FROM [" amp; dataFile amp; "]", _
            conn, adOpenStatic, adLockOptimistic, adCmdText

    Do Until rs.EOF

    Loop

End Sub

Function FileNameFromPath(Filename As String) As String
    FileNameFromPath = Right(Filename, Len(Filename) - InStrRev(Filename, ""))
End Function