【问题标题】:MS Access VBA Code on Form Field with Multiple If's to Prevent / Allow Entry Depending on Value Entered表单字段上的 MS Access VBA 代码,根据输入的值阻止/允许输入多个 If
【发布时间】:2019-04-05 09:15:27
【问题描述】:

您好,请协助解决以下问题:

我试图阻止最终用户在 txtPlantUsedGrams (PlantAmountUsed) 字段中输入大于 txtExtractionAmountAvailable (ExtractionAvailable) 字段中的金额的值,但允许在 txtPlantUsedGrams 值小于金额时输入在 txtExtractionAmountAvailable 字段中。

代码在 PlantAmountUsed 大于 ExtractionAvailable 的情况下工作,因为它会触发 msgbox,然后将 txtPlantAmountUsed 字段设置为零。在 PlantAmountUsed 小于 ExtractionAvailable 的情况下,它允许输入的值保持不变(不会将其更改为 0),但仅在触发 msgbox 并单击确定之后。我在第一个 If 之后插入的“退出子”代码不起作用。请帮助我,以便以下代码不会触发 msgbox,而是在 PlantAmountUsed 小于 ExtractionAvailable 的情况下退出子程序。我愿意接受任何/所有方法来实现这一点。谢谢你的帮助:)

VBA 代码的位置:

事件正在表单 (frmMedMaking) 中作为 txtPlantUsedGrams 字段中的 AfterUpdate 事件运行。

**VBA Code:**

Private Sub txtPlantUsedGrams_AfterUpdate()

Dim PlantAmountUsed As Integer
Dim ExtractionAvailable As Integer
Dim LResponse As Integer

PlantAmountUsed = Me.txtPlantUsedGrams
ExtractionAvailable = Me.txtExtractAmountAvailable.Value
LResponse = MsgBox("Plant Amount Used must be less than Extraction 
Available", vbOKOnly + vbCritical, "Available Extraction Amount Exceeded")

If PlantAmountUsed < ExtractionAvailable Then Exit Sub
    If PlantAmountUsed > ExtractionAvailable Then
    If LResponse = vbOK Then Me.PlantAmountUsed.Value = 0
End If

End Sub

【问题讨论】:

    标签: vba ms-access if-statement msgbox


    【解决方案1】:

    您的问题似乎来自这样一个事实,即您在检查条件 If PlantAmountUsed &lt; ExtractionAvailable Then 之前调用了 MsgBox。

    所以必须对代码进行一点重构。

    结果代码

    根据您提供的信息,这将是生成的代码:

    Private Sub txtPlantUsedGrams_AfterUpdate()
        Dim plantAmountUsed As Integer
        plantAmountUsed = Me.txtPlantUsedGrams.Value
    
        Dim extractionAvailable As Integer
        extractionAvailable = Me.txtExtractAmountAvailable.Value
    
        If plantAmountUsed < extractionAvailable Then Exit Sub
    
        'What if plantAmountUsed = extractionAvailable (see below)?
    
        If plantAmountUsed > extractionAvailable Then
            ' Why checking the result of the MsgBox when only one button (Ok) can be pressed (see below)?
            If MsgBox("Plant Amount Used must be less than Extraction Available", vbOKOnly + vbCritical, "Available Extraction Amount Exceeded") = vbOK Then
                Me.txtPlantUsedGrams.Value = 0
            End IF
        End If
    End Sub
    

    备注

    • 我将Me.PlantAmountUsed.Value = 0 更改为Me.txtPlantUsedGrams.Value = 0。我想这就是你的意图,对吧?

    问题/建议

    • 如果plantAmountUsed 等于extractionAvailable 会怎样?这还没有明确处理。 例如,您可以使用If plantAmountUsed &lt;= extractionAvailable Then Exit Sub。

    • 在您的 MsgBox 中,您使用 vbOKOnly,因此结果始终为 vbOK,这意味着您实际上不必检查 MsgBox 的结果。 所以这可能就足够了:

      If plantAmountUsed > extractionAvailable Then
          MsgBox "Plant Amount Used must be less than Extraction Available", vbOKOnly + vbCritical, "Available Extraction Amount Exceeded"
          Me.txtPlantUsedGrams.Value = 0
      End If
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      相关资源
      最近更新 更多