从excel 2000 vba中读取已关闭的csv文件

时间:2014-04-08 11:23:31

标签: excel vba excel-vba csv

我正在使用访问由其他程序创建的已关闭.csv file

  1. 下面的代码只是遍历每个单元格,并将关闭的excel文件中的值复制到打开的工作簿中的相同单元格。
  2. 第一个.formula行与 .xls 文件一起使用,引用 .csv 文件的注释掉的.formula行不会 - 我在每个单元格中获取"#REF!"
  3. 我认为我得到的错误是因为我没有声明它不是“标准”.xls文件?

    • 最终代码将从附加到每个文件的.csv文件中读取 经常因此必须保持关闭
    • 创建.csv文件的软件无法输出到.xls文件。它将被编码,以便我的宏将从它停止的地方恢复,而不是每次都完成整个工作表。

    非常感谢任何帮助。

    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
    

2 个答案:

答案 0 :(得分:3)

您可以直接打开文件并一次性复制范围

将下面的文件路径更改为适合。

此行以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

答案 1 :(得分:0)

您可以在应用之前打开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

或用更通用的语法替换公式,如之前的

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