龙空技术网

工作表与UserForm窗口交互过程中,如何实现数据删除

VBA语言専攻 119

前言:

此刻各位老铁们对“隐藏的模块中的编译错误userform2”大概比较讲究,小伙伴们都想要学习一些“隐藏的模块中的编译错误userform2”的相关知识。那么小编也在网摘上收集了一些对于“隐藏的模块中的编译错误userform2””的相关文章,希望小伙伴们能喜欢,我们快快来学习一下吧!

大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第83讲:工作表数据与UserForm窗口的交互:如何实现数据的删除。与数据库数据交互的实现要具备几个特征:可录入,可修改,可查询,可删除,但是在ADO连接工作表时欠缺的是不可以直接删除数据,这也是IMEX的缺憾吧,但要实现工作表数据的删除可以有很多的办法,这讲的内容就是利用ADO来定位这个数据,然后利用工作表删除。

思路,①在UserForm窗口上,设置删除按钮,用于指令的下达。

②在弹出UserForm窗口后,EXCEL文件要隐藏。

③要考虑到按钮之间的作用,在弹出对话框后只能显示"开始"、"显示下一条记录"、"显示最后一条记录"、"退出"按钮。

下面我们首先实现UserForm窗体:在上一讲的基础上我这次增加的是"删除"按钮:

下面看我的代码:

1 从EXCEL窗口进入人机交互窗口:

Sub mynzRecords_83() '将工作表数据变成记录集,并实现利用UserForm窗口进行删除数据

UserForm1.Show

End Sub

代码解释:上述代码完成从EXCEL界面到人机交互UserForm窗体,这时的Application.Caller是8.

2 "删除"按钮响应的代码:Private Sub CommandButton8_Click() '删除

If MsgBox("是否要删除记录?", vbOKCancel, "提示") = vbCancel Then Exit Sub

Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Dim myData() As Variant

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.FullName

cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';" _

& "data source=" & strPath

strSQL = "SELECT * FROM [数据7$]"

rsADO.Open strSQL, cnADO, 1, 3

myrow = 1

If rsADO.RecordCount > 0 Then

rsADO.MoveFirst

myrow = myrow + 1

Do While Not rsADO.EOF

If Trim(rsADO.Fields(0)) = UserForm1.TextBox1.Value Then Exit Do

rsADO.MoveNext

myrow = myrow + 1

Loop

End If

UserForm1.TextBox1.Value = ""

UserForm1.TextBox2.Value = ""

UserForm1.TextBox3.Value = ""

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

UserForm1.Hide

Windows("VBA与数据库操作(第二册).xlsm").Activate

Sheets("数据7").Rows(myrow).Delete Shift:=xlUp

UserForm1.Show

End Sub

代码解释:上述代码在定位删除记录的时候用了myrow记录要删除的行号,然后利用Sheets("数据7").Rows(myrow).Delete Shift:=xlUp 删除这条记录。

3 为了实现按钮的控制在窗体激活后有如下代码

If Right(Application.Caller, 1) = 8 Then '删除

' UserForm1.CommandButton3.Enabled = False '开始

UserForm1.CommandButton1.Enabled = False '下一条记录

UserForm1.CommandButton4.Enabled = False '最后一条记录

UserForm1.CommandButton5.Enabled = False '编辑记录

UserForm1.CommandButton7.Enabled = False '查找记录

UserForm1.CommandButton8.Enabled = False '删除记录

UserForm1.CommandButton6.Enabled = False '保存记录

UserForm1.CommandButton9.Enabled = False '录入记录

UserForm1.TextBox1.Enabled = False

UserForm1.TextBox2.Enabled = False

UserForm1.TextBox3.Enabled = False

End If

代码解释:上述代码让某些按钮失去代码响应,同时文本框也不再接受焦点。

代码的运行:

点击开始后,删除按钮可用使用:

今日内容回向:

1 如何实现删除目的的?

2 上述代码为什么到点击"开始"后才可以利用删除按钮?

标签: #隐藏的模块中的编译错误userform2