Button auf Excel Tabellenblatt via Code erzeugen

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Neu

    Danke für Deine Antwort:
    Hier der Code:

    Quellcode

    1. ​Imports System.Globalization
    2. Imports Microsoft.Office.Interop.Excel
    3. Imports System.Drawing.Color
    4. Imports Microsoft.VisualBasic
    5. Public Class Tabelle2
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. Dim tb As Excel.Worksheet = CType(Globals.ThisWorkbook.Application.Worksheets("Tabelle2"), Worksheet)
    8. Dim bt = tb.Buttons.Add(200, 100, 100, 20)
    9. bt.Caption = "Mein Button"
    10. bt.Font.Color = RGB(0, 0, 80)
    11. bt.Font.Bold = True
    12. AddHandler bt.Click, AddressOf Bt_Click
    13. End Sub
    14. Private Sub Bt_Click(sender As Object, e As EventArgs)
    15. Dim Button = CType(sender, Button)
    16. MsgBox(Button.Name)
    17. End Sub
    18. End Class

    Neu

    Das mit den tb.Buttons habe ich nur von dir übernommen.
    Ich dachte, du hättest das getestet.
    Ich hätte vermutlich eher einen ActiveX-Button verwendet.
    Dim bt = ​ tb.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=489, Top:=87.75, Width:=50.25, Height:=32.25)

    Nein, ich hätte den Button gar nicht dynamisch erzeugt, sondern nur die Sichtbarkeit eines Buttons ein- und ausgeschaltet.
    Und da ich es vor Jahren schon aufgegeben habe, VSTOs zu programmieren, ist es vermutlich besser, wenn ich mich aus dem Thread zurück ziehe, bevor ich noch Unsinn erzähle.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Zunächst einmal: Entschuldige, dass ich mich erst so spät gemeldet hatte, obwohl Du bereits am Mittwoch geantwortet hattest. Ich hatte übersehen, dass mittlerweile eine zweite Seite aufgemacht wurde. :(
    Ich hatte den Code, so wie ihn mir Karl-Heinz übermittelt hatte, getestet und der Button wurde erstellt. Der Code lief ohne Fehler durch.
    Ich hatte in Karl-Heinz Code lediglich

    Quellcode

    1. With Sheets("Tabelle1").Buttons.Add(200, 100, 50, 20)
    mit

    Quellcode

    1. Dim tb As Excel.Worksheet = Globals.ThisWorkbook.Application.Worksheets("Tabelle2")
    2. With tb.Buttons.Add(200, 100, 100, 20)
    ersetzt.
    Wie ich aber immer wieder betont hatte, wurde mir von der IntelliSense niemals ein "Buttons" angeboten, weshalb ich mich immer wieder frage, was denn bei mir nicht richtig eingestellt ist. Denn offensichtlich funktioniert es bei anderen, nur bei mir eben nicht. Denn, und auch das habe ich geschrieben, ich kann auch kein: Dim bt as New Button eingeben, weil mir eben Button gar nicht angeboten wird.
    Wie also soll ich einem neu erstellten Button (bt) als Button deklarieren, wenn mir das gar nicht angeboten wird?
    Wie soll ich denn dann einen Button an den "AddHandler" übergeben?
    Darum drehte sich doch die ganze Fragerei.
    Gleich zu Beginn und auch in meiner späteren Erläuterung hatte ich erklärt, um was es geht. Auch hatte ich geschrieben, dass es mir durchaus gelungen ist, ein Shape zu erzeugen, das mit einem "OnAction" Makrocode ausführen kann.
    Meine Frage war und ist nach wie vor: Wie kann ich dieses Objekt, ob es nun ein Button ist oder ein Shape, so deklarieren und auch übergeben, dass es beim Klicken eine Prozedur ausführt, bzw ich es an "AddHandler" übergeben kann?
    Gruß Oisse

    Neu

    Oisse schrieb:

    Wie also soll ich einem neu erstellten Button (bt) als Button deklarieren

    Dim bt as Microsoft.Office.Interop.Excel.Button

    Vielleicht gehst du mal diese Anleitung Schritt für Schritt durch und überträgst sie auf deine Anwendung:
    Walkthrough: Add controls to a worksheet at run time in VSTO add-in project
    Das ist doch ziemlich genau, was du machen willst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --