Arrays 将VBA数组写入范围仅部分完成

Arrays 将VBA数组写入范围仅部分完成,arrays,vba,excel,Arrays,Vba,Excel,我正在开发一个子程序来执行一些计算,并从几个不同的表(大小相同,内容相似)收集结果,然后将它们转储到工作表中。 目前,我的司机看起来像这样: Sub Driver() Dim works() As Variant Dim rng As Range Dim ws as worksheet 'This reliably works and outputs an works = GenerateWorksArray() Set ws = Workshe

我正在开发一个子程序来执行一些计算,并从几个不同的表(大小相同,内容相似)收集结果,然后将它们转储到工作表中。 目前,我的司机看起来像这样:

Sub Driver()
    Dim works() As Variant
    Dim rng As Range
    Dim ws as worksheet

    'This reliably works and outputs an
    works = GenerateWorksArray()
    Set ws = Worksheets.Add
    Set rng = ws.Range("A1:P1").Resize(UBound(works, 1))

    'This is where it all breaks down
    rng = works

end sub
GenerateWorksArray
传回的数组是一个包含字符串、货币和双精度的1500 x 16变量数组。出于某种原因,当我用
rng=works
输出数组时,只有前156行被正确输出,从那时起,我什么也得不到


代码似乎仍在运行,如果我单击该范围内的单元格,我可以看到公式栏在剧烈闪烁。当我试图停止或中断执行excel的代码时,就会崩溃。有没有人因为我被难倒而经历过类似的事情并一起得到了一个有效的解决方案?

试试
ws.Range(“A1”).Resize(UBound(works,1),UBound(works,2))
工作表中有任何事件代码吗?看看你使用的是什么excel版本吗?ws.Range(“A1:P1”).Resize(UBound(works,1))有17列吗?将
,1
更改为
,0
。还要验证works是否确实具有1500行数据。我将添加
application.screnudpating=false
.enableevents=false
以提高速度。它可能不会改变任何东西,但我通常编写
rng.value=works
。我发现数据中有一个错误,即一个公式不起作用,被存储为文本,前面有一个=。当我将数组指定给范围时,这导致数组崩溃,所以这个故事的寓意是检查您的数据@PatrickLepelletier I通过打印
.address
属性,确认重新调整数组大小的语法按预期工作
.Resize(UBound(works,1))
将根据works中的行数重新调整第一个维度的大小。谢谢你的帮助!你能提供更多的信息吗,OP为什么要尝试这个吗?@Schorsch Per Patrick评论道,“A1:P1”在某种程度上掩盖了这个问题。如果数组的维数与OP预期的非常不同,那么我建议的代码将揭示这一点。如果我把它作为一条评论发布,并且它对OP有效,他会留下一条评论,说“谢谢”,这个问题就会成为孤立的、未回答的问题。我希望这段代码能回答这个问题,或者这段代码能揭示OP问题的真正原因。@Blackhawk,结果证明该方法是正确的,但底层数组中有错误,当分配给某个范围时,就会表现出来。作为一个经验丰富的StackOverflow用户,您建议我接下来如何处理这个问题?