0

我有一段 Excel-VBA 代码,其中以下行为使我无法理解

option explicit

....

private sub XYZ() 

   dim s       as string
   dim ser     as series
   dim diagram as chart

   ...

   s = function_returning_string(....)

 ' Following line throws runtime exception 13 
   set ser = diagram.seriesCollection.item(s)

   ....

end sub

如果我尝试在上面概述seriesCollectionchart对象中获取命名项目,它会抛出(德语)错误laufzeitfehler '13' typen unverträglich这将是运行时错误 13:英语类型不匹配。

将违规行更改为

set ser = diagram.seriesCollection.item(CStr(s))

使错误消失。

我不知道为什么会这样。CStr()应该将某些东西(此处:)转换s字符串,但s已经是字符串。

4

1 回答 1

0

CStr 将变量的类型转换为 String 数据类型。

如果你有一个函数 s = function_returning_string(....) 其中 s 已经输入了一个字符串,例如这样做:

dim s as string
dim sString as string

sString = cstr(s)

将毫无意义。
在其他情况下,这可能很有用。
有时人们使用它,例如使用 cDate 将字符串转换为日期。或者取字符串,切掉一些部分并使用 cDbl 或 cInt 转换为 Double 或 Integer 数据类型。

检查您的函数“function_returning_string”是否定义为:

Public Function function_returning_string() as string 

在这种情况下,seriesCollection 只允许将 String 类型的变量添加到集合中。

于 2012-09-27T12:37:12.653 回答