使用用户窗体上的选项button将文本放置在调用用户窗体的子范围内

我很抱歉,如果这是张贴在其他地方,但我有问题的理解之间的调用用户的forms和用户表单控件之间的关系。 我有一个将从另一个工作表中填充数据到工作表的子。 其中一个需要填写的单元格就是项目数量变化的解释。 我使用选项button生成了一个用户表单,用户可以从中select适当的“原因”。 一旦OKbutton被点击,它将把select的原因放在工作表的单元格中。

在子,我使用范围内的每个单元格填充整个行上的数据超过特定条件的每个值,它应该显示符合条件的每个单元格的表单。 我可以将我正在使用的单元格作为行参考传递给用户表单,以便它可以使用该单元格作为偏移量来input选定的“原因”,然后卸载表单?

Private Sub okbutton1_Click(bc As Range) 'bc should be the range from the sub calling this form Select Case True Case OptionButton1 If bc.Offset(0, 3).Value = "A" Then Set bc.Offset(0, 6).Value = "Actual amount required is more than plan quantity." Else Set bc.Offset(0, 6).Value = "Actual amount required is less than plan quantity." End If Case OptionButton2 Set bc.Offset(0, 6).Value = "This items was not constructed/used/required." Case OptionButton3 Set bc.Offset(0, 6).Value = "Only a portion of the contingency was required for items not in original plan." Case OptionButton4 Set bc.Offset(0, 6).Value = "Deficiency levied against Contractor per IDOT Section 105.03." Case OptionButton5 Set bc.Offset(0, 6).Value = "Damages levied against Contractor per IDOT Section 108.09." Case OptionButton6 Set bc.Offset(0, 6).Value = InputBox("Please enter your reasoning below.", "Other") End Select Unload AuthReason2 End Sub 

然后,这是我正在用来填充工作表的子部分。

 Line5: 'Populates the BLR13210A from the data entered on the BLR13210 Application.ScreenUpdating = False Dim bws As Worksheet Set bws = Worksheets("BLR 13210A") Dim Arange As Range Set Arange = aws.Range("AZ34:AZ198") Dim Bcell As Range ' First cell in AttachA form Set Bcell = bws.Range("B11") For Each ACell In Arange If ACell.Value > 1999.99 Then Bcell.Value = ACell.Offset(0, -47).Value Bcell.Offset(0, 1).Value = ACell.Value Bcell.Offset(0, 2).Value = ACell.Offset(0, -37).Value Bcell.Offset(0, 3).Value = ACell.Offset(0, -22).Value AuthReason2(Bcell).Show End If Bcell = Bcell.Offset(1, 0) Application.ScreenUpdating = True 

预先感谢您的帮助。

应该使用用户表单来检索用户input并将它们传递给处理子,以相应地处理数据

所以你最好采取相反的方式,即:

  • 你的主要分

    应该“启动”用户表单并从中检索数据,处理这些数据以处理其他数据,然后closures用户表单

    它可能如下所示:

     Option Explicit Sub main() Dim bws As Worksheet Set bws = Worksheets("BLR 13210A") Dim Bcell As Range ' First cell in AttachA form Set Bcell = bws.Range("B11") With UserForm1 '<--| change "UserForm1" to your actual userform name .Tag = Bcell.Offset(0, 3).Value '<--| store the value you want to share with Userform in its 'Tag' property .Show '<-- show the userform and have it process user inputs Bcell.Offset(0, 6).Value = .Tag '<--| retrieve the value that userform has left in its 'Tag' property accordingly to user inputs End With Unload UserForm1 '<--| change "UserForm1" to your actual userform name End Sub 

    当然你会改变Bcell.Offset(0, 3).Value值的范围值应该适合你的需要

  • 你的用户表单

    将处理用户input并将其传递回子

    有很多办法可以做,但以下可以满足您的需求

    放在它的代码窗格如下所示:

     Option Explicit Private Sub okbutton1_Click() Dim txt As String With Me '<--| reference the userform Select Case True Case .OptionButton1 '<--| with the dot (.) access the referenced object members (in this case its controls) If .Tag = "A" Then '<--| query the value that the calling sub has left in the useform 'Tag' property txt = "Actual amount required is more than plan quantity." Else txt = "Actual amount required is less than plan quantity." End If Case .OptionButton2 txt = "This items was not constructed/used/required." Case .OptionButton3 txt = "Only a portion of the contingency was required for items not in original plan." Case .OptionButton4 txt = "Deficiency levied against Contractor per IDOT Section 105.03." Case .OptionButton5 txt = "Damages levied against Contractor per IDOT Section 108.09." Case .OptionButton6 txt = InputBox("Please enter your reasoning below.", "Other") Case Else '<--| you may want to handle the case when the user dosen't select any option txt = "some text" '<--| change it to your needs End Select .Tag = txt '<--| use 'Tag' property to store the value you want to pass back to the calling sub .Hide '<--| hide the userform End With End Sub