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 展开
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 展开
3个回答
展开全部
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、把两个过程合并到一个过程。别的有回答了。这里就不给出具体代码了。
在 过程 生成下拉() 里是没法访问到 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、把两个过程合并到一个过程。别的有回答了。这里就不给出具体代码了。
展开全部
检查是否有名称为FormMain的窗口
检查LabelData对应控件的名称是否正确
一个有效的检查方法,输入时,如果能自动关联控件的属性列表,那么名称就是正确的,否则就是错误的
检查LabelData对应控件的名称是否正确
一个有效的检查方法,输入时,如果能自动关联控件的属性列表,那么名称就是正确的,否则就是错误的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个formmain没有指向哪个对象
建议你录制一段宏
选中这个对象
知道这个对象的名称后再修改操作
建议你录制一段宏
选中这个对象
知道这个对象的名称后再修改操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询