美好的一天, 首先发帖给我!我找不到任何问题的答案,即使stackoverflow社区在过去一周帮助了我很多次来编写这个项目。
这是我想要做的: 我是一家生产私人飞机的大公司的实习生,我被要求找到一种简单的方法来查找特定表格中的信息。该表重新组合了公司出售的所有飞机,并提供了有关每一架飞机的特定信息。
正如我所说,由于这个网站,我设法做了很多,但现在我有一件非常特别的事情要做。
当用户知道要查找哪架飞机时,它会打开一个标签(“结果”),其中包含有关该飞机的所有信息。这是第一个搜索选项。它就像一个魅力!
这是我的excel界面:http://i.stack.imgur.com/TXcpY.jpg
但是当用户不知道要查找哪种飞机时,他可以选择通过用户界面(“搜索”选项卡)搜索模型或内部所有者(或两者)。 代码执行,工作表“RESULTS2”在搜索栏中列出所有具有命令按钮的飞机。我用OLEObjects.add创建了这些按钮,一切运行良好。
现在,我需要为这些对象中的每一个分配代码(Commandbutton1,Commandbutton2,...,CommandbuttonN)。 每当用户点击命令按钮时,它就会执行第一次搜索的代码(当用户知道飞机编号时的代码),并且飞机号码在同一行上。
我想为每个按钮执行我想要执行的代码,这些代码将被放入“RESULTS2”选项卡中:
Private Sub CommandButton1_Click()
'Variables
Dim avion As String
Dim lRow2 As Long
'Settings
Set sourceBook = ActiveWorkbook
Set sourceSheet = sourceBook.Sheets("SEARCH")
Set sourceSheet1 = sourceBook.Sheets("TABLE")
Set sourceSheet2 = sourceBook.Sheets("RESULTS")
Set sourceSheet3 = sourceBook.Sheets("RESULTS2")
'Set "avion" as the aircraft number on the button row ("RESULTS2" tab)
avion = sourceSheet3.Cells(6, "B").Value
'Set the aircraft number on the "SEARCH" tab (User interface) as "avion"
sourceSheet.Cells(5, "E").Value = avion
'Calls the macro to execute search
Call sourceSheet.Searchaircraft
End Sub
此特定情况下的结果仅适用于第一行的按钮(Commandbutton1)。
有没有办法为ALL命令按钮创建一个Private Sub? 或者也许用:
创建一个for循环For i=1 To LastRow
Private Sub "Commandbutton" & i & "_click()"
[...]
avion = sourceSheet3.Cells(i+5, "B").Value
[...]
End Sub
Next i
有关您的信息,以下是“搜索”选项卡中代码的一部分,它创建了命令按钮(它位于for循环中以创建每一行):
'Bouton
Set rng = sourceSheet3.Range("G" & n)
Set mybutton = sourceSheet3.OLEObjects.Add(ClassType:="Forms.CommandButton.1")
rng.Borders.LineStyle = xlContinuous
With mybutton
.Object.Caption = "<->"
.Object.Font.Size = 3
.Left = rng.Left + 1
.Top = rng.Top + 1
.Height = 11.75
.Width = 60
End With
非常感谢您的任何帮助! 这件事让我疯了几个小时......!
谢谢你,祝你有愉快的一天, 亚历
编辑:
Nutsch的回答是那个!
以下是我在模块中编写的代码:
`Public Sub WhichButton()
On Error GoTo Err_cmdNewTerm_Click
'Variables
Dim avion As String
Dim ButtonText As String
Dim b As Object
Dim Ligne As Integer
'Settings
Set sourceBook = ActiveWorkbook
Set sourceSheet = sourceBook.Sheets("SEARCH")
Set sourceSheet1 = sourceBook.Sheets("TABLE")
Set sourceSheet2 = sourceBook.Sheets("RESULTS")
Set sourceSheet3 = sourceBook.Sheets("RESULTS2")
'Vérification de quel bouton a été appuyé
Set b = sourceSheet3.Buttons(Application.Caller)
With b.TopLeftCell
Ligne = .Row
End With
' Récupération du numéro de l'avion
avion = sourceSheet3.Cells(Ligne, "B").Text
' Inscription du numéro dans la page SEARCH
sourceSheet.Cells(5, "E").Value = avion
'Calls the macro to execute search
Call sourceSheet.Searchaircraft
' Fenêtre en cas d'erreur de programmation
GoTo Exit_cmdNewTerm_Click
Err_cmdNewTerm_Click:
MsgBox Err.Description
Resume Exit_cmdNewTerm_Click
Exit_cmdNewTerm_Click:
End Sub
以下是我的工作表中添加按钮的代码:
'Bouton
Set rng = sourceSheet3.Range("G" & n)
sourceSheet3.Buttons.Add(rng.Left + 1, rng.Top + 1, 60, 11.75).OnAction = "WhichButton"
sourceSheet3.Buttons.Caption = "Search"
希望有一天能帮助别人。 谢谢! 亚历
答案 0 :(得分:1)
对所有按钮使用相同的宏,并使用application.caller查找按下了哪个按钮。