Добрый день, Первый пост здесь для меня! Я не смог найти ответа на свою проблему, даже несмотря на то, что сообщество stackoverflow много раз помогало мне на прошлой неделе кодировать этот проект.
Вот что я хочу сделать: я работаю стажером в крупной компании, производящей частные самолеты, и меня попросили найти простой способ найти информацию в определенной таблице. В этой таблице собраны все самолеты, проданные компанией, с конкретной информацией о каждом из них.
Как я уже сказал, мне многое удается сделать благодаря этому сайту, но теперь у меня есть действительно особая задача.
Когда пользователь знает, какой самолет искать, он открывает вкладку ("РЕЗУЛЬТАТЫ") со всей информацией об этом самолете. Это первый вариант поиска. Работает как часы!
Вот мой интерфейс Excel: http://i.stack.imgur.com/TXcpY.jpg а>
Но когда пользователь не знает, какой самолет искать, у него есть возможность поиска модели или владельца салона (или того и другого) через Пользовательский интерфейс (вкладка «ПОИСК»). Код выполняется, и на листе «РЕЗУЛЬТАТЫ2» перечислены все самолеты с кнопкой управления в столбце поиска. Я создал эти кнопки с помощью OLEObjects.add, и все работало хорошо.
Теперь мне нужно присвоить код каждому из этих объектов (Commandbutton1, Commandbutton2, ..., CommandbuttonN). Каждый раз, когда пользователь нажимает на командную кнопку, выполняется код первого поиска (тот, когда пользователь знает номер самолета) с номером самолета в той же строке.
У меня есть код, который я хочу выполнить для каждой кнопки, которая будет помещена на вкладку «РЕЗУЛЬТАТЫ2»:
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).
Есть ли способ создать приватный сабвуфер для ВСЕХ командных кнопок? Или, может быть, создать цикл 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
Любая помощь от вас будет очень признательна! Эта штука сводит меня с ума уже несколько часов...!
Спасибо и хорошего дня, Алекс
РЕДАКТИРОВАТЬ :
Ответ Нутча был единственным!
Вот код, который я написал в модуле:
`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"
Надеюсь, это поможет кому-то однажды. Спасибо! Алекс