对在Excel中使用VBA运行时添加的命令按钮的引用
在运行期间,用户可以向工作表1添加任意数量的ActiveX命令按钮。我需要有一个参考这些新的按钮与VBA,但不知道如何 我知道按钮名称将显示的逻辑级数:ex (节点#x2)-2=命令按钮#=i 我需要以某种方式参考这些新创建的按钮,我的想法是这样的:对在Excel中使用VBA运行时添加的命令按钮的引用,excel,vba,button,runtime,Excel,Vba,Button,Runtime,在运行期间,用户可以向工作表1添加任意数量的ActiveX命令按钮。我需要有一个参考这些新的按钮与VBA,但不知道如何 我知道按钮名称将显示的逻辑级数:ex (节点#x2)-2=命令按钮#=i 我需要以某种方式参考这些新创建的按钮,我的想法是这样的: Sheet1.Controls("CommandButton" & i).Select 如果有人知道正确的语法或其他方法,请告知 更新 Public Sub Node_Button_Duplication() ' 'Comments: C
Sheet1.Controls("CommandButton" & i).Select
如果有人知道正确的语法或其他方法,请告知
更新
Public Sub Node_Button_Duplication()
'
'Comments: Copies and pastes Node 1's button to the appropriate column
' Copy Node 1 button and paste in appropriate location
ActiveSheet.Shapes("CommandButton1").Select
Selection.Copy
Cells(5, 10 + 7 * (NumNodes - 1) - 1).Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft 47.25
Selection.ShapeRange.IncrementTop -13.5
End Sub
跟进
Public Sub Node_Button_Duication()
'
'Comments: Copies and pastes Node 1's button to the appropriate column
Dim shp As Shape
' Copy Node 1 button and paste in appropriate location
ActiveSheet.Shapes("CommandButton1").Select
Selection.Copy
Cells(5, 10 + 7 * (NumNodes - 1) - 1).Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft 47.25
Selection.ShapeRange.IncrementTop -13.5
Debug.Print Selection.Name
Set shp = ActiveSheet.Shapes(Selection.Name)
With shp.OLEFormat.Object.Object
.Caption = "Test"
.Left = 15
.Top = 15
End With
End Sub
这给了我一个运行时错误“438:对象不支持此属性或方法。我不太明白
shp.OLEFormat.Object.Object
跟进
如果您知道commandbutton的名称,那么您可以像这样更改属性
Option Explicit
Sub Sample()
Dim shp As Shape
'~~> Since you already have the name replace "CommandButton1" by
'~~> the name that you have
Set shp = ActiveSheet.Shapes("CommandButton1")
With shp.OLEFormat.Object
.Object.Caption = "Test"
.Left = 15
.Top = 15
End With
End Sub
您也可以像这样将以上两种方法结合起来
Public Sub Node_Button_Duplication()
Dim shp As Shape
ActiveSheet.Shapes("CommandButton1").Select
Selection.Copy
Cells(5, 10 + 7 * (NumNodes - 1) - 1).Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft 47.25
Selection.ShapeRange.IncrementTop -13.5
'~~> This will give you the name
Debug.Print Selection.Name
Set shp = ActiveSheet.Shapes(Selection.Name)
With shp.OLEFormat.Object
.Object.Caption = "Test"
.Left = 15
.Top = 15
End With
End Sub
如果需要遍历所有按钮,请使用以下代码
Sub CommanButtons()
Dim wks As Worksheet
Dim OLEObj As OLEObject
'~~> set it as per the relevant sheet
Set wks = Worksheets("sheet1")
For Each OLEObj In wks.OLEObjects
If TypeOf OLEObj.Object Is MSForms.CommandButton Then
Debug.Print OLEObj.Object.Caption
End If
Next OLEObj
End Sub
跟进
如果您知道commandbutton的名称,那么您可以像这样更改属性
Option Explicit
Sub Sample()
Dim shp As Shape
'~~> Since you already have the name replace "CommandButton1" by
'~~> the name that you have
Set shp = ActiveSheet.Shapes("CommandButton1")
With shp.OLEFormat.Object
.Object.Caption = "Test"
.Left = 15
.Top = 15
End With
End Sub
您也可以像这样将以上两种方法结合起来
Public Sub Node_Button_Duplication()
Dim shp As Shape
ActiveSheet.Shapes("CommandButton1").Select
Selection.Copy
Cells(5, 10 + 7 * (NumNodes - 1) - 1).Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft 47.25
Selection.ShapeRange.IncrementTop -13.5
'~~> This will give you the name
Debug.Print Selection.Name
Set shp = ActiveSheet.Shapes(Selection.Name)
With shp.OLEFormat.Object
.Object.Caption = "Test"
.Left = 15
.Top = 15
End With
End Sub
如果需要遍历所有按钮,请使用以下代码
Sub CommanButtons()
Dim wks As Worksheet
Dim OLEObj As OLEObject
'~~> set it as per the relevant sheet
Set wks = Worksheets("sheet1")
For Each OLEObj In wks.OLEObjects
If TypeOf OLEObj.Object Is MSForms.CommandButton Then
Debug.Print OLEObj.Object.Caption
End If
Next OLEObj
End Sub
假设您有一个名为“cmdOriginal”的命令按钮(OLE对象),您希望复制该按钮并将其粘贴到同一工作表上,并将新按钮的名称和标题更改为“cmdButtonCopy”和“This is a copy”。 新添加的按钮具有OLEObjects集合中最高的索引! 将以下代码放入工作表的“代码”部分
Sub x1()
Me.OLEObjects("cmdOriginal").Copy
Me.Paste
With Me.OLEObjects(Me.OLEObjects.Count)
.Name = "cmdButtonCopy"
.Caption = "This is a copy"
End With
End Sub
假设您有一个名为“cmdOriginal”的命令按钮(OLE对象),您希望复制该按钮并将其粘贴到同一工作表上,并将新按钮的名称和标题更改为“cmdButtonCopy”和“This is a copy”。 新添加的按钮具有OLEObjects集合中最高的索引! 将以下代码放入工作表的“代码”部分
Sub x1()
Me.OLEObjects("cmdOriginal").Copy
Me.Paste
With Me.OLEObjects(Me.OLEObjects.Count)
.Name = "cmdButtonCopy"
.Caption = "This is a copy"
End With
End Sub
用户是如何创建命令按钮的?手动还是通过代码?当用户单击“添加节点”按钮时,ActiveX按钮(在运行时开始时存在)将被复制并粘贴到适当的位置。我需要访问这些新按钮,以便在运行时更改它们的行为。我也考虑过使用VBA重复创建按钮,但不确定哪一个更可取。你能更新上面用于复制和粘贴现有按钮的代码吗?啊,我刚刚意识到。是否与上一个问题中的相同?用户是如何创建命令按钮的?手动还是通过代码?当用户单击“添加节点”按钮时,ActiveX按钮(在运行时开始时存在)将被复制并粘贴到适当的位置。我需要访问这些新按钮,以便在运行时更改它们的行为。我也考虑过使用VBA重复创建按钮,但不确定哪一个更可取。你能更新上面用于复制和粘贴现有按钮的代码吗?啊,我刚刚意识到。它与您上一个问题中的相同吗?我已经知道命令按钮的名称,但我希望以后可以访问它。例如,我将有5个按钮,我希望访问按钮3,但不知道VBA语法。我的猜测与我的问题中给出的类似。按钮编号是一个整数变量。E本质上,我想知道如何将变量连接到“CommandButton”“在类似Sheet1.CommandButton&i.Selected的内容中,访问它意味着什么?选择它?或者类似于
Application.Caller
?我想更改命令按钮的属性,例如标题、宏、删除等。代码很好。此外,我希望有类似ActiveSheet.Shapes(“CommandButton”&Str(I))的东西。选择将整数变量连接到字符串“CommandButton”的位置因此,我可以通过适当的I变量值访问任何按钮。我已经包含了我使用的代码,但给了我一个运行时错误。我已经知道命令按钮的名称,但我希望以后能够访问它。例如,我将有5个按钮,我想访问按钮3,但不知道VBA语法。我的猜测与我的问题类似。按钮编号是一个整数变量。基本上,我想知道如何将变量连接到Sheet1中的“CommandButton”命令。CommandButton&I.select访问它是什么意思?选择它?或者类似于Application.Caller
?我想更改命令按钮的属性,例如标题、宏、删除等。代码很好。此外,我希望有类似ActiveSheet.Shapes(“CommandButton”&Str(I))的东西。选择将整数变量连接到字符串“CommandButton”的位置,这样我就可以通过适当的I变量值访问任何按钮。我已经包含了我使用的代码,但给出了一个运行时错误