【问题标题】:copying array onto range of cells将数组复制到单元格范围
【发布时间】:2016-03-09 15:13:13
【问题描述】:

我想将数组mastersheet() 的值复制到一系列大小相等的单元格中。

mastersheet() 最初声明为变体 Dim mastersheet() As Variant

最终在代码中它有 4 个“列”或维度。 ReDim mastersheet(1, 1, 1, 1)

最终在第 2 列或第二维中将字符串添加到其中。并非所有列都具有相同的数据类型。

wbmastersheet.Worksheets(1).range("A1:D" & UBound(mastersheet, 4)) = mastersheet()

我收到以下错误

错误 13:类型不匹配

谁能解决这个问题?

【问题讨论】:

  • 另外值得注意的是range("A1:D" & UBound(mastersheet, 4)) 会返回一个错误,因为UBound() 返回一个整数。 Range() 需要一个字符串,因此您必须将整数转换为字符串 range("A1:D" & CStr(UBound(mastersheet, 4)))
  • 这可能是您的错误 13 的原因,因为您试图将字符串与整数连接

标签: excel vba


【解决方案1】:

您似乎将 排名 与实际维度混淆了。

重写您的代码,使 ma​​stersheet 为 1 到 x,1 到 4。将值放入数组中,

redim mastersheet(1 to 2, 1 to 4)
mastersheet(1, 1) = "A1"
mastersheet(1, 2) = "B1"
mastersheet(1, 3) = "C1"
mastersheet(1, 4) = "D1"
mastersheet(2, 1) = "A2"
mastersheet(2, 2) = "B2"
mastersheet(2, 3) = "C2"
mastersheet(2, 4) = "D2"

像这样将值写回工作表,

wbmastersheet.Worksheets(1).range("A1").Resize(UBound(mastersheet, 1), UBound(mastersheet, 2)) = mastersheet

【讨论】:

  • 但是 mastersheet() 在这一点上是添加了 vales 的代码的结果......知道数组维度的唯一方法是使用 UBound 函数,就我而言知道。
  • 如果您有一个模仿工作表上的行 × 列的值数组,那么您有一个 1 到 x、1 到 y 数组. x 是行数,y 是列数。如果您有 4 个字段的两条“记录”(例如 A1:D2),那么您有 1 到 2、1 到 4。不是(1、1、1、1)。
  • 你是对的,这是我的一个非常大的概念错误。
  • 不用担心;我希望上面的简单演示有助于解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多