VBA代码 运行出现424 要求对象错误

PublicSubAddData()WithFormMainIfFormMain.LabelData.Text<>""ThenFormMain.ListData.AddI... Public Sub AddData()
With FormMain
If FormMain.LabelData.Text <> "" Then
FormMain.ListData.AddItem (.LabelData.Text)
FormMain.ListData.ListIndex = .ListData.ListCount - 1
End If
End With
End Sub

运行到这一句就报错, If FormMain.LabelData.Text <> "" Then
无论怎么改都是报错。
If .LabelData.Text <> "" Then
If val(.LabelData.Text )<> "" Then
If val(FormMain.LabelData.Text) <> "" Then

LabelData 为TexrBox
ListData 为ListBox
展开
 我来答
ltW弧度的微笑
2014-08-18 · 超过54用户采纳过TA的回答
知道答主
回答量:117
采纳率:0%
帮助的人:104万
展开全部
Dim d As New Dictionary 是在 代码表存为数组() 过程里定义的过程级变量,代码表存为数组()过程执行完了后d就消失。
在 过程 生成下拉() 里是没法访问到 d的。
要解决这个问题
1、你可以把 d 定义为模块级的变量:就是把 Dim d As New Dictionary 在放到模块的顶部。代码如下:
Dim d As New DictionarySub 代码表存为数组() Dim data As New 执行 Dim sql As String Dim arr, y sql = "Select 定额名称,单价,计价单位,汇报单位,换算系数 from [定额计件$] " arr = data.筛选结果(sql) For y = 1 To UBound(arr, 2) d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y) Next yEnd Sub Sub 生成下拉() Dim sr As String Call 代码表存为数组 sr = Join(d.Keys, ",") With Range("m6:m25").Validation .Delete .Add Type:=xlValidateList, Formula1:=sr End WithEnd Sub2、把代码表存为数组()定义为一个函数,并返回一个 字典对象,把d的定义放到了生成下拉()过程里,代码如下:
Function 代码表存为数组() as Dictionary Dim data As New 执行 Dim sql As String Dim arr, y Dim d As New Dictionary sql = "Select 定额名称,单价,计价单位,汇报单位,换算系数 from [定额计件$] " arr = data.筛选结果(sql) For y = 1 To UBound(arr, 2) d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y) Next y set 代码表存为数组=dEnd Sub Sub 生成下拉() Dim sr As String Dim d As Dictionary '把d的定义放到了生成下拉()过程里 set d = 代码表存为数组() sr = Join(d.Keys, ",") With Range("m6:m25").Validation .Delete .Add Type:=xlValidateList, Formula1:=sr End WithEnd Sub3、把 过程 代码表存为数组() 定义为一个接收一个 字典对象的过程,把d的定义放到了生成下拉()过程里,并在生成下拉()过程里带参数调用 代码表存为数组() 过程。代码如下:

Sub 代码表存为数组(ByRef d As Dictionary) Dim data As New 执行 Dim sql As String Dim arr, y sql = "Select 定额名称,单价,计价单位,汇报单位,换算系数 from [定额计件$] " arr = data.筛选结果(sql) If d Is Nothing Then Set d = New Dictionary '如果d没有实例化,则实例化。 For y = 1 To UBound(arr, 2) d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y) Next yEnd Sub Sub 生成下拉() Dim sr As String Dim d As New Dictionary Call 代码表存为数组(d) sr = Join(d.Keys, ",") With Range("m6:m25").Validation .Delete .Add Type:=xlValidateList, Formula1:=sr End WithEnd Sub
4、把两个过程合并到一个过程。别的有回答了。这里就不给出具体代码了。
百度网友cc16d5c
推荐于2016-01-07 · TA获得超过731个赞
知道小有建树答主
回答量:647
采纳率:50%
帮助的人:533万
展开全部
检查是否有名称为FormMain的窗口

检查LabelData对应控件的名称是否正确

一个有效的检查方法,输入时,如果能自动关联控件的属性列表,那么名称就是正确的,否则就是错误的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
biuul
2014-08-18 · TA获得超过251个赞
知道小有建树答主
回答量:444
采纳率:100%
帮助的人:173万
展开全部
你这个formmain没有指向哪个对象
建议你录制一段宏
选中这个对象
知道这个对象的名称后再修改操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式