在用户窗体之间传递变量

问题描述 投票:0回答:1

我有一个数字决策矩阵用户表单 (frmMatrix),用户可以在其中输入“热度指数”和“感兴趣人群”,然后返回一份建议保护措施的声明。

他们被询问是否愿意在我的自动日志用户表单(frmForm)中记录这些保护措施。
单击“是”后,我希望我的自动日志用户表单显示“热度指数”和“感兴趣人群”字段以及在 frmMatrix 中输入的值。

加载到“热度指数”和“感兴趣人群”字段中的自动日志表单值是两个条目之前输入的值。

例如,用户连续输入 frmMatrix:

#1: "83" and "Athletes"  
#2: "85" and "Children"  
#3: "87" and "Outdoor Workers"  

输入#2并选择“是”后,自动日志表单将打开,“热度指数”和“感兴趣人群”字段中的值为“83”和“运动员”(示例#1中给出的响应) .

输入#3 并选择“是”后,自动日志表单将打开,其中包含值“85”和“儿童”(示例#2 中给出的响应)。

Option Explicit
Public index As Integer
Public category As String
Public population As String

Private Sub cmdGo_Click()

    If ValidateMatrixEntries() = True Then
    
        index = frmMatrix.txtIndex.Object.Value
        population = frmMatrix.cmbPopulation.Object.Value
        '--------------------------------------------------------------------------------------------
    
        'Heat Stress Category 1
        If index < 80 Then
        
            category = "Category 1"

            '(nonrelevant code follows for outputting protective measures)
            '--------------------------------------------------------------------------------------------

        Dim AnswerYes As String
        Dim AnswerNo As String
        
        AnswerYes = MsgBox("Would you like to record these actions in the log?", vbQuestion + vbYesNo, "Record Entry")
        
        If AnswerYes = vbYes Then
            Call Preset_Form
            Unload frmMatrix
        Else
            Unload frmMatrix
        End If
    End If
End Sub

Public Sub Preset_Form()
    frmForm.Show
    frmForm.txtIndex.Value = index
    frmForm.cmbPopulation.Value = population
    frmForm.cmbAction.Value = category
End Sub

数字决策矩阵:
数字决策矩阵(frmMatrix)

自动日志:
自动记录(frmForm)

excel vba userform
1个回答
1
投票

您需要更改

Preset_Form
逻辑以在作业后显示表单:

Public Sub Preset_Form()
   frmForm.txtIndex.Value = index
   frmForm.cmbPopulation.Value = population
   frmForm.cmbAction.Value = category
   frmForm.Show
End Sub

原因是

Show
直到表单关闭后才会返回,因此值不会很快被分配。 在情感上,你总是落后一员。

© www.soinside.com 2019 - 2024. All rights reserved.