Я новичок в VBA, и я пытаюсь создать кнопку, чтобы открыть файл CSV с точкой с запятой и сохранить его на листе «Данные». Однако, несмотря на то, что я устанавливаю разделители, вывод все равно будет таким:

Tempo;Deslocamento;Carga(s);(mm);(N)        
0,00000;"-4 99846";"-28 53779"
0,01000;"-4 98967";"-28 41018"
0,02000;"-4 97449";"-28 29775"
0,03000;"-4 95374";"-28 23815"
0,04000;"-4 92851";"-28 20709"
0,05000;"-4 89975";"-28 12254"
0,06000;"-4 86842";"-27 99132"
0,07000;"-4 83488";"-26 16241"
0,08000;"-4 79954";"-20 51597"
0,09000;"-4 76271";"-10 26401"
0,10000;"-4 72469";"5   76869"
0,11000;"-4 68570";"30  21154"
0,12000;"-4 64606";"51  30509"
0,13000;"-4 60600";"62  65891"
0,14000;"-4 56565";"66  18559"
0,15000;"-4 52529";"65  00101"
0,16000;"-4 48475";"61  91677"

Ниже мой код:

'turn off screen updating
Application.ScreenUpdating = False

'initialize variables    
Dim NewWorkbook As Variant
Dim AnalysisWorkbook As Variant
Dim OpenWorkbook As Variant

'current filename    
AnalysisWorkbook = ActiveWorkbook.Name

'ask the user for the file name to open    
NewWorkbook = Application.GetOpenFilename("CSV (*.csv), *.csv")

'check for cancel button    
If NewWorkbook = False Then Exit Sub

'open the text file with the OpenText method   
Workbooks.OpenText Filename:=NewWorkbook, Origin:=xlWindows, StartRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, ConsecutiveDelimiter:=False, _
    Tab:=True, Semicolon:=True, Comma:=False, Space:=False, Other:=False, OtherChar:=False, _
    FieldInfo:=Array(1, 1), DecimalSeparator:=",", ThousandsSeparator:="."
OpenWorkbook = ActiveWorkbook.Name

'copy data
Windows(OpenWorkbook).Activate
Columns("A:H").Select
Selection.Copy

'paste data    
Workbooks(AnalysisWorkbook).Worksheets("Data").Activate
Columns("A:H").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'close data file    
Workbooks(OpenWorkbook).Activate
Range("A1").Select
Selection.Copy
Workbooks(OpenWorkbook).Close SaveChanges:=False

'turn on screen updating
Application.ScreenUpdating = True

Я скопировал этот код из другой программы, которую использую здесь, которая открывает файлы .txt, и попытался изменить. Но, похоже, я что-то упускаю.

1
Matheus Mastrangelo Cantelmo 20 Дек 2016 в 16:12
1
Попробуйте использовать средство записи макросов, было бы сложно отредактировать код вручную, чтобы он соответствовал вашей новой схеме данных.
 – 
S Meaden
20 Дек 2016 в 16:19
 – 
Rdster
20 Дек 2016 в 16:21
В чем проблема? CSV не открывается? Данные CSV неверны? Импортируете лист? В чем проблема?
 – 
LS_ᴅᴇᴠ
20 Дек 2016 в 16:23
Meaden, я сделал это, и данные были импортированы правильно с помощью мастера, но я не знаю, как вставить в код всплывающее окно (GetOpenFilename), чтобы выбрать файл для открытия.
 – 
Matheus Mastrangelo Cantelmo
20 Дек 2016 в 16:44
@LS_dev, данные импортируются так же, как и в CSV файле. Мне нужно, чтобы он был чистым, например "0 -4.99846 -28.53779" вместо "0,00000;" - 4 99846 ";" - 28 53779 ""
 – 
Matheus Mastrangelo Cantelmo
20 Дек 2016 в 16:46

1 ответ

Лучший ответ

Допустим, мы открываем файл и пытаемся разобрать его «вручную»:

Sub parser()
    Close #1
    s = "C:\TestFolder\matheus.csv"
    Open s For Input As #1

   j = 1
   Do While Not EOF(1)
      Line Input #1, TextLine
      ary = Split(TextLine, ";")
      i = 1
      For Each a In ary
        Cells(j, i).Value = a
      i = i + 1
      Next a
    j = j + 1
   Loop

   Close #1
End Sub

Приведенный выше код получает данные построчно и использует "; " в качестве разделителя. это приводит к:

enter image description here

Обратите внимание, что это удается только частично. Кажется, что поле мм и поле N объединены.

1
Gary's Student 20 Дек 2016 в 16:45
Привет @ Gary's Student, эти (мм) и (N) должны идти под Tempo, Deslocamento и Carga соответственно. Проблема, которую я вижу, заключается в том, что десятичные дроби, по-видимому, разделены пробелом. Например: -4 99846 там должно быть -4,99846
 – 
Matheus Mastrangelo Cantelmo
20 Дек 2016 в 16:53
По крайней мере, данные импортируются. Вам нужно будет проделать дополнительную работу, чтобы правильно расположить его
 – 
Gary's Student
20 Дек 2016 в 17:00