【问题标题】:Assigning an array to a range of cells in VBA via Objects通过对象将数组分配给VBA中的一系列单元格
【发布时间】:2021-01-22 00:17:03
【问题描述】:

我正在为工作生成一个自动化脚本,该脚本在单个目录中搜索存储在多个 CSV 文件中的数据,然后将这些数据合并到一个工作簿中。我能够毫无问题地提取数据(ie 将一系列值分配给数组),但我似乎无法弄清楚如何进行反向操作。

执行脚本的那部分时我总是遇到的错误是:

运行时错误“438”: 对象不支持此属性或方法。

我将原因归结为.Range.Cells 的组合(如果我更改代码以将单个数组值分配给单个工作表单元格值,它们本身就可以正常工作)。只有当我尝试将 array 分配给一系列单元格时,才会出现错误。 所以,我的问题是:我为下面编写的简化脚本所追求的面向对象方法支持什么方法?

Dim testarray(1 To 2, 1 To 2) As Integer

testarray(1, 1) = 1
testarray(1, 2) = 2
testarray(2, 1) = 3
testarray(2, 2) = 4

Set Target = Workbooks("_ConsolidatedData.xlsm")
Set wb = Target
Set ws = wb.Worksheets(1)
ws.Range(.Cells(1, 1), .Cells(2, 2)).Value = testarray(2, 2)

【问题讨论】:

  • ws.Range("A1").Resize(ubound(testarray, 1), ubound(testarray, 2)).Value = testarray
  • ws.Range(.Cells(1, 1), .Cells(2, 2)).Value 将不起作用,除非您没有在此处包含 With 块。
  • 好吧,我会的。在这种情况下,这完全符合我的需要。我用Cells(1,1) 替换了.Range("A1"),以便它与上游的内容兼容。明天我会尝试将它移植到我的实际代码中,但我怀疑这是解决方案。
  • 在这种情况下,正确的块是With ws吗?
  • 是的,但是如果您使用 Resize 方法,您实际上并不需要 With 块。

标签: arrays vba object range cell


【解决方案1】:
ws.Range(.Cells(1, 1), .Cells(2, 2)).Value = testarray(2, 2)

这一行缺少一个 With 块

With ws
    .Range(.Cells(1, 1), .Cells(2, 2)).Value = testarray 'no (2 ,2)
End with
 

这些中的任何一个都可以满足您的需求,如果您的数组大小发生变化,则无需调整:

ws.Range("A1").Resize(ubound(testarray, 1), ubound(testarray, 2)).Value = testarray

ws.Cells(1, 1).Resize(ubound(testarray, 1), ubound(testarray, 2)).Value = testarray

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多