Microsoft Excel

Herbers Excel/VBA-Archiv

Buttons "variabel" hinzufügen


Betrifft: Buttons "variabel" hinzufügen von: Nati
Geschrieben am: 07.12.2017 10:38:35

Hallo Leute,

ich habe eine Tabelle, in der bestimmte Zellen kopiert und eingefügt werden. Immer wenn diese Zellen eingefügt werden, sollen nebendran Buttons hinzugefügt werden. und zwar in Spalte V

Mein Ansatz:

Private Sub AddSubSupplier_Click()

Dim letzteZeile As Long
Dim NewButton As Object
               

    With Tabelle1
    'Letzte Zeile bestimmen und gibt an, nach wieviel Zellen die nächste Tabelle anfangen soll
            letzteZeile = .Range("S1048576").End(xlUp).Row + 7

    'Kopiert den Bereich der hier bestimmt wird
        .Range("S5:V9").Copy
        .Range("S" & letzteZeile).PasteSpecial
         
        Application.CutCopyMode = False
        
'        Hier wird bestimmt der wievielte Sub Supplier eingefügt wird
'        muss noch richtig berechnet werden!
        .Range("S" & letzteZeile) = "Sub-Supplier " & (letzteZeile - 2)
        .Range("S" & letzteZeile).Select
        
    End With

' HIER LIEGT DAS PROBLEM; PROGRAMM FÜGT BUTTONS EIN ABER NICHT NEBEN DIE EINGEFÜGTEN ZELLEN VON  _
 _
OBEN, IST SOMIT NOCH NICHT DYNAMISCH
-->
 Set NewButton = Tabelle1.Buttons.Add(150, 1, 40, 20)
    NewButton.Caption = ""
    NewButton.Height = 50
' BUTTONS SOLLEN IN SPALTE V EINGEFÜGT WERDEN;KLAPPT ABER SO NICHT ! :(

    NewButton.Left = Range("V" & letzteZeile)
    
End Sub
Bin für jede Hilfe dankbar,

Gruß Nati

  

Betrifft: AW: Buttons "variabel" hinzufügen von: Ralf Anton
Geschrieben am: 07.12.2017 11:14:04

Hi Nati,

NewButton.Left = Range("V" & letzteZeile).Left
Wobei ich kein Freund der tausend Objekte bin. Du blähst Deine Mappe unnötig auf und wenn die Zeile gelöscht wird, bleibt der Button ja trotzdem bestehen. Oder hast Du das irgendwo geregelt?

Ich händle das immer so: Ein einziger Button. Beim Selection_Change Ereignis wird dessen Top _ Eigenschaft auf den Wert der aktiven Zelle gesetzt. In Deinem Fall , das
Set NewButton = blablabla...

rausschmeißen und im Selection_Change einfach nur ein
Button1.Top =  Target.Top
(oder wie Dein Button auch immer heißen mag) einfügen.
Noch eine kleine Fehlerbehandlung einbauen (falls Mehrfachauswahl erfolgt). Da genügt ein
On Error resume next
am Anfang und ein

err.clear
am Ende.


  

Betrifft: AW: Buttons "variabel" hinzufügen von: Mullit
Geschrieben am: 07.12.2017 13:17:55

Hallo,

...und bei 'VBA gut' wissen wir natürlich, daß die Add-Methode bereits einen Left-Param. enthält...;-)

Tabelle1.Buttons.Add(150, 1, 40, 20)

Gruß, Mullit


  

Betrifft: AW: Buttons "variabel" hinzufügen von: Nati
Geschrieben am: 08.12.2017 07:17:56

Hallo Ralf,

danke dir, die Buttons haben folgenden Sinn: ein User kann damit einen "Baum" kreieren, und zwar wenn er auf zwei Buttons klickt, führt eine darauffolgende Methode aus, dass diese Buttons durch einen Strich verbunden werden. Bei deinem Code: NewButton.Left = Range("V" & letzteZeile) wird der Button oben eingefügt (siehe Gelbe Markierung( statt ganz unten (jedes mal beim hinzufügen eines Sub Suppliers, der andere Button habe ich manuell eingefügt); vielleicht gibt es da aber eine einfachere Lösung.




Ziel ist es jeden Sub Supplier mit einem Strich verbinden zu können.(Diesen Code habe ich auch bereits, der mit zwei Punkte berechnet und diese dann verbindet - die Koordinaten werden je nach Klick auf zwei Buttons generiert; läuft auch super:

Sub connection_zeichnen()

Dim nameGeklickteSchaltfläche As String
Dim nameVerknüfungSchaltfläche As String

'--> Hier stehen die Werte von den beiden geklickten Buttons

nameGeklickteSchaltfläche = Worksheets("Hilfstabelle").Range("B5").Value
nameVerknüfungSchaltfläche = Worksheets("Hilfstabelle").Range("C5").Value

Worksheets("Tabelle1").Shapes.AddConnector(msoConnectorStraight, 0, 0, 0, 0).Select
    Selection.ShapeRange.ConnectorFormat.EndConnect Worksheets("Tabelle1").Shapes( _
nameGeklickteSchaltfläche) _
        , 2
        
Selection.ShapeRange.ConnectorFormat.BeginConnect Worksheets("Tabelle1").Shapes( _
        nameVerknüfungSchaltfläche), 4
         
Worksheets("Tabelle1").Shapes(nameGeklickteSchaltfläche).Visible = False
Worksheets("Tabelle1").Shapes(nameVerknüfungSchaltfläche).Visible = False

'lösche Inhalt
Worksheets("Hilfstabelle").Range("B4").Value = ""
Worksheets("Hilfstabelle").Range("B5").Value = ""
Worksheets("Hilfstabelle").Range("C4").Value = ""
Worksheets("Hilfstabelle").Range("C5").Value = ""
     
End Sub

Gruß, Nati


  

Betrifft: Statt Buttons besser BeforeDoubleklick-Event von: Daniel
Geschrieben am: 07.12.2017 11:22:33

Hi
wie Ralf schon schrieb:
solche automatisch hinzugegfügten Buttons sind immer problematisch.

Über das BeforeDouble-Klick-Event kannst du im Prinzip jede Zelle zum Button machen, welcher bei Doppelklick reagiert.

in der Variable TARGET ist die angelickte Zelle hinterlegt, so dass du weißt, welche Zelle angelickt wurde und entsprechend reagieren kannst.

Gruß Daniel


  

Betrifft: AW: Statt Buttons besser BeforeDoubleklick-Event von: Nati
Geschrieben am: 08.12.2017 07:25:50

Hallo Daniel,

danke dir. Das ist sehr interessant.
Momantan habe ich , je nach dem welche Buttons geklickt werden, die Position der Buttons in eine Tabelle geschrieben:



anschließend können diese Buttons dann verbunden werden mit den Werten ( das klappt auch gut).

Sub connection_zeichnen()

Dim nameGeklickteSchaltfläche As String
Dim nameVerknüfungSchaltfläche As String

nameGeklickteSchaltfläche = Worksheets("Hilfstabelle").Range("B5").Value
nameVerknüfungSchaltfläche = Worksheets("Hilfstabelle").Range("C5").Value

Worksheets("Tabelle1").Shapes.AddConnector(msoConnectorStraight, 0, 0, 0, 0).Select
    Selection.ShapeRange.ConnectorFormat.EndConnect Worksheets("Tabelle1").Shapes( _
nameGeklickteSchaltfläche) _
        , 2
        
Selection.ShapeRange.ConnectorFormat.BeginConnect Worksheets("Tabelle1").Shapes( _
        nameVerknüfungSchaltfläche), 4
         
Worksheets("Tabelle1").Shapes(nameGeklickteSchaltfläche).Visible = False
Worksheets("Tabelle1").Shapes(nameVerknüfungSchaltfläche).Visible = False

'lösche Inhalt
Worksheets("Hilfstabelle").Range("B4").Value = ""
Worksheets("Hilfstabelle").Range("B5").Value = ""
Worksheets("Hilfstabelle").Range("C4").Value = ""
Worksheets("Hilfstabelle").Range("C5").Value = ""
     
End Sub
was dann so aussieht:



Ich habe aber allerdings bedenken, da viele Sub Supplier generiert werden, und auch viele Tiers - denke das führt evtl zu Fehlern :/.

Hättest du da evtl einen Vorschlag für eine einfachere Lösung ?

Gruß,
Nathalie


  

Betrifft: AW: Buttons "variabel" hinzufügen von: Martin
Geschrieben am: 07.12.2017 11:24:55

Hallo Nati,

leider komme ich mit deinem Code nicht so richtig klar. Aber ich kann dir zumindest einen Ansatz für das Positionieren der Buttons geben:

Private Sub AddSubSupplier_Click()

    Dim letzteZeile As Long
    Dim NewButton As Object

    With Tabelle1
    'Letzte Zeile bestimmen und gibt an, nach wieviel Zellen die nächste Tabelle anfangen soll
            letzteZeile = .Range("S1048576").End(xlUp).Row + 7

    'Kopiert den Bereich der hier bestimmt wird
        .Range("S5:V9").Copy
        .Range("S" & letzteZeile).PasteSpecial
         
        Application.CutCopyMode = False
        
'        Hier wird bestimmt der wievielte Sub Supplier eingefügt wird
'        muss noch richtig berechnet werden!
        .Range("S" & letzteZeile) = "Sub-Supplier " & (letzteZeile - 2)
        .Range("S" & letzteZeile).Select
        
    End With

' HIER LIEGT DAS PROBLEM; PROGRAMM FÜGT BUTTONS EIN ABER NICHT NEBEN DIE EINGEFÜGTEN ZELLEN VON  _
_
 _
OBEN, IST SOMIT NOCH NICHT DYNAMISCH
    
    Set NewButton = Tabelle1.Buttons.Add(1, 1, 40, 50) '40 = Breite, 50 = Höhe
    NewButton.Caption = ""
    NewButton.Left = Range("V" & letzteZeile).Left
    NewButton.Top = Range("V" & letzteZeile).Top
End Sub
Viele Grüße

Martin


Beiträge aus den Excel-Beispielen zum Thema "Buttons "variabel" hinzufügen"