我正在尝试编写将读取给定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对象的正确引用。
有没有更好的方法来实际获取工作表参考,以便我可以读取工作表中的单元格值?
答案 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引用只需要以显示父级的句点开头。