【发布时间】:2017-04-25 10:42:15
【问题描述】:
我正在尝试通过在 Excel 中通过 VBA 构建用户表单来构建数据库的简单前端。表格是多页的。当我在第一页上工作并使用UserForm1.Show vbModeless 打开用户表单时,我没有任何问题。第二页出现了,只是什么都没有。对于背景,第一页是输入信息以插入数据库的地方,第二页将是编辑这些字段和更新记录的页面。现在我开始构建第二个页面,当我尝试使用UserForm1.Show vbModeless 启动用户窗体时,我收到以下错误。每个页面包含的只是一堆标签,每个标签都有一个相应的文本框或组合框。
Run-time error '3704'
Operation is not allowed when the object is closed.
如何打开它以显示它?
打开用户窗体调用的代码是:
Option Explicit
Sub Show_Form()
UserForm1.Show vbModeless
End Sub
初始化代码为:
Private Sub UserForm_Initialize()
Dim conn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String, NextAM As String
With conn
.Provider = "SQLOLEDB"
.ConnectionString = "DATA SOURCE = server;Initial Catalog=database;INTEGRATED SECURITY=sspi;"
.Open
End With
strSQL = "SELECT MAX(RIGHT(AM_Ref,6)) + 1 FROM AM"
rst.Open strSQL, conn
With ThisWorkbook
If Len(rst(0)) = 3 Then
.Sheets("Lists").Range("Next_AM") = "AM_000" & rst(0)
ElseIf Len(rst(0)) = 4 Then
.Sheets("Lists").Range("Next_AM") = "AM_00" & rst(0)
ElseIf Len(rst(0)) = 5 Then
.Sheets("Lists").Range("Next_AM") = "AM_0" & rst(0)
End If
Me.AM_Ref.Text = .Sheets("Lists").Range("Next_AM").Value2
End With
rst.Close
Set rst = Nothing
conn.Close
Set conn = Nothing
With Me
.StartUpPosition = 0
.Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
.Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
End With
End Sub
请注意,初始化子程序与以前相同。如果我完全不清楚(可能),请告诉我,我可以澄清。
干杯!
【问题讨论】:
-
你的问题是你关闭了 rst/conn
-
让我感到愚蠢的方式@DougCoats!但非常感谢您的快速回复。为什么会导致这个问题?
-
如果连接已关闭且记录集已关闭,那么您将无法对记录执行任何操作
-
但在记录集或连接关闭后,我不会尝试对它们进行任何操作。它们关闭后唯一发生的事情就是设置用户窗体的位置。它确实解决了这个问题,但对我来说有点头疼。
-
我认为你遇到的问题没有完全理解没有其他代码......