2016-05-23 156 views
1

我試圖從Excel工作簿中導出表格到管道分隔的txt文件,這些文件以與相應工作表相同的方式命名。問題是我無法讓我的宏遍歷工作簿中的不同工作表以將所有非空白單元格導出到txt文件。以下是我的代碼:如何從第一個非黑色到最後一個非空白單元格(VBA)選擇單元格範圍?

Sub TableExtract() 

Dim myFile As String, WS_Count As Integer, x As Integer, rng As Range, cellValue As Variant, i As Integer, j As Integer 

WS_Count = ActiveWorkbook.Worksheets.Count 
For x = 1 To WS_Count 

    myFile = "C:\Users\mohamednuri.beitelma\Desktop\" & ActiveSheet.Name & ".txt" 

    Set rng = Sheets(x).Range("A1").CurrentRegion 
    Open myFile For Output As #1 

    For i = 1 To rng.Rows.Count 
     For j = 1 To rng.Columns.Count 

      cellValue = rng.Cells(i, j).Value 

      If j = rng.Columns.Count Then 
       Print #1, cellValue 
      Else 
       Print #1, cellValue & "|", 
      End If 

      Next j 
     Next i 
    Close #1 
Next x 

End Sub 

此代碼返回錯誤。任何想法如何在第一個和最後一個非空白單元格之間的範圍內選擇內容並將其導出?

+0

你可以顯示你得到的錯誤嗎? –

回答

0

使用當前的區域屬性:

Set rng = Range("A1").CurrentRegion 

這是選擇A1的equivelant並按下Ctrl鍵+因爲你分配正在引起


你的錯誤一個行號和一個列號到Range方法,你應該有一個地址或一個開始/結束單元格:

'// lets assume row = 5 
row = Range("A" & Rows.Count).End(xlUp).row 

'// lets assume col = 10 
col = Cells(1, Cells.Columns.Count).End(xlToLeft).Column 

'// this will produce Range(5, 10) <~~ invalid syntax 
Range(row, col).Select 

'// consider instead: 
Set rng = Range(Cells(1, 1), Cells(row, col)) 
'// or use the .CurrentRegion property as mentioned above if there are no gaps in your data. 
+0

這有效,但由於某種原因,它不會遍歷表單。它只出口我目前的一個。我編輯了上面的代碼以反映當前的區域屬性。有任何想法嗎? –

+1

您需要使用圖紙對象限定範圍,否則它將默認爲'AcitveSheet'。而不是'Set rng = Range(「A1」)。CurrentRegion'使用'Set rng = Sheets(x).Range(「A1」)。CurrentRegion' –

+0

我已經這樣做了,但唯一得到的結果是第一張。我基本上在表1中有一個表格,而在表格2中有一個不同的表格。我想在每個單獨的txt文件中導出每個表格,但目前我只能得到一個(我目前使用的)。 –

相關問題