从excel 2000 vba中读取closures的csv文件
我正在使用excel-vba访问由另一个程序创build的一个closures的.csv file
。
- 下面的代码只是通过每个单元格,并从打开的工作簿中将封闭的Excel文件中的值复制到同一单元格。
- 第一个
.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