2015-04-01 57 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

相關問題