我目前在2个不同的工作表上使用2个表。
第一个用作项目列表,第二个用作活动工作表,最终用户可以在其中研究项目,并且可以进行与问题目的无关的几种可能的交互作用。
有没有办法使用按钮名称的一部分来组成我将在代码中使用的范围?
或者,有一种聪明的方法可以使它具有可伸缩性,可能保留1个代码副本,并根据按钮分配范围吗?
Sub Button2_Click()
Dim cb As Shape
Dim x As String
Dim y As Variant
On Error Resume Next
If IsEmpty(Range("A2").Value) Then
MsgBox "Barcode appears to be empty!"
Exit Sub
Else
If IsError(Range("E2").Value) Then
MsgBox "Barcode appears to have no match!"
Exit Sub
Else
y = (Range("J2").Value)
If IsNumeric(y) Then
x = Range("J2").Value
Else
MsgBox "Ammount to add/subtract must be a number!"
Exit Sub
End If
Set cb = ActiveSheet.Shapes("chkbx2")
If cb.OLEFormat.Object.Value = 1 Then
If (Range("E2").Value - Range("J2").Value) < 0 Then
MsgBox "quantity can't go below 0"
Else
Range(Range("M2")).Value = Range("E2").Value - Range("J2").Value
MsgBox "Subtracted " + x + " part(s) to component: " + CStr(Range("A2").Value)
End If
Else
Range(Range("M2")).Value = Range("E2").Value + Range("J2").Value
MsgBox "Added " + x + " part(s) to component: " + CStr(Range("A2").Value)
End If
End If
End If
End Sub
我只保留了宏的完整代码,以确保没有任何丢失。
我的问题是:我的工作表中当前有25个这些按钮,而且我找不到“自动”改变坐标的方法。
例如,Button2_Click()->使用“ A2”,“ E2”,“ J2”等行2上的坐标,就像Button3_Click()“ A3”,“ E3”,“ J3” ...
当前,我每个按钮手动编写一次代码,这使项目难以升级到更大的比例。
答案 0 :(得分:0)
我设法解决了这个问题,并使用以下方法来生成一个有效的代码,而不是同一行的25个实例:
Dim r As Variant
Dim v As Variant
v = Application.Caller
v = Replace(v, "Button ", "")
r = "A" & v
要生成我需要的所有范围,从而在每个范围之前更改r中包含的值,以便在那里获得所需的确切范围,这成功地使项目易于扩展。
注意:使用变量构成范围的合法语法示例为:
这假设您正在通过名为“ Button x”的对象调用此函数
其中x是数字
Sub Button_Click()
Dim r As Variant
Dim v As Variant
v = Application.Caller
v = Replace(v, "Button ", "")
r = "A" & v
If IsEmpty(Range(r).Value) Then
MsgBox "Cell appears to be empty!"
Exit Sub
Else
MsgBox "cell " + r + " contains " + Range(r).Value
End If
End Sub
注意:这也适用于我在问题中提到的复选框
通常,这将有助于构建可重用的代码,该代码将能够根据分配给调用该按钮的按钮的名称来知道数据的位置,还假定已设置并遵循命名约定,并且它的增量遵循与范围增量有关的规则。
感谢@EvR对帮助我跟踪前进功能的帮助