Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 如何在使用VBA单击一次后使access窗体中的按钮保持禁用状态_Forms_Ms Access_Button_Vba - Fatal编程技术网

Forms 如何在使用VBA单击一次后使access窗体中的按钮保持禁用状态

Forms 如何在使用VBA单击一次后使access窗体中的按钮保持禁用状态,forms,ms-access,button,vba,Forms,Ms Access,Button,Vba,我试图编写一个按钮,允许用户只点击一次。单击一次后,我已成功禁用该按钮,但当我重新打开表单时,该按钮仍处于启用状态 如何在单击一次后使按钮保持禁用状态。最后,我想创建一个包含表单的ACCDE,该表单有一个只启用一次的按钮。ACCDE文件将用于不同的项目,每次启动新项目时,都将使用通用ACCDE文件的副本。每次启动新项目(即打开ACCDE的通用副本)时,该按钮都需要在内部启用,并在用户单击该按钮后变为禁用状态,并对该特定项目保持永久禁用状态 我设法为那个按钮做了如下编码 Private Sub C

我试图编写一个按钮,允许用户只点击一次。单击一次后,我已成功禁用该按钮,但当我重新打开表单时,该按钮仍处于启用状态

如何在单击一次后使按钮保持禁用状态。最后,我想创建一个包含表单的ACCDE,该表单有一个只启用一次的按钮。ACCDE文件将用于不同的项目,每次启动新项目时,都将使用通用ACCDE文件的副本。每次启动新项目(即打开ACCDE的通用副本)时,该按钮都需要在内部启用,并在用户单击该按钮后变为禁用状态,并对该特定项目保持永久禁用状态

我设法为那个按钮做了如下编码

Private Sub Command21_Click()
DoCmd.OpenQuery "Reset AutoCounter"
Command21.Enabled = False
Command25.SetFocus
End Sub 
上面的代码在单击一次后禁用该按钮,但当您关闭表单并重新打开它时,该按钮将显示为已启用

是否有一个代码,我可以用来保持按钮禁用

您可以在设计时这样做:

  • 在VBA IDE中,从项目视图中选择所需的
    UserForm
    ,并将其显示在主代码窗格中

  • 选择其
    Command21
    控件

  • Properties
    视图(F4弹出)中,将其
    Enabled
    属性设置为
    False

或者,在运行时执行此操作

  • UserForm
    code窗格中插入此项:

    Private Sub UserForm_Initialize()
        Command21.Enabled = False
    End Sub
    
您可以使用TempVars进行以下操作:

Private Sub Form_Open()

    If IsNull(TempVars("ProjectEnabled").Value) Then
        ' Initialise.
        TempVars.Add "ProjectEnabled", True
    End If
    Me!Command21.Enabled = TempVars("ProjectEnabled").Value

End Sub

Private Sub Command21_Click()

    Command25.SetFocus
    DoCmd.OpenQuery "Reset AutoCounter"
    Command21.Enabled = False
    TempVars "ProjectEnabled", False

End Sub 
编辑

测试表明,由于临时变量不是持久性的,所以上述方法不起作用


因此,简单的解决方法是创建一个带有默认值为True的布尔字段的小型本地表,然后在单击按钮时将其更新为False。

创建一个本地表并将其隐藏。
使用该表中的值来确定是否在窗体加载或应用程序加载(使用全局变量)时隐藏并启用它。

这两种方法都会在不单击的情况下永久禁用按钮。我希望按钮在单击一次后被永久禁用。关闭表单并重新打开后,按钮仍应被禁用。请指出,这两种方法都不会“永久禁用按钮”,因为它们只是禁用按钮,任何其他代码都可以随时重新启用它。无论如何,我知道我没有抓住你真正的需要。对不起。希望其他人会帮助你。使用按钮上方的代码将在ACCDE中永久禁用,并且你无法在ACCDE中更改代码或更改设计。无论如何,谢谢你的时间。我甚至不知道ACCDE是什么。我的错,我在回答之前没有问你,也没有让我投反对票……你必须将信息存储在项目表中,并在运行时设置为启用,例如在
OnCurrent
中。嗨,安德烈,请你详细说明一下。我是新访问vba的。您需要将值存储在数据源中,而不是将其“存储”在内存中的变量中。您需要另一列,无论是在新表中还是只有一行的现有表中,用于存储是否单击了按钮。谢谢您的答复,但您能否解释一下“ProjectEnabled”是什么意思。注:代码docen不适用于第3行“TempVars”ProjectEnabled,“True”它只是这个存储变量的一个名称,可以是任何东西。并且忘记了添加方法,对不起。请看编辑。谢谢。这是我想要的,但唯一的小问题是,当您关闭数据库并重新打开它时,该按钮将被启用。当您在后台打开access程序时,TempVars工作得非常好,但是当您关闭并重新打开它时,按钮变为enable(启用)。看起来您是对的。我不使用临时变量,但我认为它们是持久的,但它们不是;当您关闭应用程序时,所有的临时变量都会失效。因此,您可能需要创建属性或(更简单)使用本地表。见编辑后的答案。