从excel 2000 vba中读取closures的csv文件

我正在使用excel-vba访问由另一个程序创build的一个closures的.csv file

  1. 下面的代码只是通过每个单元格,并从打开的工作簿中将封闭的Excel文件中的值复制到同一单元格。
  2. 第一个.formula行与.xls文件一起使用,引用.csv文件的注释掉的.formula行不会 – 我得到"#REF!" 在每个细胞。

我认为我得到的错误是由于我没有说明它不是一个“标准” .xls文件的事实?

  • 最终的代码将从一个经常被附加到的.csv文件读取,因此它必须保持closures状态
  • 创build.csv文件的软件不能输出到.xls文件。 它将被编码,以便我的macros将从停止的位置恢复,而不是每次都执行整个工作表。

任何帮助将非常感激。

 Sub GetData() Dim RowNumber As Integer Dim ColNumber As Integer For RowNumber = 1 To 100 For ColNumber = 1 To 104 With Cells(RowNumber, ColNumber) .Formula = "='C:\Documents and Settings\admin\Desktop\[data.xls]Sheet1'!" & Cells(RowNumber, ColNumber).Address '.Formula = "='C:\Documents and Settings\admin\Desktop\[data1.csv]Sheet1'!" & Cells(RowNumber, ColNumber).Address .Value = .Value End With Next Next End Sub 

你直接打开文件,并复制范围在一个镜头

更改下面的文件path以适应。

这行打开文件作为ReadOnly,所以它可以被追加到其他地方
Set Wb2 = Workbooks.Open("C:\temp\data.csv", False, True)

 Sub WhyNotOpen() Dim Wb1 As Workbook Dim Wb2 As Workbook With Application .ScreenUpdating = False .EnableEvents = False End With Set Wb1 = ThisWorkbook Set Wb2 = Workbooks.Open("C:\temp\data.csv", False, True) Wb1.Sheets(1).Range("A1:CV104").Value = Wb2.Sheets(1).Range("A1:CV104").Value Wb2.Close False With Application .ScreenUpdating = True .EnableEvents = True End With End Sub 

您可以先打开csv并将其作为工作簿对象引用,然后再应用它,因为csv文件已打开,所以您可以将文件名和工作表名称放在引用中。

 Sub GetData() Dim wb as workbook Dim RowNumber As Integer Dim ColNumber As Integer set wb = application.workbooks.open("C:\Documents and Settings\admin\Desktop\data1.csv") For RowNumber = 1 To 100 For ColNumber = 1 To 104 With Cells(RowNumber, ColNumber) .Formula = "='[data1.csv]Sheet1'!" & Cells(RowNumber, ColNumber).Address .Value = .Value End With Next Next End Sub 

或者像以前一样用更通用的语法replace公式

 .Formula = "='" &"[" & wb.Name & "]" & wb.Sheets(1).Name &"'!" & Cells(RowNumber, ColNumber).Address