Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Excel 如何减少多个选项按钮的IF语句_Excel_Vba - Fatal编程技术网

Excel 如何减少多个选项按钮的IF语句

Excel 如何减少多个选项按钮的IF语句,excel,vba,Excel,Vba,我有一个UserForm,它允许用户在文本框中输入产品缺陷的数量。这是作为月度报告的一部分完成的,因此我有选项按钮来选择月份(12个选项)。还有用于选择产品类型的选项按钮。代码主要评估所选的选项,并将文本框值(缺陷计数)复制到另一个电子表格中的特定单元格中(用于报告目的)。并非所有文本框都需要用户输入值 您可以查看UserForm的屏幕截图 正如您从代码中看到的,我使用了一堆IF语句来执行决策-我想缩短代码的长度,但我不知道从哪里开始 在此之前,我从未真正使用过VBA,因此没有真正尝试过解决方案

我有一个UserForm,它允许用户在文本框中输入产品缺陷的数量。这是作为月度报告的一部分完成的,因此我有选项按钮来选择月份(12个选项)。还有用于选择产品类型的选项按钮。代码主要评估所选的选项,并将文本框值(缺陷计数)复制到另一个电子表格中的特定单元格中(用于报告目的)。并非所有文本框都需要用户输入值

您可以查看UserForm的屏幕截图

正如您从代码中看到的,我使用了一堆IF语句来执行决策-我想缩短代码的长度,但我不知道从哪里开始

在此之前,我从未真正使用过VBA,因此没有真正尝试过解决方案。在当前状态下,代码工作得完美无缺。只是想减少和清理

Private Sub OKButton_Click() 'This is the button the user clicks to finalize
                             'the data entry

'Calling the Product type modules
Call Product1Module
Call Product2Module
Call Product3Module

End Sub

为每个选项按钮指定一个
标记
属性值-例如,使
JANButton.Tag
为“B”,然后使
FeBButton.Tag
为“C”等

然后你可以这样做:

Dim targetColumn As String
Select Case True
    Case UserForm.JANButton
        targetColumn = UserForm.JANButton.Tag
    Case UserForm.FEBButton
        targetColumn = UserForm.FEBButton.Tag
    '...
End Select
With Worksheets("Sheet1") '<~ which workbook is that in? whatever is active?
    .Range(targetColumn & "1107").Value = UserForm.TextBox1.Value
    .Range(targetColumn & "1115").Value = UserForm.TextBox2.Value
    '...
End With
Dim targetColumn作为字符串
选择Case True
Case UserForm.JANButton
targetColumn=UserForm.JANButton.Tag
Case UserForm.FEBButton
targetColumn=UserForm.FEBButton.Tag
'...
结束选择

使用工作表(“Sheet1”)给每个选项按钮一个
标签
属性值-例如,使
JANButton.Tag
为“B”,然后使
FeBButton.Tag
为“C”等

然后你可以这样做:

Dim targetColumn As String
Select Case True
    Case UserForm.JANButton
        targetColumn = UserForm.JANButton.Tag
    Case UserForm.FEBButton
        targetColumn = UserForm.FEBButton.Tag
    '...
End Select
With Worksheets("Sheet1") '<~ which workbook is that in? whatever is active?
    .Range(targetColumn & "1107").Value = UserForm.TextBox1.Value
    .Range(targetColumn & "1115").Value = UserForm.TextBox2.Value
    '...
End With
Dim targetColumn作为字符串
选择Case True
Case UserForm.JANButton
targetColumn=UserForm.JANButton.Tag
Case UserForm.FEBButton
targetColumn=UserForm.FEBButton.Tag
'...
结束选择


对于工作表(“Sheet1”)“行是否保持不变,并且只有列根据月份而变化?是的,只有列会变化。请紧急命名您的文本框。
如果
,则只应选择列;将实际写入的值移到末尾。更适合于代码是否确实工作正常。行是否保持不变,并且只有列根据月份而变化?是的,只有列会变化。请紧急命名文本框。
if
应该只选择列;将实际编写的值移到最后。如果代码确实工作完美,则更适合。谢谢您的建议!我会给它一个机会,然后带着反馈回来。哦,“Sheet1”实际上指向同一工作簿中的相邻选项卡,我只需要在发布我的问题之前擦洗特定名称:)@JTigs355如果该工作表位于
此工作簿中
,请给它一个有意义/描述性的
(名称)
属性,并在代码中使用该标识符,而不是每次需要时将其从
工作表
集合中取消引用。@JTigs355至于重命名textbox控件,这将破坏您的代码或花费比需要更长的时间;考虑允许执行重命名重构,在代码中右键单击任何<代码> TrimBox x<代码>,选择RubBuffk>重构因子>重命名,并注意加载项重命名用户窗体控件和代码中的所有早期绑定引用。在不中断对
TextBox12
@MathieuGuindon的任何调用的情况下-也许这不是讨论这个问题的论坛,但我在Windows 10上安装了RD;XL 2016(64位)和excel对此不太满意。我对它的研究还不多,因为我很忙,但它支持64位操作系统吗?还是我是索尔?谢谢@MathieuGuindon。我要开一张票。“对此不太满意”代表Excel在我的机器上安装RubberDuck后,一直无情地崩溃。为了能够提供更有意义的支持,我将再次下载并安装,如果问题仍然存在,我将发送具体的(尽我所能)反馈。感谢您的建议!我会给它一个机会,然后带着反馈回来。哦,“Sheet1”实际上指向同一工作簿中的相邻选项卡,我只需要在发布我的问题之前擦洗特定名称:)@JTigs355如果该工作表位于
此工作簿中
,请给它一个有意义/描述性的
(名称)
属性,并在代码中使用该标识符,而不是每次需要时将其从
工作表
集合中取消引用。@JTigs355至于重命名textbox控件,这将破坏您的代码或花费比需要更长的时间;考虑允许执行重命名重构,在代码中右键单击任何<代码> TrimBox x<代码>,选择RubBuffk>重构因子>重命名,并注意加载项重命名用户窗体控件和代码中的所有早期绑定引用。在不中断对
TextBox12
@MathieuGuindon的任何调用的情况下-也许这不是讨论这个问题的论坛,但我在Windows 10上安装了RD;XL 2016(64位)和excel对此不太满意。我对它的研究还不多,因为我很忙,但它支持64位操作系统吗?还是我是索尔?谢谢@MathieuGuindon。我要开一张票。“对此不太满意”代表Excel在我的机器上安装RubberDuck后,一直无情地崩溃。为了能够提供更有意义的支持,我将再次下载并安装,如果问题仍然存在,我将发送具体的(尽我所能)反馈。