【发布时间】:2012-05-26 10:50:13
【问题描述】:
我正在尝试通过在 VBE 中的 sheet1 中查找过程语句的行号,然后将代码添加到下一行,将代码(子例程调用)添加到 Sheet1 中的过程。下面的代码试图实现这一点。
' This will search for and modify the appropriate Node#button_Click() subroutine
With ActiveWorkbook.VBProject.VBComponents("Sheet1").CodeModule
ProcLineNum = .ProcStartLine("Node" & NumNodes & "Button" & "_Click", 0)
.InsertLines ProcLineNum + 1, "load_node_form(" & DQUOTE & "Node " & NumNodes & DQUOTE & ")"
End With
整个子程序如下:
Public Sub Node_Button_Duplication()
'
'Com: Copies and pastes Node 1's button to the appropriate column
Dim shp As Shape
Dim code As String
Dim ProcLineNum As Long
Const DQUOTE = """"
' 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
Set shp = ActiveSheet.Shapes(Selection.Name)
With shp.OLEFormat.Object
.Object.Caption = "Node" & Str(NumNodes)
.Name = "Node" & NumNodes & "Button"
End With
' This will search for and modify the appropriate Node#button_Click() subroutine
With ActiveWorkbook.VBProject.VBComponents("Sheet1").CodeModule
ProcLineNum = .ProcStartLine("Node" & NumNodes & "Button" & "_Click", 0)
.InsertLines ProcLineNum + 1, "load_node_form(" & DQUOTE & "Node " & NumNodes & DQUOTE & ")"
End With
End Sub
子程序将复制并粘贴一个按钮(“CommandButton1”),重命名它,然后尝试分配一个子程序调用。查找过程的问题是,一旦创建了新按钮,“CommandButton#_Click() 过程不会出现在 VBE 中,直到我从编辑器中选择它,因此当我的代码尝试搜索时会导致错误对于那个程序。
【问题讨论】:
-
只是一个想法,但我想有更简单的方法来做你正在做的事情。基本上,创建一个菜单项来执行您的按钮操作,并使菜单项上下文相关,例如,作用于活动行。并不是说我对您的项目一无所知,而是我早期做过一个需要管理许多按钮的项目,然后了解到有更好的方法。
-
可能有一种更简单的方法——这只是我正在探索的一种途径。基本上最终效果是用户可以添加任意数量的按钮,每个按钮都将加载相同的表单,但按下哪个按钮决定了表单中某些字段的填充,例如button1 将加载 form1 将显示 button1 数据,button2 将加载 form1 将显示 button2 数据等。
-
除非出于某种原因您真的需要它们,否则我会跳过命令按钮 (ActiveX),而使用更简单的“表单类型”按钮甚至是简单的形状。您可以设置一个宏来处理所有调用,并根据按钮的名称决定要做什么(使用
Application.Caller在宏中获取此信息) -
表单按钮对按钮事件的控制似乎比 ActiveX 按钮少。我试图定义表单按钮的行为,但我所能做的就是为其分配一个宏。如果表单按钮可以为我提供与按钮事件属性相同的代码控制,那么我可能会进一步研究表单按钮。但似乎 ActiveX 让我无需太多探索就可以控制...