在我的工作簿中,我有两个工作表(“概述”和“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
是否有必要使用表格?听起来这可以用一个简单的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