2013-12-18 50 views
2

我将以下代码拼凑在一起,以便修剪工作表中每个单元格的前导和尾随空格。为了保持表格属性,我需要确保我不会弄乱标题行。当我运行这个时候,除了标题行外,所有东西都被删除我究竟做错了什么?在Excel中输出数组

这是我第一次处理数组。当我在没有数组的情况下尝试这个时,代码会花费一些时间来读取和重写表单中的每个单元格。该阵列速度更快,我不明白如何使用它。

Dim arrData(), arrReturnData() As Variant 
Dim rng As Excel.Range 
Dim i, j, lRows, lCols As Long 

Set rng = ActiveSheet.UsedRange 
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) 'don't mess with the header row 
arrData = rng.Value 

lRows = rng.Rows.Count 
lCols = rng.Columns.Count 

ReDim arrData(1 To lRows, 1 To lCols) 
ReDim arrReturnData(1 To lRows, 1 To lCols) 

For j = 1 To lCols 
    For i = 1 To lRows 
    arrReturnData(i, j) = Trim(arrData(i, j)) 
    Next i 
Next j 

rng.Value = arrReturnData 
Set rng = Nothing 

回答

4

要分配

arrData = rng.Value

然后redimming它。因此所有的价值都消失了。

顺便说一句,你根本不需要ReDim arrData(1 To lRows, 1 To lCols)。将excel范围存储到变体数组时,数组会自动调整大小。

久经考验

Option Explicit 

Sub Sample() 
    Dim arrData(), arrReturnData() As Variant 
    Dim rng As Excel.Range 
    Dim i, j, lRows, lCols As Long 

    Set rng = ActiveSheet.UsedRange 
    Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) 

    lRows = rng.Rows.Count 
    lCols = rng.Columns.Count 

    ReDim arrReturnData(1 To lRows, 1 To lCols) 

    arrData = rng.Value 

    For j = 1 To lCols 
     For i = 1 To lRows 
      arrReturnData(i, j) = Trim(arrData(i, j)) 
     Next i 
    Next j 

    rng.Value = arrReturnData 
    Set rng = Nothing 
End Sub 
+0

在这种情况下,我会强烈建议[这](http://www.cpearson.com/excel/ArraysAndRanges.aspx)链接为你 :) –

0

使用保留

Redim Preserve arrData(1 To lRows, 1 To lCols)