QueryTables.Add (Connection) ОШИБКА, ожидается '=' - PullRequest
0 голосов
/ 17 января 2020

Итак, во-первых, я не знаком с VBA. Я пытался изучать VBA, потому что на моей работе это то, что лежит в основе нашей базы данных и нашего рабочего процесса Excel (хотя никто в моем отделе, кажется, не знает, как это работает). И я пытался написать макрос, который мог бы автоматизировать некоторые работы, которые мне нужно сделать, а именно: импорт CSV-файлов в Excel для их обработки. Я пытался подойти к этой проблеме шаг за шагом, разделив ее на более мелкие подмножества задач.

Таким образом, я смог добавить запрос в Excel, который позволяет ему заглянуть в папку, чтобы увидеть какие файлы там. Это позволяет макросу «видеть» различные пути к файлам и имена файлов.

Теперь я пытаюсь выполнить sh, чтобы получить макрос l oop через все файлы, которые он видит в папке, и импортировать их на лист с именем «output».

Независимо от того, что я пробовал и сколько исследований я провел, я не могу понять макрос импорта. Он продолжает выдавать мне ошибку компиляции, которая ожидает '='

(я знаю, что макрос может правильно прочитать имена файлов и т. Д. c, потому что я создал подпрограмму, которая делает его 'log' любым он читает, чтобы проверить его способность различать типы файлов)

Dim ImportFolder As String
Dim ImportRow As Range
Dim ImportFilename As Range
Dim ImportFilenameS As String
Dim ImportAccessDate As Range
Dim ImportFilePath As Range
Dim ImportExtension As Range

Dim ImportRange As Range
Dim ImportVar As Integer
Dim ImportLength As Integer
Dim L

Dim LogRow As Range
Dim LogFilename As Range
Dim LogAccessDate As Range
Dim LogFilePath As Range
Dim LogStatus As Range
Dim LogReason As Range

Dim OutputFolder As String
Dim OutputRange As Range

Sub FileTypeController()

Set ImputFolder = "H:\BLM.Workflow\CSV.Workflow-Input\"

Set ImportExtension = ThisWorkbook.Worksheets("Import").Range("B2")
Set ImportFilename = ThisWorkbook.Worksheets("Import").Range("A2")
Set ImportAccessDate = ThisWorkbook.Worksheets("Import").Range("C2")
Set ImportFilePath = ThisWorkbook.Worksheets("Import").Range("G2")

Set LogFilename = ThisWorkbook.Worksheets("Log").Range("A2")
Set LogAccessDate = ThisWorkbook.Worksheets("Log").Range("B2")
Set LogFilePath = ThisWorkbook.Worksheets("Log").Range("C2")

Set LogStatus = ThisWorkbook.Worksheets("Log").Range("D2")
Set LogReason = ThisWorkbook.Worksheets("Log").Range("E2")

Set ImportRange = ThisWorkbook.Worksheets("Import").Range("A:A")
    ImportVar = WorksheetFunction.CountA(ImportRange)
    ImportLength = (ImportVar - 1)

For L = 1 To ImportLength

    If ImportExtension.Value = ".csv" Or ImportExtension.Value = ".txt" Then 
Call CSVToOutput Else Call ExtensionTypeFailedImport

Set ImportExtension = ImportExtension.Offset(1, 0)

Set ImportFilename = ImportFilename.Offset(1, 0)
Set ImportAccessDate = ImportAccessDate.Offset(1, 0)
Set ImportFilePath = ImportFilePath.Offset(1, 0)

Set LogFilename = LogFilename.Offset(1, 0)
Set LogAccessDate = LogAccessDate.Offset(1, 0)
Set LogFilePath = LogFilePath.Offset(1, 0)


Set LogStatus = LogStatus.Offset(1, 0)
Set LogReason = LogReason.Offset(1, 0)


Next

ThisWorkbook.Worksheets("Log").Activate

End Sub

Sub CSVToOutput()

ImportFilenameS = "TEXT;" & ImportFilename.Value
Set OutputRange = ThisWorkbook.Worksheets("Output").Range("A1")

'Application.CutCopyMode = False
With ThisWorkbook.Worksheets("Output").QueryTables_
    .Add(Connection:= ImportFilenameS,Destination:= OutputRange)
    .Name = "Importfilename"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 1252
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False

Call SuccessfulImport
End Sub

Это все еще первый черновик, поэтому я еще не потратил немного времени на его очистку. Извиняюсь, если код tra sh, но я даю ему все; -)

1 Ответ

0 голосов
/ 17 января 2020

Сначала я замечаю здесь ошибку:

Set ImputFolder = "H:\BLM.Workflow\CSV.Workflow-Input\"

Причина: вы используете только зарезервированное слово Set с объектами, и в этом случае вы просто присваиваете значение строковой переменной.

Кроме того, я нигде не видел эту переменную. Может быть, вы хотели использовать это:

Dim ImportFolder As String

Эти факты в стороне, я предлагаю вам взглянуть на Power Query . Если у вас есть Excel 2010, 2013, вы можете загрузить его как надстройку или, если у вас уже есть 2016-2019, уже доступны на вкладке «Данные ленты».

Ознакомьтесь с руководством Мэтта о том, как объединять файлы из папки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...