Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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使用单击的按钮名称_Vba_Excel - Fatal编程技术网

VBA使用单击的按钮名称

VBA使用单击的按钮名称,vba,excel,Vba,Excel,在我的工作簿中,我有两张工作表(“概述”和“作业数据”)。在第一页上,我有五个不同名称的ActiveX按钮(“WKA”/“WKS”/“GM”/“IBN”/“PM”) 每个按钮打开用户表单“添加分配”,该表单还有两个按钮(“保存”和“取消”)。UF的数据应保存在“分配数据”表中 现在我想,如果我点击,例如,按钮WKA,数据应该保存在范围A:C;对于范围内的按钮,例如,第1行的标题也应使用按钮名称 不幸的是,我不知道该怎么做 按钮: Private Sub WKA_Click() Add_A

在我的工作簿中,我有两张工作表(“概述”和“作业数据”)。在第一页上,我有五个不同名称的ActiveX按钮(“WKA”/“WKS”/“GM”/“IBN”/“PM”)

每个按钮打开用户表单“添加分配”,该表单还有两个按钮(“保存”和“取消”)。UF的数据应保存在“分配数据”表中

现在我想,如果我点击,例如,按钮WKA,数据应该保存在范围A:C;对于范围内的按钮,例如,第1行的标题也应使用按钮名称

不幸的是,我不知道该怎么做

按钮:

Private Sub WKA_Click()
    Add_Assignment.Show
End Sub

Private Sub WKS_Click()
    Add_Assignment.Show
End Sub

Private Sub GM_Click()
    Add_Assignment.Show
End Sub

Private Sub IBN_Click()
    Add_Assignment.Show
End Sub

Private Sub PM_Click()
    Add_Assignment.Show
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer

    Set ws = Worksheets("Assignment_Data")
    If "ButtonName" = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ElseIf "ButtonName" = WKS Then
        Col1 = "E"
        Col2 = "F"
        Col3 = "G"
    ElseIf ' goes on till PM

    End If

    ws.Range(Col1 & "2").Value = Add_Assignment.Controls("TextBox1")
    ws.Range(Col2 & "2").Value = Add_Assignment.Controls("TextBox2")
    ws.Range(Col3 & "2").Value = Add_Assignment.Controls("TextBox3")
    ws.Range(Col1 & "3").Value = Add_Assignment.Controls("TextBox4")
    ws.Range(Col2 & "3").Value = Add_Assignment.Controls("TextBox5")
   ' and so on

    Add_Assignment.Hide
End Sub

Private Sub Cancel_Click()
    Add_Assignment.Hide
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer
    Dim name As String

    name = ActiveSheet.Shapes(Application.Caller).name ' in this line i get the error

    Set ws = Worksheets("Assignment_Data")
    If name = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ' ...
    End If

    ' Do something

End Sub
用户表单:

Private Sub WKA_Click()
    Add_Assignment.Show
End Sub

Private Sub WKS_Click()
    Add_Assignment.Show
End Sub

Private Sub GM_Click()
    Add_Assignment.Show
End Sub

Private Sub IBN_Click()
    Add_Assignment.Show
End Sub

Private Sub PM_Click()
    Add_Assignment.Show
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer

    Set ws = Worksheets("Assignment_Data")
    If "ButtonName" = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ElseIf "ButtonName" = WKS Then
        Col1 = "E"
        Col2 = "F"
        Col3 = "G"
    ElseIf ' goes on till PM

    End If

    ws.Range(Col1 & "2").Value = Add_Assignment.Controls("TextBox1")
    ws.Range(Col2 & "2").Value = Add_Assignment.Controls("TextBox2")
    ws.Range(Col3 & "2").Value = Add_Assignment.Controls("TextBox3")
    ws.Range(Col1 & "3").Value = Add_Assignment.Controls("TextBox4")
    ws.Range(Col2 & "3").Value = Add_Assignment.Controls("TextBox5")
   ' and so on

    Add_Assignment.Hide
End Sub

Private Sub Cancel_Click()
    Add_Assignment.Hide
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer
    Dim name As String

    name = ActiveSheet.Shapes(Application.Caller).name ' in this line i get the error

    Set ws = Worksheets("Assignment_Data")
    If name = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ' ...
    End If

    ' Do something

End Sub
编辑:

Private Sub WKA_Click()
    Add_Assignment.Show
End Sub

Private Sub WKS_Click()
    Add_Assignment.Show
End Sub

Private Sub GM_Click()
    Add_Assignment.Show
End Sub

Private Sub IBN_Click()
    Add_Assignment.Show
End Sub

Private Sub PM_Click()
    Add_Assignment.Show
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer

    Set ws = Worksheets("Assignment_Data")
    If "ButtonName" = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ElseIf "ButtonName" = WKS Then
        Col1 = "E"
        Col2 = "F"
        Col3 = "G"
    ElseIf ' goes on till PM

    End If

    ws.Range(Col1 & "2").Value = Add_Assignment.Controls("TextBox1")
    ws.Range(Col2 & "2").Value = Add_Assignment.Controls("TextBox2")
    ws.Range(Col3 & "2").Value = Add_Assignment.Controls("TextBox3")
    ws.Range(Col1 & "3").Value = Add_Assignment.Controls("TextBox4")
    ws.Range(Col2 & "3").Value = Add_Assignment.Controls("TextBox5")
   ' and so on

    Add_Assignment.Hide
End Sub

Private Sub Cancel_Click()
    Add_Assignment.Hide
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer
    Dim name As String

    name = ActiveSheet.Shapes(Application.Caller).name ' in this line i get the error

    Set ws = Worksheets("Assignment_Data")
    If name = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ' ...
    End If

    ' Do something

End Sub
应用程序代码。调用方:

Private Sub WKA_Click()
    Add_Assignment.Show
End Sub

Private Sub WKS_Click()
    Add_Assignment.Show
End Sub

Private Sub GM_Click()
    Add_Assignment.Show
End Sub

Private Sub IBN_Click()
    Add_Assignment.Show
End Sub

Private Sub PM_Click()
    Add_Assignment.Show
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer

    Set ws = Worksheets("Assignment_Data")
    If "ButtonName" = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ElseIf "ButtonName" = WKS Then
        Col1 = "E"
        Col2 = "F"
        Col3 = "G"
    ElseIf ' goes on till PM

    End If

    ws.Range(Col1 & "2").Value = Add_Assignment.Controls("TextBox1")
    ws.Range(Col2 & "2").Value = Add_Assignment.Controls("TextBox2")
    ws.Range(Col3 & "2").Value = Add_Assignment.Controls("TextBox3")
    ws.Range(Col1 & "3").Value = Add_Assignment.Controls("TextBox4")
    ws.Range(Col2 & "3").Value = Add_Assignment.Controls("TextBox5")
   ' and so on

    Add_Assignment.Hide
End Sub

Private Sub Cancel_Click()
    Add_Assignment.Hide
End Sub
Private Sub Save_Click()
    Dim ws As Worksheet
    Dim Col1 As Integer, Col2 As Integer, Col3 As Integer
    Dim name As String

    name = ActiveSheet.Shapes(Application.Caller).name ' in this line i get the error

    Set ws = Worksheets("Assignment_Data")
    If name = "WKA" Then
        Col1 = "A"
        Col2 = "B"
        Col3 = "C"
    ' ...
    End If

    ' Do something

End Sub

有必要使用表格吗?听起来这可以通过一个简单的
MsgBox
实现:

Sub confirmSave(btn_name As String)
    Dim res As VbMsgBoxResult
    res = MsgBox("Save?", buttons:=vbOKCancel)
    If res = VbOK Then ...
End Sub
并将要复制的值放在单独的表中。因此,与其这样做

ws.Range(Col1 & "2").Value = Add_Assignment.Controls("TextBox1")
ws.Range(Col2 & "2").Value = Add_Assignment.Controls("TextBox2")
...
你只需要

ws.Range(StartCol & "2:" & EndCol & "3").Value = TemplateSheet.Range("A2:C3").Value ' or wherever the range is

听起来您可能可以使用这个应用程序。Caller@QHarr我的想法是,使用表单按钮更容易,因为您可以将它们全部绑定到普通模块中的同一个子模块。然后使用Application.Caller获取单击按钮的名称,并将其传递给在Userform中创建的属性。您可以向表单中添加标签,例如调用AssignmentLabel,然后在调用表单时替换标签的标题。WKA示例:
Add_Assignment.AssignmentLabel.Caption=“WKA”
就在
Add_Assignment.Show
之前。打开表单后,可以执行if语句,引用AssignmentLabel.Caption值。@5202456这很好用。。非常感谢你。这是一个如此简单的解决方案。这么好。非常感谢。