打开并读取没有工作表名称的CSV文件

时间:2015-04-01 04:02:45

标签: excel vba excel-vba csv

我正在尝试编写将读取给定CSV文件名的VBA代码,并在写入另一个CSV文件之前对数据进行一些更改。

Set oSht_Input = Workbooks.Open(file_Path, UpdateLinks:=False).Worksheets(extractDataFile.convertedSheetName)
lastRow = oSht_Input.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

For Rows = 2 To lastRow
    extractedDataFileRecord.Variable1 = CStr(oSht_Input.Cells(Rows, 1))

.... code continues

此代码通常运行良好。

然而,缺点是CSV文件只会复制文件名并放入工作表名称。因此,我可以放心地假设变量 convertedSheetName 等同于提供的文件名。

如果文件名足够短,可以复制到工作表名称中,则此代码将起作用。但是,如果文件名太长,文件名将在工作表名称中被截断,因此我无法获得设置Worksheet对象的正确引用。

有没有更好的方法来实际获取工作表参考,以便我可以读取工作表中的单元格值?

1 个答案:

答案 0 :(得分:1)

如果您正在使用Workbooks.Open,则该过程基本上是文件►打开,而不是导入到现有或新工作表。以这种方式打开CSV时,只有一个工作表。使用Sheets(1)工作表对象集合引用或Sheet1工作表代号来引用它。例如:

Dim rw As Long, lastRow As Long, file_Path As String, wb As Workbook, oSht_Input As Worksheet

file_Path = "something"
Set wb = Workbooks.Open(file_Path, UpdateLinks:=False)
Set oSht_Input = wb.Sheets(1)

With oSht_Input
    lastRow = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For rw = 2 To lastRow
        'do stuff to .Cells or .Range here
        extractedDataFileRecord.Variable1 = CStr(.Cells(rw, 1))
    Next rw
End With

Set oSht_Input = Nothing
Set wb = Nothing

这应该让你去。我在With ... End With中使用了工作表参考,以便后续的.cells和.range引用只需要以显示父级的句点开头。

相关问题