VBA使用单击的按钮名称

问题描述 投票:0回答:1

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

每个按钮打开UserForm“Add_Assignment”,它还有两个按钮(“保存”和“取消”)。 UF的数据应保存在“Assignment_Data”表中。

现在我想要点击,例如,按钮WKA,数据应保存在范围A:C;对于范围E中的按钮WKS:G。此外,按钮名称应在第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

编辑:

Application.Caller代码:

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
excel vba excel-vba
1个回答
0
投票

是否有必要使用表格?听起来这可以用一个简单的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
© www.soinside.com 2019 - 2024. All rights reserved.