#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