【问题标题】:Run-time error '3704' with multipage userform多页用户表单的运行时错误“3704”
【发布时间】: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!但非常感谢您的快速回复。为什么会导致这个问题?
  • 如果连接已关闭且记录集已关闭,那么您将无法对记录执行任何操作
  • 但在记录集或连接关闭后,我不会尝试对它们进行任何操作。它们关闭后唯一发生的事情就是设置用户窗体的位置。它确实解决了这个问题,但对我来说有点头疼。
  • 我认为你遇到的问题没有完全理解没有其他代码......

标签: vba excel ado userform


【解决方案1】:

几个快速修复,你应该关闭并运行:

1) 将Private Sub UserForm_Initialize() 更改为Public Sub UserForm_Initialize()

2) 在您想要启动 UserForm 的主子中,使用以下命令:

Public Sub MasterSub()
   Dim UserForm as UserForm1
   .... code ..... 
   'Now ready to use the UserForm:
   Set UserForm = New UserForm1
   'UserForm will already be initialized and ready to be shown if you did not include that in your initialize sub
   UserForm.Show
End Sub

希望这会有所帮助, 丝绸代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多