EXCEL的VBA ,连接数据库,运行时错误 424 要求对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL的VBA ,连接数据库,运行时错误 424 要求对象相关的知识,希望对你有一定的参考价值。

Sub AdoExcelAcc()
Dim Cnn

Set Cnn = CreateObject("ADODB.Connection")
With Cnn
.Provider = "microsoft.ACE.oledb.12.0"
.ConnectionString = "Data Source = d:\database2.accdb;"
.Open
End With

End Sub
-------------------------
Private Sub TextBox2_Enter()
If TextBox1.Text = "" Then
msgbox "请输入柜员号"
Unload UserForm2
UserForm2.Show
Else
Call AdoExcelAcc
Recordset.Open "SELECT * From 柜员列表 where 柜员号 = textbox1.text" & "jet oledb:database password="

If Not Recordset.EOF Then
TextBox2.Text = Recordset.Fields(2).Name
Else
msgbox "柜员不存在"
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
Unload UserForm2
UserForm2.Show
End If
End If
End Sub
------------------------------
总是提示在【Recordset.Open 】那一行,“运行时错误 424”。
运行时错误 424 要求对象

【Recordset.Open 】后面的SQL有点问题, textbox1.text是变量,不能写在双括号内。
而且密码没有的话,需要在等号后面加 单引号`+单引号+双引号
"SELECT * From 柜员列表 where 柜员号 = '" & textbox1.text & "'; jet oledb:database password=''"追问

已经按你说的修改了代码,但还是出现同样的问题,
Dim strname1 As String
strname1 = Me.TextBox1.Text
Recordset.Open "SELECT * From 柜员列表 where 柜员号 = ' " & strname1& " '; jet oledb:database password='' "

参考技术A
当错误代码为 -2147217904 时则执行。。。

附,部分错误代码说明:
400窗体已经显示,不能显示为模式窗体
402代码必须先关闭顶端模式窗体
419允许使用否定的对象
422找不到属性
423找不到属性或方法
424需要对象
425无效的对象使用
429ActiveX 部件不能建立对象或返回对此对象的引用
430类不支持自动操作
432在自动操作期间找不到文件或类名
438对象不支持此属性或方法
440自动操作错误
442连接至型态程序库或对象程序库的远程处理已经丢失
443自动操作对象没有默认值
445对象不支持此动作
446对象不支持指定参数
447对象不支持当前的位置设置
448找不到指定参数
449参数无选择性或无效的属性设置
450参数的个数错误或无效的属性设置
451对象不是集合对象
452序数无效
453找不到指定的 DLL 函数
454找不到源代码
455代码源锁定错误
457此键已经与集合对象中的某元素相关
458变量使用的型态是 Visual Basic 不支持的
459此部件不支持事件
460剪贴板格式无效
461. 未找到方法或数据成员
462远程服务器机器不存在或不可用
463类未在本地机器上注册
480不能创建 AutoRedraw 图象
481图片无效
482打印机错误
483打印驱动不支持指定的属性
484从系统得到打印机信息时出错。 确保正确设置了打印机
485无效的图片类型
486不能用这种类型的打印机打印窗体图象
520不能清空剪贴板
521不能打开剪贴板
735不能将文件保存至 TEMP 目录
744找不到要搜寻的文本
746取代数据过长
31001内存溢出
31004无对象
31018未设置类
31027不能激活对象
31032不能创建内嵌对象
31036存储到文件时出错
31037从文件读出时出错

Err。 对象来探测并回应可捕获的错误

3没有返回的GoSub
5无效的过程调用
6溢出
7内存不足
9数组索引超出范围
10此数组为固定的或暂时锁定
11除以零
13类型不符合
14字符串空间不足
16表达式太复杂
17不能完成所要求的操作
18发生用户中断
20没有恢复的错误
28堆栈空间不足
35没有定义 子程序、函数,或属性
47DLL 应用程序的客户端过多
48装入 DLL 时发生错误
49DLL 调用规格错误
51内部错误
52错误的文件名或数目
53文件找不到
54错误的文件方式
55文件已打开
57 I/O 设备错误
58文件已经存在
59记录的长度错误
61磁盘已满
62输入已超过文件结尾
63记录的个数错误
67文件过多
68设备不可用
70没有访问权限
71磁盘尚未就绪
74不能用其他磁盘机重命名
75路径/文件访问错误
76找不到路径
91尚未设置对象变量或 With 区块变量
92For循环没有被初始化
93无效的模式字符串
94Null 的使用无效
97不能在对象上调用 Friend 过程,该对象不是定义类的实例
298系统 DLL 不能被加载
320在指定的文件中不能使用字符设备名
321无效的文件格式
322不能建立必要的临时文件
325源文件中有无效的格式
327未找到命名的数据值
328非法参数,不能写入数组
335不能访问系统注册表
336ActiveX 部件不能正确注册
337未找到 ActiveX 部件
338ActiveX 部件不能正确运行
360对象已经加载
361不能加载或卸载该对象
363未找到指定的 ActiveX 控件
364对象未卸载
365在该上下文中不能卸载
368指定文件过时。该程序要求较新版本
371指定的对象不能用作供显示的所有者窗体
380属性值无效
381无效的属性数组索引
382属性设置不能在运行时完成
383属性设置不能用于只读属性
385需要属性数组索引
387属性设置不允许
393属性的取得不能在运行时完成
394属性的取得不能用于只写属性

当我将排序添加到宏的末尾时,excel Vba 错误 400

【中文标题】当我将排序添加到宏的末尾时,excel Vba 错误 400【英文标题】:excel Vba error 400 when I added sorting to the end of my macro 【发布时间】:2016-06-09 12:07:32 【问题描述】:

我有一个相对较长的子组件,它根据数据的来源将数据添加到一堆列中的另一个工作表中。这部分代码完美运行,但是我想将表中的所有行排序到添加的最后一行。如果我硬编码要包含在范围中的单元格,我添加到最后的排序代码可以工作,但是每次运行子时我的范围都会增长所以我试图使范围包括我为下一个空命名的变量行(1MaxRows)。

当我这样做时,我得到一个错误,上面写着“400”,过去我得到这个错误是因为我引用了错误的工作表或工作簿,但这次我没有更改任何工作表引用。我的代码中出现此错误的部分如下:

Columns("A:Q").Select
ActiveWorkbook.Worksheets("Raw Data").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Raw Data").Sort.SortFields.Add Key:=range("A2:A & lMaxRows" _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Raw Data").Sort.SortFields.Add Key:=range("B2:B & lMaxRows" _
    ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Raw Data").Sort
    .SetRange range("A1:Q & lMaxRows")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

我尝试过以多种方式更改范围代码,但我总是遇到溢出错误或 400 错误。 谢谢你的帮助。

【问题讨论】:

【参考方案1】:

您应该使用正确的工作表来限定您的 Range 调用,并且您的地址中的引号也有误。例如:

Dim ws                    As Worksheet
Set ws = ActiveWorkbook.Worksheets("Raw Data")
With ws.Sort.SortFields
    .Clear
    .Add Key:=ws.Range("A2:A" & lMaxRows), SortOn:=xlSortOnValues, _
         Order:=xlAscending, DataOption:=xlSortNormal
    .Add Key:=ws.Range("B2:B" & lMaxRows), SortOn:=xlSortOnValues, _
         Order:=xlDescending, DataOption:=xlSortNormal
End With
With ws.Sort
    .SetRange ws.Range("A1:Q" & lMaxRows)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

我假设您已正确声明并为lMaxRows 分配了一个值(请注意,它是LMAXROWS 而不是1MAXROWS,开头有一个数字。

【讨论】:

我使用 lMaxRows = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row 来声明 lMaxRows。是的,我使用了 LMaxRows,我的问题中的 1 是一个错字 但是当我把你的代码放在我的位置时,它说你在第一个 with 语句中有 2 行语法错误 抱歉 - 我在修复您的代码时留下了几个引号。现已更正。

以上是关于EXCEL的VBA ,连接数据库,运行时错误 424 要求对象的主要内容,如果未能解决你的问题,请参考以下文章

excel vba 运行时错误

VBA背面运行Python的权限错误

用于将数据粘贴到新表行中的 VBA 宏 - Excel

Excel VBA 自动化错误:调用的对象已与其客户端断开连接——不一致的错误

excel用vba时出现运行错误6-溢出,请帮忙看下我的程序是否有问题

从 C# 运行 Excel 宏:从 VBA 捕获运行时错误