Excel VBA用户表单

时间:2014-01-20 16:08:15

标签: excel vba excel-vba userform

我自己尝试过这个并重新编辑了这个问题。所以我在Excel VBA中完成了UserForm(我已经上传了它的样子enter image description here

我已使用以下代码将信息从文本框传输到Excel行

'Determine Empty Row
emptyRow= WorksheetFunction.Counta(Range("A:A"))+1
'Transfer into to cells
Cells(emptyRow, 1).Value= NOD_Text.Value
Cells(emptyRow,2).Value=TOD_Text.Value
Cells(emptyRow,3).Value=Program_Text.value
Cells(emptyRow,4).Value=email_Text.value
Cells(emptyRow,5).Value=OPN_Text.value
Cells(emptyRow,6).Value=CPN_Text.Value

我有多张相同的利益相关者(工作表A,工作表B,工作表C,工作表D等),我想根据选中的复选框传输上述信息。例如,如果单击复选框A,B,C,则上述信息将传输到工作表A,B,C。

根据利益相关者的复选框,我不确定如何激活工作表......

If A_Checkbox.Value=True then Worksheets(A).Activate then Cells(emptyRow, 1).Value= NOD_Text.Value
Cells(emptyRow,2).Value=TOD_Text.Value
Cells(emptyRow,3).Value=Program_Text.value
Cells(emptyRow,4).Value=email_Text.value
Cells(emptyRow,5).Value=OPN_Text.value
Cells(emptyRow,6).Value=CPN_Text.Value

不确定上面的代码是否正确,但问题是......如果这个人复选了3个利益相关者(A,B,C)......?我不确定如何编码...

另外,我想把所有信息都放在Master标签中,无论哪个盒子都被取消,但我不知道如何始终保持主标签激活......

我希望这比以前更清楚

3 个答案:

答案 0 :(得分:0)

为此,我将使用控件的TAG属性。

在每个文本框的TAG属性中,我会写出粘贴值的单元格引用 - 例如$ B $ 2.

在每个复选框的TAG属性中,我会写一个链接到该控件的工作表名称 - 例如Sheet1。

然后在命令按钮后面我会编写类似这样的代码:

Private Sub CommandButton1_Click()
    Dim ctrl As Control
    Dim ctrl1 As Control

    'Cycle through each control looking for checkboxes.
    For Each ctrl In Me.Controls

        If TypeName(ctrl) = "CheckBox" Then

            'If the checkbox is ticked
            If ctrl.Value = True Then

                With ThisWorkbook.Worksheets(ctrl.Tag) 'Grab the sheet name from the check box.

                    'Cycle through each control looking for textboxes.
                    For Each ctrl1 In Me.Controls
                        If TypeName(ctrl1) = "TextBox" Then
                            .Range(ctrl1.Tag) = ctrl1.Value 'Grab the cell address from the text box.
                        End If
                    Next ctrl1
                End With
            End If
        End If
    Next ctrl
End Sub

答案 1 :(得分:0)

你需要在if和之后知道空的单元格中激活工作表:

If A_Checkbox.Value=True then 
   Worksheets("A").Activate
ElseIf B_Checkbox.Value=True then 
   Worksheets("B").Activate
End If

emptyRow=Activesheet.range("A1000000").end(XlUp).Row+1
Cells(emptyRow,2).Value=TOD_Text.Value

答案 2 :(得分:0)

这应该可以解决问题:

Private Sub AddButton_Click()

Dim CB As Control

For Each CB In UserForm1.Controls

    If TypeName(CB) = "CheckBox" Then

        If CB.Value = True Then

            ShtNm = CB.Caption

            With ActiveWorkbook.Sheets(ShtNm)

                'Determine Empty Row
                emptyRow = .Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
                'Transfer into to cells
                .Cells(emptyRow, 1).Value = NOD_Text.Value
                .Cells(emptyRow, 2).Value = TOD_Text.Value
                .Cells(emptyRow, 3).Value = Program_Text.Value
                .Cells(emptyRow, 4).Value = email_Text.Value
                .Cells(emptyRow, 5).Value = OPN_Text.Value
                .Cells(emptyRow, 6).Value = CPN_Text.Value

            End With

        End If

    End If

Next CB

With ActiveWorkbook.Sheets("Master")

    'Determine Empty Row
    emptyRow = .Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
    'Transfer into to cells
    .Cells(emptyRow, 1).Value = NOD_Text.Value
    .Cells(emptyRow, 2).Value = TOD_Text.Value
    .Cells(emptyRow, 3).Value = Program_Text.Value
    .Cells(emptyRow, 4).Value = email_Text.Value
    .Cells(emptyRow, 5).Value = OPN_Text.Value
    .Cells(emptyRow, 6).Value = CPN_Text.Value

End With

End Sub