Excel VBA - 将数组写入工作表时出错

时间:2015-07-22 22:35:23

标签: arrays vba excel-vba excel

我在VBA非常业余,所以代码可能不会留下深刻印象。情况是这样的:

我有一个例程,它从文本文件中导入一个由波形符分隔的信息表。我需要将它传递给我打开文件上的工作表。问题是一些列元素是字符串,其他列号。所以我认为一个解决方法是将我创建的第一个数组(BFarr)中的值重新用于可以转储到工作表上相关列中的较小数组中。

我从一个只有小整数的列开始。我最终得到了下面可能相当奇怪的代码。这可以达到一定的目的,因为使用Msgbox告诉我正确的数字在新数组(bfb)中出现。

为什么在将数组转储到工作表时只会得到零?

Sub BFudnew()
    Dim x As TextStream
    Dim BFarr(1 To 3000, 1 To 6) As Variant
    Dim bfb(1 To 3000) As Integer

    BFile = Sheets("Data").Range("Data_GAM").Value

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set x = fs.OpenTextFile(BFile)

    y = x.ReadAll

    Z = Split(y, Chr(10))

    For n = 0 To UBound(Z)
        BFsq = BFsq + 1
        A = Split(Z(n), "~")

        For o = 0 To UBound(A)
            BFarr(BFsq, o + 1) = A(o)
        Next o

    Next n

    For n = 1 To 3000
        BFval = Val(BFarr(n, 5))
        BFval = CInt(BFval)
        bfb(n) = BFval
    Next n

    Sheets("Cards").Range("E1:E3000") = bfb

    x.Close

End Sub

2 个答案:

答案 0 :(得分:0)

尝试在将数组粘贴到工作表之前转置数组:

Sheets("Cards").Range("E1:E3000") = Application.WorksheetFunction.Transpose(bfb)

答案 1 :(得分:0)

如果你知道它会进入一个列,你可以简单地使用2D数组开始:

Dim bfb(1 To 3000, 1 to 1) As Integer

并改变这一点:

bfb(n) = BFval

到此:

bfb(n, 1) = BFval