Я использую Power Pivot для создания сводной таблицы с подключением данных к CSV-файлу с 3,6 м + строк данных и размером 230 МБ.
Каждый день я добавляю в этот CSV-файл, запуская отчетв формате .xslx (отчет может быть запущен только в этом формате), я хотел бы использовать VBA для автоматизации ежедневного процесса, если это возможно ниже:
- Удаление заголовков в книге DailyReport.xslx
- Сохранить как DailyReport.csv
- Открыть Master.csv в блокноте (Excel открывает только первые 1048576 строк)
- Скопировать данные из Report.csv (без заголовков в строке 1)
- Вставить данные в конец Master.csv
- Открыть PowerPivot.xlsb (Содержит подключение к данным Master.csv)
- Обновить подключение к данным и сводные таблицы для получения новых данных
Я нашел много макросов VBA, которые могут копировать текст в файл CSV, но большинство либо создают файл CSV, либо записывают в него через Excel, что я не могу сделать из-за превышения ограничения строки в 1048576.
Я знаю, как выбрать данные из моего отчета и преобразовать файл, но не уверен насчет передачи текста в файлах .csv без открытия в Excel через VBA.
Sub DataMerge()
'--------------------------------------------------
'- Title: Data Merge -
'- Purpose: Merge data (Daily report/Master csv) -
'--------------------------------------------------
' Set example path
Dim ExamplePath As String
ExamplePath = "C:\Exmaple\Path\"
' Set report as variable
Dim rwb As Workbook
Workbooks.Open Filename:=ExamplePath & "Report.xlsx"
Set rwb = Application.Workbooks("Report.xlsx")
' Convert report to csv and set as variable
rwb.SaveAs Filename:=ExamplePath & "Report.csv", FileFormat:=xlCSV, CreateBackup:=False
Dim rcsv As Workbook
Set rcsv = Application.Workbooks("Report.csv")
' Find range and copy data
Dim LastRow As Integer
LastRow = rcsv.Sheets(1).UsedRange.Rows.Count
rcsv.Sheets(1).Range("A2:A" & LastRow).Copy
' Open master csv file as text and paste selection at the bottom of the file and save
'#######################
'Put requested code here
'#######################
' Close report.csv and open file containing data connection
Workbooks("Report.csv").Close SaveChanges:=False
Dim ppwb As Workbook
Workbooks.Open Filename:=ExamplePath & "PowerPivot.xlsb"
Set ppwb = Application.Workbooks("PowerPivot.xlsb")
' Set as variable and refresh
ppwb.RefreshAll ' When refreshed, excel asks to locate text import file.
' Can this be specified through VBA so user does not need to select file?
ppwb.Close SaveChanges:=True
End Sub
Пожалуйста, также см. Комментарий вышев конце моего кода я хотел бы указать способ импорта текстового файла (.csv), который запрашивается у пользователя, но каждый раз он будет основным файлом сохранения, поэтому каждый раз спрашивать, что это пустая тратадля чего-то, что никогда не меняется.
Я обнаружил этот код из другого ответа StackOverflow, который можно использовать как часть для макроса:
Sub ReadCSV()
Dim MyString As String
Open "C:\path\text.csv" For Input As #1 ' Open file for input.
Do While Not EOF(1) ' Loop until end of file.
Line Input #1, MyString ' Read a line into variable
Debug.Print MyString ' Print data to the Immediate window.
Loop
Close #1 ' Close file.
End Sub
Источник: Манипулировать / копировать данные .CSV, не открывая файл?
Как я думаю, это откроет файл как текст, а не как файл Excel?(Поправьте меня если я не прав).Я просто не знаю, как манипулировать текстом, чтобы делать то, что мне нужно, в моей ежедневной процедуре, упомянутой в начале моего вопроса.
Я буду очень признателен за любую помощь в решении этой проблемы, заранее спасибо!