У меня есть повторяющийся процесс, который включает в себя импорт данных из разных файлов csv в Excel
Текущий процесс Импортируйте данные вручную из данных> из текста> выберите нужный файл> выберите с разделителями, и у моих данных есть заголовки> выберите разделитель-запятую> далее> закончить> Новый рабочий лист
Есть ли способ создать сценарий / макрос vba, который предложит пользователю, какой файл он хочет импортировать, и выберите параметры, которые я выбрал
Спасибо и привет
Похоже на возможную работу для запроса мощности. Настройте его для загрузки из папки. Поместите исходные файлы в эту папку.
Вы можете использовать Application.getopenfilename, чтобы выбрать нужный файл для открытия. Как упоминалось в одном из комментариев, использование регистратора макросов для получения кода для управления данными - хорошее начало, и вы можете добавить его в этот код.
Sub Button1_Click()
Dim s, wb As Workbook
s = Application.GetOpenFilename("CSV Files (*.csv),*.csv", , "Please select CSV file...")
If s <> False Then
Set wb = Workbooks.Open(s)
MsgBox "Code to Do something here"
wb.Close False
Else: MsgBox "Nothing Selected"
End If
End Sub
Это код, который я использовал некоторое время назад.
Dirlocal
- это путь к файлу .csv
Я бы импортировал данные в рабочий лист под названием «ODK»
Dim ws As Worksheet
Dim strText As String
' read utf-8 file to strText variable
With CreateObject("ADODB.Stream")
.Open
.Type = 1 ' Private Const adTypeBinary = 1
.LoadFromFile DirLocal
.Type = 2 ' Private Const adTypeText = 2
.Charset = "utf-8"
strText = .ReadText(-1) ' Private Const adReadAll = -1
End With
' parse strText data to a sheet
Set ws = Worksheets("ODK")
intRow = 1
Application.DisplayAlerts = False
For Each strLine In Split(strText, Chr(10))
If strLine <> "" Then
With ws
.Cells(intRow, 1) = strLine
.Cells(intRow, 1).TextToColumns Destination:=Cells(intRow, 1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False
End With
intRow = intRow + 1
End If
Next strLine
Application.DisplayAlerts = True
ReadUTF8CSVToSheet = ws.Name
Макро-рекордер должен дать вам хорошее начало :)