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 CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Kopieren von einem CommandButton


Betrifft: Kopieren von einem CommandButton von: Markus
Geschrieben am: 09.07.2018 17:12:06

Hallo Community,

ich habe folgendes Anliegen an Euch:

Ich möchte einen "CommandButton6" von einem Tabellenblatt in ein anderes kopieren in der selben Arbeitsmappe auf die Zelle D2. Dabei will ich auf keinen Fall das ganze Tabellenblatt kopieren (weil das geht ja, aber ist viel zu viel), sondern nur den CommandButton mit seinem entsprechenden Code darin.
Folgenden Code verwende ich dafür:

Public Sub Exportbutton_kopieren()
    activeSheet.Shapes("CommandButton6").Copy
   'activeSheet.Shapes("CommandButton6").Copy.TopLeftCell.EntireRow.Range("D2:D7").Copy
     'activeSheet.Buttons(Application.Caller).TopLeftCell.EntireRow.Range("D2:D7").Copy
   With Worksheets("Tabelle2")
      .Paste
      .Shapes(.Shapes.Count).Top = .Range("D2").Top
      .Shapes(.Shapes.Count).Left = .Range("D2").Left
     
   End With
 End Sub


Das funktioniert auch soweit nur er kopiert mir nicht den CommandButton6 sondern legt einen CommandButton1 in Tabelle2 an und da ist kein Code in diesem Button. Er sollte aber den CommandButton6 kopieren so wie er ist, damit dieser wieder Funktioniert. Ich will ja nicht diesem CommandButton1 per Hand den Code wieder hinzufügen, sondern das soll er automatisch machen indem er einfach den CommandButton6 kopiert.
Wie kann man also einen CommandButton kopieren mit seinem Inhalt von einem Tabellenblatt in ein anderes?

Mit Formularbuttons geht es doch auch, nur hier brauche ich einen Active-X Button, weil sich Farbe bei Click ändert und noch andere Dinge, die der Formularbutton nicht unterstützt.

Hoffe jemand weiß Rat.

Beste Grüße

Markus

  

Betrifft: Grafikelement statt CommandButton von: Daniel
Geschrieben am: 09.07.2018 17:58:43

Hi

Jeder ActiveX-Commandbutton braucht seinen eigenen Code.
Wenn du so einen in ein anderes Tabellenblatt kopierst, musst du auch den Code neu anlegen.
Das könnte man zwar auch per Makro ausführen lassen, aber das liegt doch etwas über deinen Fähigkeiten (such mal im Www nach "code mit Code manipulieren", da gibts ein Tutorial dazu)

Wenn es nur darum geht, ein paar Formate zu ändern, dann kannst du anstelle des Formularbuttons jedes andere Grafikelement verwenden und ihm ein Makro zuweisen, welches bei Klick ausgeführt wird.

Gruß Daniel


  

Betrifft: AW: Grafikelement statt CommandButton von: Markus
Geschrieben am: 09.07.2018 18:37:22

Hallo,

danke erstmal für die Antwort.

Ja ich wollte das per Makro ausführen lassen, händig den Code in den Active-X Button kopieren kommt nicht in Frage für mich.

Ich habe mir mal über deine Stichworte was rausgesucht, meintest Du dies?
https://www.herber.de/forum/archiv/1028to1032/1029773_Code_per_Code_manipulieren_von_Nepumuk.html

oder dies?:
http://www.office-loesung.de/ftopic229690_0_0_asc.php

Ich hab es mir mal angesehen, aber dort wird nur ein Export von Modulen, Forms und Klassen (BAS, FRM, CLS) getätigt mit Code und diese "Arbeitsmappe" bzw. wird viel gelöscht in dem anderen Linktutorial, was ich ja so gar nicht möchte, ich brauche das aber für einen Active-X Button, wie sähe dann der Code aus? Mein Button befindet sich auch nicht in diese Arbeitsmappe sondern in der Tabelle direkt, also unter "Microsoft Excel Objekte.Tabelle1", dort steht der Code des Buttons weil er ja auf dem Tabellenblatt liegt, das ist soweit auch nachvollziehbar für mich. Er hat also nichts mit DieseArbeitsmappe, Forms oder Modulen zu tun, sondern es müsste so was sein wie:
objVBComponent.MicrosoftExcelObject.Tabelle1 (was ich exportieren möchte und da heraus halt den Codes des Active-X Steuerbuttons).

Nein es geht nicht darum ein paar Formate zu ändern, sondern der Button ist ein OnClick Button der Farbe ändert bei Click und Makro ausführt für CSV Export. Grafikelemente nützen mir da auch nichts.

Die Form des Buttons mit Farbe wird ja exakt so erstellt nur es ist dann ein anderer Button der nur so aussieht aber keinerlei Code beinhaltet.

Also ja, per Makro sollte der neue Button (mir wäre es lieber wenn er gleich heißen würde und nicht aus CommandButton6 den CommandButton5 macht im neuen Tabellenblatt, die selbe Funktion nach dem kopieren aufweisen wie der Alte.

Hoffe das war jetzt mehr verständlich wo mein Button liegt und wo ich den Code per Makro rauskopieren möchte.

Beste Grüße

Markus


  

Betrifft: AW: Grafikelement statt CommandButton von: Daniel
Geschrieben am: 09.07.2018 19:40:13

Hi

Wie gesagt, am einfachsten über ein Grafikelement, dem du das Makro aus einem allgemeinen Modul zuweist.
Funktional unterscheiden sich Grafikelement und Formularsteuerelementbutton nicht.
Zusätzlich kannst du beim Grafikelement die Formatierungen ändern.

ActiveX-Button wäre nur notwendig, wenn du neben der Formatierungen noch weitere Spezialfähigkeiten benötigst, die der Formularbutton nicht bietet.
Welche wären es?

Gruß Daniel


  

Betrifft: AW: Grafikelement statt CommandButton von: Oberschlumpf
Geschrieben am: 09.07.2018 19:42:24

na Daniel,

hast du 2x überlesen :-)), dass der Button beim Klick andersfarbig ist, was wohl der Formularbutton nicht kann.

Ciao
Thorsten


  

Betrifft: AW: Grafikelement statt CommandButton von: Daniel
Geschrieben am: 09.07.2018 20:11:18

Kommt darauf an, was gemeint ist.
Bei klick die Farbe ändern und diese bis zum nächsten Klick behalten, kann das als Button verwendete Grafikelement.
Die Farbe wechseln solange der Button gehalten wird und beim loslassen in die alte Farbe zurückwechseln kann nur der ActiveX-Button.
Daher auch meine Bitte an den Fragesteller, genauer zu beschreiben was er möchte.

Insbesondere der von dir genannte Grund spricht ja dafür, möglichst keine ActiveXButtons zur Laufzeit zu erstellen.

Gruß Daniel


  

Betrifft: AW: Grafikelement statt CommandButton von: Oberschlumpf
Geschrieben am: 09.07.2018 20:38:02

welchen Grund meinst du? Das mit dem Trust-Center?
Im von mir genannten Zusammenhang bezog sich das ja "nur" auf das Erzeugen von VBA-Code während der Laufzeit, was eben nicht möglich ist, wenn dem Projekt nicht vertraut wird.

Aber das Erstellen von weiteren ActX-Button während der Laufzeit ist grundsätzlich möglich.
Und diesen Button VBA-Leben "einzuhauchen" ist ja mit Hilfe der Klassenprogrammierung möglich, auf die Nepumuk aufmerksam machte.

Aber auch hier gilt: Die Klassenprogrammierung muss vor dem Start der Makros "erledigt" sein und kann während der Laufzeit genau so nicht geändert werden.

Na ja, bei Klassenprogrammierung bin ich eh raus. Soooo weit bin ich mit meinem Wissen leider noch nicht.

Ciao
Thorsten


  

Betrifft: nur ein Hinweis von: Oberschlumpf
Geschrieben am: 09.07.2018 19:40:47

Hi Markus,

deinem Wunsch "Code durch Code zu ersetzen, bzw Code durch Code hinzuzufügen" hat MS einen Riegel vorgeschoben.

Dieser Riegel nennt sich "Trust-Center", zumindest in meiner 2013er-Version. In 2007 heißt es, glaube ich, "Vertrauenscenter".
Jedenfalls musst du die Option "Dem VBA-Projekt vertrauen" aktivieren.

Erst dann, mit den entsprechenden Befehlen, darf man "automatisiert" VBA-Zeilen hinzufügen/entfernen/ändern.

Bedeutet aber auch, dass du mit dem "Projekt vertrauen" Gefahr läufst, dass Makro-Viren ihr Unwesen auf deinem Computer treiben können.

Willst du das?

Ach ja. Die oben erwähnte Option kann NUR händisch in den Einstellungen de- oder aktiviert werden.
Eine "Fernsteuerung" mit nem Makrobefehl ist - nicht - möglich, dann wäre dieser Schutz ja auch sinnlos.

Ciao
Thorsten


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 09.07.2018 20:08:03

Hallo Markus,

wenn der CommandButton im neuen Tabellenblatt die selbe Funktion haben soll, dann kannst du das über eine Klasse bewerkstelligen.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 09.07.2018 21:10:05

Hallo,

danke allen die geantwortet haben.

Der Active-X Steuerbutton hat folgende Funktionen:
wenn auf ihn geklickt wird ändert er die Farbe, wenn wieder drauf geklickt wird wird die Farbe zurückgesetzt.
Desweiteren weist er Tooltipps auf die erfolgen wenn man über ihn drüberfährt.
Es wird eine MsgBox angezeigt wenn der Button gedrückt wird und es wird eine andere Nachricht angezeigt, wenn er exportiert wurde und man ihn betätigt. also mit "if dies, zeige die MsgBox else zeige andere MsgBox."
Daher brauchte ich ihn auch als Active-X Steuerelement da er so viel möchtiger ist in seiner Funktion, hier reichte mir kein Formularbutton.

Der Hacken bei Zugriff auf Projekt vertrauen ist gesetzt, sonst geht ja nichts, es gibt nur einen Pfad wo es erlaubt ist und der ist festgelegt, daher nicht das Problem.

@ Nepumuk
Danke für den Hinweis, ja die Funktion soll die selbe sein, es soll halt eine Kopie des Active-X Buttons sein mit der selben Funktion die mit kopiert werden soll. Daher klingt das genau nach dem was ich suche mit der Klasse.
Kannst Du mir das erklären bzw. ein Beispiel geben wie ich das bewerkstelligen kann?
Mein Button ist CommandButton6_Click (in Tabelle1), dieser soll (in Tabelle 2) kopiert werden, so dass in der Tabelle2 dann dieser Button exakt vorhanden ist mit seinen Funktionen bzw. seinem Inhalt.

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 09.07.2018 21:15:57

Hallo Markus,

kannst du eine Mustermappe hochladen? Dann bau ich es dir ein.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 09.07.2018 23:11:30

Hallo Nepumuk,

danke ja sehr gern, das wäre sehr schön, habe eine erstellt. Der Tooltipp hängt manchmal, besser habe ich es besser nicht gelöst bekommen.

Es handelt sich um die Codes von "CommandButton6_click" und "CommandButton6_MouseMove" die kopiert werden sollten und wenn es geht das der neue Button dann nicht CommandButton1 heißt sondern CommandButton6.
Bisher kopiert er den Button wie man Testen kannst indem Du auf ihn klickst, aber er legt halt einen CommandButton1 an und das auch noch ohne jeden Code darin.

Hier der Link zur Beispielmappe:
https://www.herber.de/bbs/user/122571.xlsm

Noch eine Frage: Kann man die Ecken auch abruden von einem Command-Button, wenn ja wie gänge dies?
Habe mal eine Form in die Mappe genommen wie ich es mir vorstellen würde mit den Eckrundungen des CommandButtons.

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Daniel
Geschrieben am: 10.07.2018 01:41:34

Hi

für abgerundete Ecken müsstest du ein entsprechendes Grafikelement verwenden und diesem ein Makro aus einem allgemeinen Modul zuweisen.

Mit Ausnahme des ToolTips lassen sich alle deine Anforderungen (insbesondere die letzte) mit Grafikelementen umsetzen.

Mit ActiveX-Steuerelementen lassen sich die runden Ecken nicht realisieren.

Gruß Daniel


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 10.07.2018 12:15:37

Hallo Daniel,

mit Grafikelement meinst Du doch bestimmt Einfügen und dann die Formen oder?
Wie ändert man dann die Farbe ich weiß nicht wie das Grafikelement heißt um es ansprechen zu können?
Wie würde der Name der Form angenommen in der Beispielmappe heißen, wo steht so was?
Ja gut aber die Tooltipps brauche ich nun mal auch, die sind schon fester Bestandteil, aber interessant für die Zukunft, dass man sonst alles auch mit Grafikelementen auf die Reihe bekommen könnte. Nur halt das Farbe wechseln, ich muss dazu den Formbutton (Grafikelement ansprechen können, aber wo steht sein Name?

Bitte auf "Noch offen" stehen lassen, zumindest bis Nepumuk geantwortet hat, danke.

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Daniel
Geschrieben am: 10.07.2018 12:40:28

Hi

wenn du ein makro einem Formlarbutton oder einem Shape zuweist, dann kannst du über
ActiveSheet.Shapes(Application.Caller) auf das Shape zugreifen, welches den Code ausgelöst hat.
mit folgendem code kannst du bspw durch Anklicken die Farbe zwischen rot und grün umschalten:

Sub MakroBeiKlick()
With ActiveSheet.Shapes(Application.Caller).Fill.ForeColor
    If .RGB = vbGreen Then
        .RGB = vbRed
    Else
        .RGB = vbGreen
    End If
End With
End Sub
mit
ActiveSheet.Shapes(Application.Caller).TopLeftCell

bekommst du die Zelle, in welcher sich die linke obere Ecke des Shapes befindet.

mit
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Worksheet

bekommst du das Tabellenblatt, in welchem das Shape liegt.

beim Kopieren des Shapes bleibt die Verknüpfung zum Makro erhalten, dh wenn das makro ensprechend programmiert ist, kannst du die Buttons einfach kopieren und einfügen, ohne dich um weiters kümmern zu müssen.

Gruß Daniel


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 10.07.2018 14:21:25

Vielen Dank Euch Beiden.

@ Nepumuk:
es funktioniert, aber nur einmal, soll heißen kopiere ich den Button in Tabelle2 und lösche ihn dann wieder und möchte ihn nochmal kopieren, wird der Button nicht wieder kopiert.
Das andere ist mein Tooltipp funktioniert hier nun auch nicht mehr, habe gesehen das Du ihn aus- kommentiert hast. Wenn ich ihn wieder reinnehme funktioniert er nicht und das mit den Klassen geht dann auch nicht mehr, leider. Das beißt sich wohl irgendwie Beides?

Es sind also 2 Probleme jetzt aufgetreten:
1. der Button kann nur einmal kopiert werden
2. Tooltipp ist nicht mehr da

Kannst Du da noch was schrauben an den zwei Sachen?

@ Daniel
Ist ja wirklich toll was man da machen kann :), aber ein Tooltipp geht da wirklich nicht mit den Grafikelementen?
Ich würde nur sehr sehr ungern wieder auf ihn verzichten.


Anbei noch eine Sache die mir schon lange nicht gefällt, vielleicht habt ihr ja eine Idee:
Es geht um die Sortierung von Excel:
Ich bekomme, wenn sortiert gespeichert wurde (Code siehe weiter unten) immer folgende Fehlermeldung:
"Von Excel wurde unbekannter Inhalt gefunden. Möchten Sie den Inhalt dieser Arbeitsmappe wieder herstellen? Wenn Sie der Quelle dieser Arbeitsmappe vertrauen, klicken Sie auf ja."
Wenn man auf Ja klickt kommt dann:
"Entfernte Datensätze: Sortierung von /xl/worksheets/sheet2.xml-Part"
Dabei steht oberhalb als Information: Die Datei konnte von Excel geöffnet werden, indem der nicht lesbare Inhalt repariert oder entfernt wurde.
Hier die Prozedure:

Die Funktion Sortierung sieht wie folgt aus (aufgezeichnet als Makro:

Sub Sortieren()
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
        :=Range("Constance15:Constance398"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
        :=Range("Debie15:Debie398"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tabelle1").Sort
        .SetRange Range("Anne15:Olga398")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Ich verwende nur Namen statt den Normalen Zellen, aber daran liegt es nicht, auch wenn ich A15:O398 statt den Namen nehme kommt der Fehler.
Vielleicht wisst ihr ja wie man diese Fehlermeldung beim Öffnen des Dokuments, wenn sortiert gespeichert wurde wegbekommt. Laut Excel wird da ja einfach Inhalt entfernt.

Beste Grüße

Markus

PS: Und vielen Dank für Eure guten Ratschläge


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 10.07.2018 11:59:22

Hallo Markus,

ich habe es dir mal eingebaut: https://www.herber.de/bbs/user/122584.xlsm

Und nein, eine andere Form des CommandButton ist nicht möglich.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 10.07.2018 14:25:23

War verrutscht in der Hierarchie, daher hier nochmals:
Vielen Dank Euch Beiden.

@ Nepumuk:
es funktioniert, aber nur einmal, soll heißen kopiere ich den Button in Tabelle2 und lösche ihn dann wieder und möchte ihn nochmal kopieren, wird der Button nicht wieder kopiert.
Das andere ist mein Tooltipp funktioniert hier nun auch nicht mehr, habe gesehen das Du ihn aus- kommentiert hast. Wenn ich ihn wieder reinnehme funktioniert er nicht und das mit den Klassen geht dann auch nicht mehr, leider. Das beißt sich wohl irgendwie Beides?

Es sind also 2 Probleme jetzt aufgetreten:
1. der Button kann nur einmal kopiert werden
2. Tooltipp ist nicht mehr da

Kannst Du da noch was schrauben an den zwei Sachen?

@ Daniel
Ist ja wirklich toll was man da machen kann :), aber ein Tooltipp geht da wirklich nicht mit den Grafikelementen?
Ich würde nur sehr sehr ungern wieder auf ihn verzichten.


Anbei noch eine Sache die mir schon lange nicht gefällt, vielleicht habt ihr ja eine Idee:
Es geht um die Sortierung von Excel:
Ich bekomme, wenn sortiert gespeichert wurde (Code siehe weiter unten) immer folgende Fehlermeldung:
"Von Excel wurde unbekannter Inhalt gefunden. Möchten Sie den Inhalt dieser Arbeitsmappe wieder herstellen? Wenn Sie der Quelle dieser Arbeitsmappe vertrauen, klicken Sie auf ja."
Wenn man auf Ja klickt kommt dann:
"Entfernte Datensätze: Sortierung von /xl/worksheets/sheet2.xml-Part"
Dabei steht oberhalb als Information: Die Datei konnte von Excel geöffnet werden, indem der nicht lesbare Inhalt repariert oder entfernt wurde.
Hier die Prozedure:

Die Funktion Sortierung sieht wie folgt aus (aufgezeichnet als Makro:

Sub Sortieren()
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
        :=Range("Constance15:Constance398"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
        :=Range("Debie15:Debie398"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tabelle1").Sort
        .SetRange Range("Anne15:Olga398")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Ich verwende nur Namen statt den Normalen Zellen, aber daran liegt es nicht, auch wenn ich A15:O398 statt den Namen nehme kommt der Fehler.
Vielleicht wisst ihr ja wie man diese Fehlermeldung beim Öffnen des Dokuments, wenn sortiert gespeichert wurde wegbekommt. Laut Excel wird da ja einfach Inhalt entfernt.

Beste Grüße

Markus

PS: Und vielen Dank für Eure guten Ratschläge


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 10.07.2018 14:35:42

Hallo Markus,

wenn du den Entwurfsmodus aktivierst um den Button zu löschen zerstörst du die Klasse. Ich könnte ein Kontextmenü auf den Rechtsklick legen um den Button zu löschen.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Daniel
Geschrieben am: 10.07.2018 14:52:15

Hi
ein Weg um ToolTips für Grafikelemente mit Standard-VBA zu generieren ist mir nicht bekannt.
vielleicht geht da was mit WIN-API-Funktionen, aber die sind mir auch zu hoch.

da musst du dich jetzt entscheiden, was dir wichtiger ist:
a) ToolTips oder
b) einfache Kopierbarkeit und abgerundete Ecken.

Gruß Daniel


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 10.07.2018 15:35:58

Hallo Nepumuk und Daniel,

danke für Eure schnellen Antworten.

@ Daniel
Bisher läuft es ja darauf hinaus das Tooltipps wohl nicht funktionieren, wenn mit Klassen oder Grafkikelemente benutzt werden. Abgerundete Ecken sind schon schön, aber würde ich jetzt nicht unbedingt brauchen, war mehr informativ gewesen die Frage.
Die Tooltipps haben aber alle Buttons, darauf würde ich ungern verzichten beim CSV-Button.


@ Nepumuk
Ja dann würde es nicht die Klasse zerstören, das wäre sehr gut wenn Du das dahingehend erweitern könntest.
Mit den Tooltipps das geht dann wohl nicht mehr oder, weil Du die ja abgeschaltet hattest? Beißt sich das mit den Klassen?


Und diese Fehlermeldungen wenn man sortiert und gespeichert hat und das Dokument wieder öffnet, da gibt es auch nichts was man tun könnte gegen diese Reparatur von Excel wo einfach was gelöscht wird?

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 10.07.2018 15:41:36

Hallo Markus,

bitteschön: https://www.herber.de/bbs/user/122593.xlsm

Der ToolTip funktioniert bei mir einwandfrei.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 10.07.2018 16:39:07

Hallo Nepumuk,

Dankeschön Dir :)

Bei mir kommt leider kein Tooltipp, machst Du das was besonderes das der erscheint?
Ich fahre mit der Mouse über den Button, aber nichts passiert an Einblendung des Tooltipps.

Jedoch das löschen des Buttons funktioniert bei mir mit der rechten Maustaste jetzt Anstandslos so dass ich nicht in den Entwurfsmodus muss. :)

Ich habe doch keine andere Datei als Du, warum bekomme ich dann den Tooltipp nicht angezeigt :(, an was kann das liegen?

Mit dem Sortierfehler weißt Du wohl auch keinen Rat oder?

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 10.07.2018 17:04:18

Hallo Markus,

ich mach nichts anderes als mit der Maus über den Button zu fahren:



Zu deinem Sortierproblem: Der Sortierkey darf nur aus einer einzelnen Zelle bestehen. Du gibst aber einen Bereich an.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 10.07.2018 17:30:51

Hallo Nepumuk,

ich hab mir die Datei nochmal geladen vorher Excel geschlossen und alles neu gestartet.
Nun hab ich den Tooltipp auch, da hat wohl irgendwas gehangen bei Excel, schuldige es funktioniert jetzt selbstverständlich :)





Mit dem Sortieren, das ist ja schlecht, ich habe nun mal Bereiche die ich sortiere, wie sollte ich das anders machen?
Statt:
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
:=Range("A1:A12"), SortOn:=xlSortOnValues, Order:=xlAscending,

sollte ich dann schreiben?:
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
:=("A1"), SortOn:=xlSortOnValues, Order:=xlAscending,

aber dann sortiert er mir ja nur eine Zelle, ich müsste aber über einen Bereich hinweg sortieren.


oder meintest Du das eher dementsprechend?:
Dim Bereich As String
Bereich = "A1:A12"
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
:=Range(Bereich), SortOn:=xlSortOnValues, Order:=xlAscending,

Verwendetes Excel 2007.

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 10.07.2018 17:33:43

Hallo Markus,

so war das gemeint:

ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending,

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Daniel
Geschrieben am: 10.07.2018 17:54:00

Hi
beim einrichten der Sortierung muss man darauf achten, dass man vor jedem Zellbezug das Tabellenblatt mit angibt.
das ist wichtig, denn alle Zellen, die das Sortieren definieren, müssen logischerweise auf dem gleichen Tabellenblatt liegen.
Hierbei ist zu beachten, dass Zellbezüge ohne Tabellenblattangabe sich immer auf das gerade aktive Tabellenblatt beziehen.
dh dieser Code führt zu einem Fehler, wenn Tabelle1 nicht aktiv ist:

ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending,
weil der Recorder hier leider etwas nachlässig aufzeichnet (und er das Problem nicht hat, weil beim Aufzeichnen immer das richtige Blatt aktiv ist) muss man den Code nachbessern:
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
:=ActiveWorkbook.Worksheets("Tabelle1").Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending,
zusätzlich sollte man darauf schauen, dass der Key auch Teil des sortieren Bereichs ist.

Gruß Daniel


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 11.07.2018 10:28:24

Hallo, und Danke für Eure Rückmeldungen,

ich habe das mit der Sortierung versucht umzusetzen, aber die Fehlermeldung von Excel besteht nach wie vor, leider.
Ich habe die Range auf nur einen Zellbezug verändert, bis halt bei dem Set Range und das ActiveWorkbook.Worksheets("Tabelle1") überall vor dem Range mit angegeben auch unter nach dem .Set Range, dort musste ich ja den Bereich beibehalten damit er weiß von wo bis wo er sortieren soll.
Scheinbar lag es aber nicht an der Range und der aktiven Worksheetangabe.

Hier mein bisheriger abgeänderter Code:

Sub Sortierung
        ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
        :=ActiveWorkbook.Worksheets("Tabelle1").Range("Constance15"), SortOn:=xlSortOnValues,  _
Order:=xlAscending, _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key _
        :=ActiveWorkbook.Worksheets("Tabelle1").Range("Debie15"), SortOn:=xlSortOnValues, Order: _
=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tabelle1").Sort
        .SetRange ActiveWorkbook.Worksheets("Tabelle1").Range("Anne15:Olga398")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub



Was könnte es noch sein, was solch eine Fehlermeldung wie bereits erwähnt auslösen kann?




@ Daniel
Jetzt meine Frage, habe ich Dich richtig verstanden: Um nicht immer wieder das Selbe mit dem ActiveSheet [(ActiveWorkbook.Worksheets("Tabelle1")] einzufügen könnte ich auch davor dies schreiben und könnte mir das dann überall weiter unten sparen?
Worksheets("Tabelle1").Activate
Also das würde dann so aussehen:
Sub Sortierung
Worksheets("Tabelle1").Activate
        .Sort.SortFields.Clear
         .Sort.SortFields.Add Key _
        :=.Range("Constance15"), SortOn:=xlSortOnValues, Order:=xlAscending, _
...

gänge das? Also das ich das ActiveSheet am Anfang definiere und später dann in der Prozedure es  _
nicht wieder einfügen muss?

Beste Grüße

Markus



  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 11.07.2018 15:50:47

@ Nepumuk

Wollte heute den Button einbauen, jedoch kopiert er mir jetzt den falschen CommandButton.
Habe mehrere CommandButtons. Bei Dir steht immer nur noch CommandButton, aber keine Eindeutige Identifizierung dahinter. Ich weiß nun nicht ist es CommandButton1 oder CommandButton2 oder gar CommandButton6.
Daher habe ich mal in der Testmappe von Dir das mit noch einem Button machen wollen, jedoch sobald ich auf Einfügen gehe, sind die ganzen Klassen wieder zerstört, soll heißen beim Einfügen eines Active-X Buttons schaltet Excel wieder den Entwurfsmodus an. Das bewirkt dann wohl wieder das die Klassen wieder zerstört werden.
Nun frage ich mich wie ich den Button richtig identifizieren kann von den anderen CommandButtons und das wenn ich einen Button einfüge er mir nicht die Klasse des besonderen CommandButtons jetzt zerstört.

Könntest Du mal bitte einen weiteren Button in die Testmappe einbauen, damit ich sehe wie Du die dann unterscheidest und wie man einen Button einfügen kann der nicht gleich die ganze Klasse wieder zerstört.
Sobald man nämlich einen Button einfügt geht der Rechtsklick nicht mehr, der Tooltipp nicht mehr und die MsgBox funktioniert dann auch nicht mehr bei dem speziellen Button. Das liegt wohl daran, weil dies jetzt alles von der Klasse her gesteuert wird

Hoffe Du hast da noch eine Lösung für.

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 11.07.2018 16:01:10

Hallo Markus,

gib dem Button einen eindeutigen Namen.

Ich denke, du fügst CommandButtons nicht in der Produktivphase sondern in der Entwurfsphase ein. Da ist es doch egal ob die Klasse zerstört wird. Du startest einfach die Prozedur InitClass mit F5 und schon sind sie wieder da.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 11.07.2018 17:33:37

Hallo Nepumuk,

danke für Deine schnelle Antwort. :)

Ich habe jetzt den Button CommandButton0 genannt und in den Klassen, der Commandbar und dem CommandButton den Namen ersetzt. Es wird immer noch der falsche Button kopiert. Lösche ich den von der Ausgangstabelle, sucht er sich den nächsten der aber auch der Falsche ist und dann wieder der Falsche. Daher dachte ich, ich gebe ihm die Zahl 0, damit er ihn vor dem CommandButton1 sich holt, macht er aber auch nicht, da ich dachte das er vielleicht der Reihenfolge folgt. Aber nun habe ich den Eindruck das ihm die Zahlen egal sind, sondern er sich nach dem Erstellungsdatum der Buttons richtet.

Ja da hast Du recht, wenn man alles geschlossen wurde und der Button erstellt wurde und dann gespeichert und man wieder öffnet ist der Button da und die Klassen funktionieren wieder. :)


Soweit funktioniert er auch, nur diese Klasse bekomme ich nicht Exportiert, er exportiert die Module und Forms, aber wenn ich das selbe bei der Klasse nun anwende wird diese nicht in die neue Arbeitsmappe exportiert. Was seltsam ist da nach den Modulen ich die Forms auf die selbe Art wie halt die Module exportieren konnte und das funktionierte auf Anhieb. Bei den Klassen scheint es sich aber anders zu verhalten. Daher muss ich derzeit nach dem Export die Klasse immer händisch kopieren, was ich aber nur derzeit mache um zu sehen ob der Button korrekt angelegt wird und alle Eigenschaften aufweist. Die Eigenschaften stimmen, der Button an sich ist noch der Falsche.

Ich muss also noch den Export der Klasse funktionsfähig bekommen von einer Arbeitsmappe in die nächste und den richtigen Button ansprechen.
Derzeit versuche ich erstmal zu erreichen das er mir den richtigen Button kopiert, aber bisher weigert er sich behaarlich, leider.


Zu der Sortierung nochmal, an den Bereichen lag es nicht, ich hatte das ausprobiert und die Bereiche ersetzt, der Fehler nach dem Speichern von der Sortierung und wieder Öffnen des Dokumentes kommt immer noch. Siehe Post weiter oben. Hast da noch eine Idee zu was es noch sein könnte?

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 11.07.2018 17:54:59

Hallo Markus,

ich habe es dir mal eingebaut: https://www.herber.de/bbs/user/122625.xlsm

Module, UserForms und Klassenmodule kannst du im VBA-Editor über den Projektexplorer per Drag&Drop einfach von einer Mappe in die andere ziehen. Dazu braucht's kein Programm.

Kannst du mal die Mappe mit der Sortierroutine hochladen? Daten müssen keine drin sein, ich will nur die Namen prüfen und schauen was Excel da nicht mag.

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 12.07.2018 00:05:14

Hallo Nepumuk,

dankeschön für die Überarbeitung, nun kann ich mir den Button wählen mit entsprechenden Namen. :)

Zum Sortierungsproblem:
ich habe Dir mal eine Beispielmappe erstellt.
https://www.herber.de/bbs/user/122627.xlsm
Vorweg es ging nicht so wie gedacht: Sortieralgorithmus 1 geht gar nicht, aber die 2 geht zumindest ein wenig so das Du es dort sehen kannst. Wunder Dich nicht die Rücksortierung klappt auch nicht, warum weiß ich nicht, sonst geht sie aber, nur in der Beispielmappe wollte sie nicht.
Gehe bitte folgendermaßen vor:
Klicke auf Sortieralgorithmus 2
Er sortiert Dir zumindest die obersten Zugehörigen zusammen. Um den Fehler aber auszulösen reicht das schon.
Wähle dann "Speichern unter" nach dem Du die Sortierung mit dem Button getätigt hast, die Mappe wird unter anderem Namen gespeichert.
Schließe dann diese Mappe die Du neu erstellt hast wo drin sortiert ist.
Wenn Du die Mappe öffnen willst wo die Sortierung drin gespeichert ist, kommt wieder diese omniöse Fehler.
Wunder Dich nicht, im Sortieralgorithmus 2 sind noch die Bereiche, aber wie gesagt daran lag es nicht.


Zum CommandButton noch: ja jetzt gehts, ich hatte das mobjCommandButton_Click und das mobjCommandButton_MouseMove in der Klasse durch CommandButton0_Click und CommandButton0_Move ersetzt und das war wohl falsch. Wie ich sehe hast Du im Modul basCommandButton ein paar Zeilen eingefügt, wo der Name abgefragt werden kann und nicht in der Klasse. Ich habe jetzt lediglich den Aufruf der CreateCommandBar wieder reingenommen damit der Button wieder löschbar ist.

Wegen dem Export der Klasse: ja im Editor kann man das ziehen und kopieren, aber wenn der Ablauf beim Export gestartet ist, geht er in den Debugger weil er die Klasse nicht findet. Derzeit muss ich sie manuell hinzufügen, das die Klasse nicht wie die Module und Forms exportiert wird, bisher. Daran werde ich Morgen mich aber erst mal versuchen, das ich die noch exportiert bekomme.

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 13.07.2018 16:58:57

Hallo Nepumuk,

wie bereits erwähnt obendrüber, die Testdatei für die Sortierung ist hier:
(Vorgehen siehe weiter oben)
https://www.herber.de/bbs/user/122627.xlsm

Das mit dem Button habe ich hinbekommen auch mit der Klasse das diese mit exportiert wird.
Das Sortieren hat halt noch diese unschöne Fehlermeldung. Weist Du schon woran es liegt?





@ Daniel
Habe mal das mit den Grafikelementen nachvollzogen, es funktioniert gut, aber der eine Befehl geht bei mir nicht:
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Worksheet

Bekomme da kein Tabellenblatt in dem das Sheet liegt sondern eine Fehlermeldung:
Objekt unterstützt Eigenschaften oder Methode nicht.

Es liegt am letzten Wort Worksheet. Ebenso geht nicht .Caption, .Name
immer der Selbe Fehler, weist Du warum, was mache ich da falsch?

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 14.07.2018 13:06:51

Hallo Markus,

du hast bis auf die Prozedur "Sortierung" immer noch Bereiche und keine einzelnen Zellen als Key. Und das meckert Excel beim Öffnen an.

ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add(Range( _
"Constance15:Constance398")
, xlSortOnCellColor, xlAscending, , _
xlSortNormal).SortOnValue.Color = RGB(197, 217, 241)

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 16.07.2018 13:15:30

Hallo Nepumuk,

erstmal vielen Dank für Deine Antwort,

ja das schrieb ich ja, das bei der "Sortierung" die Bereiche raus sind, sie funktioniert aber nun auch nicht mehr. Bei der "Sortierung2" mit Bereichen sortiert er, aber dort sind halt die Bereiche auch noch vorhanden.
Ohne die Bereiche sortiert er ja gar nicht mehr bei mir.
Er braucht das doch um zu wissen von wo bis wo er sortieren soll und was genau zusammengehört?

Beste Grüße

Markus


  

Betrifft: AW: Kopieren von einem CommandButton von: Nepumuk
Geschrieben am: 16.07.2018 15:32:30

Hallo Markus,

sortiere nach folgenden Beispiel. Ich hab dir die Parameter alle benannt damit du siehst wo was hingehört.

Public Sub Beispiel()
    
    With ThisWorkbook.Worksheets("Tabelle1").Sort
        
        .SortFields.Clear
        
        .SortFields.Add(Key:=Range("A1"), SortOn:=xlSortOnCellColor, Order:=xlAscending, _
            DataOption:=xlSortNormal).SortOnValue.Color = RGB(221, 235, 247)
        
        Call .SetRange(Rng:=Range("A1:A6"))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        Call .Apply
        
    End With
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Kopieren von einem CommandButton von: Markus
Geschrieben am: 17.07.2018 12:45:48

Danke Nepumuk, :)

ich werde das mal ausgiebig ausprobieren und austesten.

Melde mich dann wieder wenn ich soweit bin, aber bis hierhin erstmal vielen Dank für Deine ganzen guten Ratschläge und den speziellen CommandButton. :)

Beste Grüße

Markus


Beiträge aus dem Excel-Forum zum Thema "Kopieren von einem CommandButton"