【问题标题】:passing a variant to SetSourceData results in "type mismatch"将变体传递给 SetSourceData 会导致“类型不匹配”
【发布时间】:2014-10-02 03:41:01
【问题描述】:

我正在使用 excel vba 制作饼图,部分过程要求我调用函数 SetSourceData 并为其提供应该是 Range 类型的“Source”参数。我的源参数恰好是一个变体,我收到“类型不匹配”错误。我见过人们将变体作为源参数传递而没有出错。有办法解决吗?谢谢。

这里有一些代码:

mychart.ChartType = xlPie
mychart.SetSourceData Source:=myVariant

myVariant 包含诸如“Apple”、“Banana”、“Pear”之类的字符串

【问题讨论】:

  • 您是否尝试过先将 Variant 传递给 Range 变量,然后将其用作源?
  • myVariant 中究竟是什么?
  • myVariant 包含字符串,例如“苹果”、“香蕉”、“梨”
  • @schmolio007。我试着。每次我更改某些内容时,都会弹出一个新错误。让我看看我是否能够像你说的那样将内容传递到一个范围

标签: excel charts type-conversion type-mismatch vba


【解决方案1】:

See here 获取有关 Chart.SetSourceData 方法的文档。源必须是 Range 对象。因此,如果您的变体计算结果为 Range,那么您尝试执行的操作可能会起作用。

但是,如果您的变体是字符串数组或其他东西(从您的 cmets 中听起来可能是这样),那么它不会起作用。

声明一个显式类型为 Range 的变量,将您的数据存储在该变量中,并在您的 Chart.SetSource 方法中使用它。如果您已经将数据存储在变量数组中,则可以执行以下操作:

Dim wsChartSource as Worksheet
Dim rChartSource as Range

Set wsChartSource = ThisWorkbook.Sheets("Sheet Name")
With wsChartSource
    'Resize Range object to the size of the array
    Set rChartSource = .Range(.Cells(1, 1), .Cells(UBound(MyVariantArray), UBound(MyVariantArray, 2)))
    'Write array to Range
    rChartSource.Value2 = MyVariantArray
End With

'Now use Range object as source for chart
MyChart.SetSourceData Source:=rChartSource

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2018-03-25
    相关资源
    最近更新 更多