0

こんにちは、私にとって最初の投稿です!Stackoverflow コミュニティがこの 1 週間、何度もこのプロジェクトのコーディングを手伝ってくれたにもかかわらず、私は自分の問題に対する答えを見つけることができませんでした。

私がやりたいことは次のとおりです: 私はプライベート ジェットを製造する大企業のインターンとして働いており、特定のテーブルに情報を見つける簡単な方法を見つけるように依頼されました。このテーブルは、会社が販売したすべての航空機を、それぞれに関する特定の情報とともに再グループ化します。

私が言ったように、私はこのウェブサイトのおかげで多くのことをすることができましたが、今は本当に特別なことをしなければなりません.

ユーザーがどの航空機を探すべきかを知っている場合、この航空機に関するすべての情報を含むタブ (「結果」) が開きます。これが最初の検索オプションです。それは魅力のように機能します!

これが私の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) のみになります。

すべてのコマンド ボタンのプライベート サブを作成する方法はありますか? または、次のように 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の答えは1つでした!

モジュールに書いたコードは次のとおりです。

`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"

これがいつか誰かを助けることを願っています。ありがとう!アレックス

4

1 に答える 1

1

すべてのボタンに同じマクロを使用し、application.caller を使用してどのボタンが押されたかを調べます。

于 2013-11-06T16:49:07.863 に答える