2015-04-01 71 views
0

我正在尝试编写VBA代码,它将读取给定的CSV文件名并在写入另一个CSV文件之前对数据进行一些更改。打开并读取不含表单名称的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

如果您正在使用'Workbooks.Open',那么这个过程本质上是一个文件►打开,而不是导入到现有的或新的工作表。以这种方式打开CSV时,只有一个工作表。使用'Sheets(1)'工作表对象参考或'Sheet1'工作表代码名称来引用它。 – Jeeped 2015-04-01 04:21:35

+0

@Jeeped谢谢!对不起,我对VBA有点新鲜,所以编辑代码到Workbooks.Open()。表(1)? – lyk 2015-04-01 04:25:26

+0

CSV只是一个文本文件。您无需将其导入到Excel中即可运行。您可以使用Excel宏来直接更改文本文件。 – 2015-04-01 06:59:52

回答

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参考只需以显示父项的句号开头。

+0

在将wb设置为空或离开子文件之前,可能会使用'wb.Close,False'。 – Jeeped 2015-04-01 04:41:59

+0

谢谢,我会先试试这个解决方案吧! =) – lyk 2015-04-01 04:42:40

+0

谢谢@Jeeped,效果很棒!不能相信我无法弄清楚这个简单的解决方案 – lyk 2015-04-01 08:01:56

相关问题