Excel VBA中如何通过变量修改RowSource属性?
问题解决方法
你的错误根源在于字符串拼接方式错误,代码里把变量i当成了字符串字面量"i"来拼接,导致最终生成的RowSource是GetChosenIncomei——这个名称在你的名称管理器里不存在,所以触发"无效属性值"错误。
修正代码
把GetMonth过程里的赋值语句改成以下写法:
Private Sub GetMonth() Me.lstIncome.RowSource = "GetChosenIncome" & i End Sub
- VBA中推荐用
&做字符串拼接(+也能拼,但遇到数值和字符串混合时容易出类型错误) - 这样当
i=1时,最终会生成GetChosenIncome1,和你名称管理器里定义的名称匹配。
额外检查点
- 确认名称管理器中确实存在
GetChosenIncome1(对应i=1时的目标名称),如果i会取其他值,也要确保对应名称都已定义 - 如果
GetChosenIncome是参数查询而非多个独立名称,那你需要改用参数传递的方式,示例代码如下:
Private Sub GetMonth() Dim qdf As QueryDef Set qdf = CurrentDb.QueryDefs("GetChosenIncome") ' 设置参数值,假设参数名为@MonthID qdf.Parameters("@MonthID") = i ' 将查询结果作为列表框的数据源 Me.lstIncome.RowSource = qdf.SQL Set qdf = Nothing End Sub
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

