Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba Excel Userform是否向工作表相关组合框添加多行?_Vba_Excel_Combobox_Userform - Fatal编程技术网

Vba Excel Userform是否向工作表相关组合框添加多行?

Vba Excel Userform是否向工作表相关组合框添加多行?,vba,excel,combobox,userform,Vba,Excel,Combobox,Userform,我需要Userform中的帮助来在Sheet1上添加多行。如下所示(控件名称为红色): 这是我的密码: Dim cNum As Integer Dim X As Integer Dim nextrow As Range Dim rRef As String Dim ctrl As MSForms.Control Private Sub UserForm_Initialize() For Each ctrl In Controls If ctrl.Name Like "*rec4" Then c

我需要Userform中的帮助来在Sheet1上添加多行。如下所示(控件名称为红色):

这是我的密码:

Dim cNum As Integer
Dim X As Integer
Dim nextrow As Range
Dim rRef As String
Dim ctrl As MSForms.Control

Private Sub UserForm_Initialize()
For Each ctrl In Controls
If ctrl.Name Like "*rec4" Then ctrl = Date
If TypeOf ctrl Is MSForms.ComboBox Then
If ctrl.Name Like "*rec1" Then ctrl.List = Array("Company1", "Company2", "Company3")
If ctrl.Name Like "*rec2" Then ctrl.List = Array("Supplier1", "Supplier2", "Supplier3")
If ctrl.Name Like "*rec5" Then ctrl.List = Array("Wrong Order", "Wrong Company", "Wrong Charge","Internal Deletion")
End If
Next
End Sub

Private Sub Arec5_Change()
Select Case Arec5.Value
Case Is = "Wrong Order"
Arec6.List = Array("Linked to other supplier", "Not Valid", "Missing figure")
Case Is = "Wrong Company"
Arec6.List = Array("Company1", "Company2", "Company3")
Case Is = "Wrong Charge"
Arec6.List = Array("Recupel", "Bebat", "Valorlub")
Case Is = "Internal Deletion"
Arec6.List = Array("Already Handled", "Manual Handling", "Request", "Deleted order")
End Select
End Sub

Private Sub btnClear_Click()
Unload Me
UserForm1.Show
End Sub

Private Sub btnClose_Click()
Unload Me
End Sub

Private Sub btnSubmit_Click()
cNum = 7
rRef = "Arec"
Addme
rRef = "Brec"
Addme
rRef = "Crec"
Addme
rRef = "Drec"
Addme
rRef = "Erec"
Addme
rRef = "Frec"
Addme
rRef = "Grec"
Addme
rRef = "Hrec"
Addme
rRef = "Irec"
Addme
rRef = "Jrec"
Addme
rRef = "Lrec"
Addme
rRef = "Mrec"
Addme
rRef = "Nrec"
Addme
rRef = "Orec"
Addme
rRef = "Prec"
Addme
rRef = "Qrec"
Addme
rRef = "Rrec"
Addme
rRef = "Srec"
Addme
End Sub

Sub Addme()
Set nextrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
For X = 1 To cNum
nextrow = Me.Controls(rRef & X).Value
Set nextrow = nextrow.Offset(0, 1)
Next
End Sub
我想做的是:

对所有
*rec5
组合框应用相同的更改事件(Arec5_change),使每个
*rec6
组合框依赖于左侧的
*rec5
组合框

如何做到这一点

接下来我还想做的是,当在
*rec5
中找到“内部删除”时,将行发送到Sheet2


有可能吗?

根据评论-您已经声明,现在,您将为19个控件硬编码事件处理程序。但是,为了将来的参考和了解VBA的更多信息,可以创建一个类事件处理程序来分配给多个控件对象,包括在运行时在UserForm上创建的控件对象

查看以下链接:


您的用户表单上有固定数量的行吗?如果是这样,那么您可以手动硬编码事件处理程序。或者您只是以固定行为例,但在运行时还要创建更多的固定行?如果是这种情况,您需要研究运行时控件事件处理程序,这可以使用类模块完成。嗨,克里斯,谢谢。我的用户表单上有19行(从Arec到Srec)。我想会有更快的方法来完成这项任务。19行。。。好的,就像我说的。您有2个选项:1)手动为所有事件处理程序编写代码,或2)使用类模块处理事件,并使用循环将所有控件分配给类。这取决于你是否想要一个快速修复(1)或投资时间在研究和学习(2):)好的,我会硬编码19组合框的快速修复,但我真的想了解更多关于类模块。我可以从哪里开始?对我的第二个问题有什么想法吗?我在答案中贴了一些链接。关于你的第二个问题,你所说的“将行发送到表2”是什么意思?你试过什么?我建议在显示您已经尝试过的代码,以及为什么在做您想做的事情时遇到特定问题之后,再就该查询提出第二个(单独的)问题。