Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

vorhandene Schaltfläche per VBA kopieren

Betrifft: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 20.11.2012 10:44:50

Hallo Community,

ich habe mal wieder ein Problem und ihr habt mir bisher immer weitergeholfen.

Habe eine Excel- Tabelle "Tabelle1" in dieser stehen unzählige Daten drin. Auf dieser Tabelle habe ich die Schaltflächen "Aktualisieren" und "Suchen".

Schaltfläche "Aktualisieren" erstellt mir weiter sechs neue Tabellen und teilt die Inhalte aus der "Tabelle1" entsprechend auf.

Mit Schaltfläche "Suchen" kann man die "SpalteB" in "Tabelle1" komplett durchsuchen.

Nun habe ich probiert die Schaltfläche "Suchen" zu kopieren/ oder neu zu erstellen, wenn ich über Schaltfläche "Aktualisieren" die Tabellen erstelle.

Kurz gesagt, will ich die Schaltfläche "Suchen" samt ihrer Funktion in in die neuen Tabellen einfügen die erstellt werden. Dies kriege ich bisher leider nicht hin.

Ich hoffe ich konnte mich vertändlich ausdrücken und ihr werdet mir wie bisher auch wieder helfen.

Danke im Voraus.

Grüße Wilson

  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Beverly
Geschrieben am: 20.11.2012 12:23:41

Hi Wilson,

was für eine Schaltfläche: Formular-Steuerelement oder ActiveX-Steureelement?


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 21.11.2012 07:55:04

Hallo Beverly,

danke für deine Antwort, es handelt sich um ein Formularsteuerelement.

Sorry für die verspätete Antwort.

Grüße


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Beverly
Geschrieben am: 21.11.2012 08:47:38

Hi Wilson,

mit dem folgenden Code kann man einen definierten Schalter ("Button 2") aus dem aktiven Tabellenblatt kopieren, in Tabelle2 einfügen und auf Position der Zelle C12 legen:

   ActiveSheet.Shapes("Button 2").Copy
   With Worksheets("Tabelle2")
      .Paste
      .Shapes(.Shapes.Count).Top = .Range("C12").Top
      .Shapes(.Shapes.Count).Left = .Range("C12").Left
   End With
Dabei wird auch das verknüpfte Makro mit kopiert.

Aus deinem ersten Beitrag geht allerdings nicht eindeutig hervor, ob der kopierte Schalter nun in dem neuen Tabellenblatt oder nach wie vor in der Ursprungstabelle (Tabelle1) suchen soll. Falls damit in dem neuen Tabellenblatt gesucht werden soll, dann müsstest du das dem Schalter "Suchen" zugewiesene Makro so schreiben, dass im aktiven Tabellenblatt gesucht wird.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 21.11.2012 10:46:51

Hey Beverly,

danke für die schnelle Hilfe.
Stimmt, dass hätte ich erwähnen sollen. Ich suche dann immer in der aktuellen Tabelle in welcher die Suchen- Schaltfläche sich auch befindet.
Da ich ja noch relativ grün hinter den Ohren bin, habe ich jetzt nicht ganz verstanden was ich genau ändern soll und an welcher Stelle im Code. ^^

Grüße


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Beverly
Geschrieben am: 21.11.2012 12:27:30

Hi Wilson,

du hast deinen Code, der mit der Schaltfläche "Suchen" verknüpft ist, nicht gepostet, sodass ich leider nichts genaueres sagen kann.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 22.11.2012 07:15:35

Hallo Beverly,

Mit dem Klick auf dier Schaltfläche öffne ich erst eine UserForm die ich mir auf meine Bedürfnisse erstellt habe und hinter dieser UserForm befindet sich dann der Code.
Ist villeleicht nicht gut programmiert, aber mir kam es so am logischsten vor. Wie gesagt, bin halt ganz neu auf dem Gebiet.
Ich markiere mir immer die gefundene Zelle. Schrift wird fett markiert und blau gefärbt und die Zelle wir gelb eingefärbt. Beim nächsten oder vorherigen Suchergebnis wird die Formatierung immer weitergegeben und in der vorherigen zurückgesetzt.

1. Code Schaltfläche:

Private Sub cmbSuchenSNR_Click()
Dim wks As Worksheet
Dim xlEnd As Long
  
  Set wks = ActiveWorkbook.ActiveSheet
  With wks
    xlEnd = .Cells(.Rows.Count, 2).End(xlUp).Row
    
    'Schrift fett rückgängig
    .Range("B4:B" & xlEnd).Font.Bold = False
  
    'Schrift Farbe der Zelle rückgängig
    .Range("B4:B" & xlEnd).Interior.ColorIndex = xlNone
  
  End With
  
  UserForm1.Show

End Sub

2. UserForm

Option Explicit
Private Sub TextBox1_Enter()
    With TextBox1
    .SelStart = 0
    .SelLength = Len(.Text)
    End With
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    Call fktMarkierungenImTabellenblattZuruecksetzen
  End If
End Sub

Private Sub UserForm_Initialize()
  TextBox1.SetFocus
End Sub

Private Sub cmbSuchen_Click()
  Call fktMarkierungenImTabellenblattZuruecksetzen
End Sub
'Zur Info! cmbWeiter_Click und cmbZurueck_Click sind exakt gleich nur Befehle .FindNext
'und .FindPrevious sind unterschiedlich.
Private Sub cmbWeiter_Click()
Dim rngEingabe As Range
Dim xlEnd As Integer
Dim wks As Worksheet
Dim strTest As String

  Set wks = ActiveWorkbook.ActiveSheet
  With wks
    xlEnd = .Cells(.Rows.Count, 2).End(xlUp).Row
    strTest = .Name
    
    'Schrift fett rückgängig
    .Range("B4:B" & xlEnd).Font.Bold = False
  
    'Schrift Farbe der Zelle rückgängig
    .Range("B4:B" & xlEnd).Interior.ColorIndex = xlNone
 
    'Eingabe der gewünschten Sachnummer in die TextBox1
    If TextBox1 = "" Then Exit Sub
    Set rngEingabe = .Columns(2).FindNext(After:=ActiveCell)
    If Not rngEingabe Is Nothing Then
      
      'Gefundene Sachnummer wird ausgewählt
      rngEingabe.Select
      
      'Gefundene Sachnummer wird fett markiert
      rngEingabe.Font.Bold = True 'Fett
      
      'Zelle mit gefundener Sachnummer wird gelb eingefärbt
      With rngEingabe.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535       'oder hier eine andere Farbe
        '.TintAndShade = 0
        '.PatternTintAndShade = 0
      End With
      
      With TextBox1
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Text)
      End With
    
    Else
      MsgBox "Eingegebene Sachnummer ist nicht vorhanden", vbExclamation, "Fehler"
    End If
    
  End With
 
End Sub

Private Sub cmbZurueck_Click()
Dim rngEingabe As Range
Dim xlEnd As Integer
Dim wks As Worksheet
Dim strTest As String

  Set wks = ActiveWorkbook.ActiveSheet
  With wks
    xlEnd = .Cells(.Rows.Count, 2).End(xlUp).Row
    strTest = .Name
    
    'Schrift fett rückgängig
    .Range("B4:B" & xlEnd).Font.Bold = False
  
    'Schrift Farbe der Zelle rückgängig
    .Range("B4:B" & xlEnd).Interior.ColorIndex = xlNone
 
    'Eingabe der gewünschten Sachnummer in die TextBox1
    If TextBox1 = "" Then Exit Sub
    Set rngEingabe = .Columns(2).FindPrevious(After:=ActiveCell)
    If Not rngEingabe Is Nothing Then
      
      'Gefundene Sachnummer wird ausgewählt
      rngEingabe.Select
      
      'Gefundene Sachnummer wird fett markiert
      rngEingabe.Font.Bold = True 'Fett
      
      'Zelle mit gefundener Sachnummer wird gelb eingefärbt
      With rngEingabe.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535       'oder hier eine andere Farbe
        '.TintAndShade = 0
        '.PatternTintAndShade = 0
      End With
      
      With TextBox1
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Text)
      End With
    
    Else
      MsgBox "Eingegebene Sachnummer ist nicht vorhanden", vbExclamation, "Fehler"
    End If
    
  End With
    
End Sub

Private Sub fktMarkierungenImTabellenblattZuruecksetzen()
Dim rngEingabe As Range
Dim xlEnd As Integer
Dim wks As Worksheet
Dim strTest As String

  Set wks = ActiveWorkbook.ActiveSheet
  With wks
    xlEnd = .Cells(.Rows.Count, 2).End(xlUp).Row
    strTest = .Name
    
    'Schrift fett rückgängig
    .Range("B4:B" & xlEnd).Font.Bold = False
  
    'Schrift Farbe der Zelle rückgängig
    .Range("B4:B" & xlEnd).Interior.ColorIndex = xlNone
 
    'Eingabe der gewünschten Sachnummer in die TextBox1
    If TextBox1 = "" Then Exit Sub
    Set rngEingabe = .Columns(2).Find(What:=TextBox1, LookAt:=xlPart)
    If Not rngEingabe Is Nothing Then
      
      'Gefundene Sachnummer wird ausgewählt
      rngEingabe.Select
      
      'Gefundene Sachnummer wird fett markiert
      rngEingabe.Font.Bold = True 'Fett
      
      'Zelle mit gefundener Sachnummer wird gelb eingefärbt
      With rngEingabe.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535       'oder hier eine andere Farbe
        '.TintAndShade = 0
        '.PatternTintAndShade = 0
      End With
      
      With TextBox1
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Text)
      End With
    
    Else
      MsgBox "Eingegebene Sachnummer ist nicht vorhanden", vbExclamation, "Fehler"
    End If
    
  End With
End Sub



  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Beverly
Geschrieben am: 22.11.2012 08:14:13

Hi Wilson,

der Prozedurbezeichnung

Private Sub cmbSuchenSNR_Click()
zum Starten des UserForms würde ich aber entnehmen, dass es sich nicht um ein Fomrularsteuerelement sondern um ein ActiveX-Steuerelement handelt und sich der Code im Codemodul des betreffenden Tabellenblattes und nicht in einem allgemeinen Modul befindet - oder sehe ich das falsch?


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 22.11.2012 07:24:59

Ach so ja, mir ist aufgefallen dass ich ausversehen gesagt habe dass es sich um einFormularsteuerlement handelt. Hab mich leider vertan, es ist natürlich ein ActiveX- Steuerelement, sorry.


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Beverly
Geschrieben am: 22.11.2012 08:29:47

Hi Wilson,

leider wurde mir dieser Beitrag erst jetzt angzeigt, nachdem ich meinen vorhergehenden bereits abgeschickt hatte.

Dann habe ich das in meinem Beitrag von 08:15 also richtig erkannt. Bei einem ActiveX-Steuerelement ist das wesentlich komplizierter, da der Code ja im Codemodul des betreffenden Tabellenblattes stehen muss. In diesem Fall hast du folgende Möglichkeiten:

1. du kopierst das gesamte Tabellenblatt einschließlich Schalter, dann wird auch der Code mitkopiert
2. du löst es mittels Klassenprogrammierung
3. du schreibst den Code mit VBA ins Codemodul des Tabellenblattes

wobei die 1. Möglichkeit die einfachste ist. Bei den beiden anderen musst du sehr umfangreiche VBA-Kenntnisse besitzen, um sie realisieren zu können - davon würde ich bei "VBA-nein" abraten.

Es gibt allerdings noch eine 4. Möglichkeit: du verwendest tatsächlich ein Formularsteuerelement, schreibst deinen Code zum Starten des UserForms in ein allgemeines Modul und weist dem Schalter dieses Marko zu. Das Steuerelement kopierst du dann wie weiter oben beschrieben - dabei wird auch die Makroverknüpfung mit kopiert. Dein Makro ist bereits so geschrieben, dass es sich auf das aktive Tabellenblatt bezieht, sodass es da keinerlei Änderungen bedarf.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 22.11.2012 08:51:47

Okay Beverly,

danke für deine tips und Hilfe. Ich werde es jetzt mal versuchen umzusetzen.
Vielleicht schreibt man sich ja nochmal.

Viele Grüße

Wilson


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Peter Kloßek
Geschrieben am: 20.11.2012 12:43:15

Hallo Wilson,

mit dem Kopieren von Schaltflächen ist das so eine Sache. Es kommt auf deren Formatierung an. Ist eine Schaltfläche "von Größe und Zellposition unabhängig" formatiert, dann läßt sich diese Schaltfläche nicht mit den Zellen, auf denen sie steht, kopieren. Ich nehme an, dass dies der Grund ist, dass Dir das Kopieren der Schaltfläche nicht gelingt. Die erste Schaltfläche (in dem ersten Arbeitsblatt) muss daher zunächst umformatiert werden auf "von Größe und Zellposition abhängig", dann kopiert werden und anschließend müssen alle Schaltflächen auf den ursprünglichen Formatierungs-Zustand geändert werden. Das Ganze kann leider nur einmal durchgeführt werden. Bitte daher die Datei vor dem Kopiervorgang gut sichern!

Hier meine Lösung:
https://www.herber.de/bbs/user/82701.xlsm

Übrigens: wenn man ganze Arbeitsblätter kopiert, hat man dieses Problem nicht.

Mit freundlichem Gruß

Peter Kloßek


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Wilson Keks
Geschrieben am: 21.11.2012 10:25:27

Hallo Peter,

danke für deine Tips, hab jetzt alles überprüft, was du angesprochen hast und es ist bereits alles so eingestellt in den Formatierungen.
Werd mich noch ein wenig damit beschäftigen.

Nochmals danke.

Grüße


  

Betrifft: AW: vorhandene Schaltfläche per VBA kopieren von: Peter Kloßek
Geschrieben am: 21.11.2012 15:48:42

Hallo Wilson,

schönen Dank für Deine Nachricht. Wenn der in der 1. Tabelle vorhandene Makro-Button bereits "von Zellposition und Größe abhängig" formatiert ist, dann brauchst Du nur den mittleren Teil meines Makros (kopieren des Makro-Buttons)zu verwenden. Die Lösung von Beverly finde ich auch gut, sie müsste aber noch auf die betreffenden Arbeitsblätter ausgedehnt werden. Falls noch weitere Hilfe benötigt wird, einfach nochmal melden.

Mit freundlichem Gruß

Peter Kloßek


 

Beiträge aus den Excel-Beispielen zum Thema "vorhandene Schaltfläche per VBA kopieren"