【问题标题】:VBA to open a .CSV FileVBA 打开一个 .CSV 文件
【发布时间】:2016-12-20 21:45:41
【问题描述】:

我是 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 文件并尝试修改。但似乎我错过了什么。

【问题讨论】:

  • 尝试使用宏记录器,很难手动编辑代码以适应您的新数据方案。
  • 然后阅读Avoid Select/Activate
  • 有什么问题? CSV 没有打开? CSV 数据有误?导入工作表?问题出在哪里?
  • @S Meaden,我这样做了,并且使用向导正确导入了数据,但我不知道如何在代码中插入弹出窗口 (GetOpenFilename) 以选择要打开的文件.
  • @LS_dev,数据正在导入,正如它在 CSV 文件中显示的那样。我需要像 "0 -4.99846 -28.53779" 而不是 "0,00000;"-4 99846";"-28 53779"" 那样干净

标签: vba excel csv


【解决方案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

上面的代码逐行获取数据,并使用“;”作为分隔符。这导致:

请注意,这只是部分成功。 mm 字段和 N 字段似乎已合并。

【讨论】:

  • 你好@Gary 的学生,那些 (s) (mm) 和 (N) 应该分别位于 Tempo、Deslocamento 和 Carga 下方。我看到的问题是小数显然用空格分隔。例如:-4 99846 那边应该是-4.99846
  • @MatheusMastrangeloCantelmo 至少正在导入数据。 您需要做进一步的工作才能正确安排它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 2020-12-27
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多