2016-09-02 97 views
1

因此,我正在處理的項目需要我讀取CSV文件,解析並找到所需列,然後將所需列打印到另一個工作表。我的部分問題是,我一直在學習VBA,所以有一些簡單的東西我錯過了。 我嘗試了許多不同的打印方式,其中沒有一個像我想要的那樣打印在列中。如果有線程已經回答了這個問題,我很抱歉,但我找不到它。 到目前爲止,我已經能夠讀取CSV文件並將所有信息存儲到二維數組中。這裏是代碼爲:在VBA中按列打印到Excel單元格

i = 0 'This is the x value of the 2d array 
'Populate the 2d array with the CSV File Data 
Do Until csvFile.AtEndOfStream 
    sLine = csvFile.ReadLine 
    sArray() = Split(sLine, ";") 
     For j = 0 To UBound(sArray) 
      stArray(i, j) = sArray(j) 
     Next j 
    i = i + 1 
Loop 

現在,我在我想打印所需的列到陣列的一部分。我正在嘗試打印測試,以確保在開始檢查之前可以做到這一點,所以我使用單維數組進行測試而不是2D數組。 一旦我弄清楚如何打印,那麼我將通過if語句來運行我的2d數組,該if語句將查找所需的列。

這裏是我的測試代碼:

Dim o As Object 
Set o = CreateObject("excel.application") 
o.Visible = True 
o.Workbooks.Add 

    For r = 0 To UBound(sArray) 
     o.Sheets("test").Range(o.Cells(3, 1).Address, o.Cells(3, r).Value = sArray(r) 
    Next r 

相反,我現在正在運行時錯誤「1004」「應用程序定義或對象定義爲在環行錯誤」 我打招呼沒有足夠的經驗或知識的VBA知道如何解決這個問題。我的經驗是Java和Python。

同時,如何將數組打印到一列單元格?對嗎?

任何幫助,這將是有益的,臨屋區你好。

回答

0

Excel可以使用2維數組爲數值指定單元格,但是您需要移調(翻轉尺寸)數組,stArray

假設stArray尺寸正確。

 

    o.ActiveSheet.Range("A1").Resize(UBound(stArray, 2) + 1, _ 
    UBound(stArray, 1) + 1).Value = o.Transpose(stArray) 

您的密碼不會改變stArray。如果有額外的行或列,那麼使用你的i和j變量到Resize範圍。

 

    o.ActiveSheet.Range("A1").Resize(j + 1, i + 1).Value = o.Transpose(stArray) 

如果你想通過2維數組中的每個元素進行迭代:

 

    With o.ActiveSheet 
     For rws = 0 To UBound(stArray, 2) 
      For cols = 0 To UBound(stArray, 1) 

       .Cells(rws + 1, cols + 1).Value = stArray(cols, rws) 

      Next 
     Next 
    End With 

+0

謝謝您的答覆。我正在通過你的陳述的邏輯工作,所以對不起,如果這看起來像一個無知的問題: 當我打印時,沒有辦法通過單元格(i,j)=數組(i,j)運行嗎? – Soolkiki

+0

我更新了我的答案。你可以做到,但速度要慢得多。 –

+0

太棒了,謝謝你的幫助! – Soolkiki

0

很少有更簡單的方法來查詢在Excel /過濾/總外部數據沒有VBA。

對於Excel 2010及以上版本,Power Query應該是最簡單,最強大的。

另一種方式是Data標籤>From Text>Delimited>和在DelimitersOther:輸入;
之後,您可以刪除額外的列,向表中添加過濾器,並使用VBA來處理Excel無法完成的任何操作。 https://msdn.microsoft.com/en-us/library/office/ff840319.aspx

而且,很少有辦法用SQL查詢/過濾/骨料外部數據: http://www.exceluser.com/formulas/msquery-excel-text-files.htm

+0

謝謝,但我正在尋找更自動化的解決方案。這不是一次性的事情,因爲我們是總承包商,這是用於打印來自我們的打印機之一的數據。 – Soolkiki