Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Command-Button sich selbst kopieren lassen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Command-Button sich selbst kopieren lassen (530 mal gelesen)
Yavis
Mitglied


Sehen Sie sich das Profil von Yavis an!   Senden Sie eine Private Message an Yavis  Schreiben Sie einen Gästebucheintrag für Yavis

Beiträge: 9
Registriert: 22.01.2019

erstellt am: 22. Jan. 2019 17:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich bin absoluter VBA-Neuling und habe folgende Frage:

Ist es möglich, dass sich ein CommandButton selbst verschieben kann? Und wenn ja, wie?

Ich benötige das für folgende Anwendung:

Per Klick auf den Button soll ein Bereich in der Exceltabelle nach oben kopiert werden. Es geht dabei darum, eine Tabelle als Vorlage zu benutzen, die jeden Tag neu ausgefüllt werden soll und die alte, bereits ausgefüllte Tabelle zu erhalten. Die Vorlage soll dabei an oberste Stelle in der Arbeitsmappe kopiert werden, so dass die aktuellste Tabelle immer oben ist und die anderen Tabellen nach unten hin älter werden.

Diesen Vorgang habe ich auch durch "Makro aufzeichnen" erreicht:

Private Sub CommandButton1_Click()

Rows("1:32").Select
Range("A32").Activate
Selection.Copy
Selection.Insert Shift:=xlDown

End Sub


Jetzt soll auch noch der Button, mit dem ich diesen Kopier-Befehl ausführe, mit der kopierten Tabelle nach oben wandern. Ist das mit VBA möglich oder muss ich dazu einen anderen Weg gehen?

Vielen Dank schon einmal im Voraus.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2896
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 22. Jan. 2019 18:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Yavis 10 Unities + Antwort hilfreich

RMT CB Eigenschaften

Das Attribut Top ist hier wichtig, das definiert den Abstand von oben.

HTH

Code:
Private Sub CommandButton1_Click()
Rows("1:32").Select
Range("A32").Activate
Selection.Copy
Selection.Insert Shift:=xlDown
CommandButton1.Top = 10
End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 384
Registriert: 11.08.2007

erstellt am: 23. Jan. 2019 08:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Yavis 10 Unities + Antwort hilfreich

Hi,

in VBA kann man zu 99% aller Fälle auf Select/Activate verzichten:

Code:
Private Sub CommandButton1_Click()
    Dim dblTop As Double
    dblTop = CommandButton1.Top
    Rows("1:32").Copy
    Rows("1:32").Insert Shift:=xlDown
    CommandButton1.Top = dblTop
    Application.CutCopyMode = False
End Sub


Du kannst auch die Oberkante einer Zeile verwenden

Code:
Private Sub CommandButton1_Click()
    Rows("1:32").Copy
    Rows("1:32").Insert Shift:=xlDown
    CommandButton1.Top = Rows(2).Top
    Application.CutCopyMode = False
End Sub


------------------
Bis später,
Karin

[Diese Nachricht wurde von Beverly am 23. Jan. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Yavis
Mitglied


Sehen Sie sich das Profil von Yavis an!   Senden Sie eine Private Message an Yavis  Schreiben Sie einen Gästebucheintrag für Yavis

Beiträge: 9
Registriert: 22.01.2019

erstellt am: 23. Jan. 2019 12:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank schon mal für die Antworten. Ich werde das mal ausprobieren. Durch weiteres Suchen im Netz habe ich folgende Lösung gefunden, mit der ich auch schon sehr zufrieden bin:

ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
ActiveSheet.Shapes("CommandButton1").IncrementLeft 0
ActiveSheet.Shapes("CommandButton1").IncrementTop -494.5

Ich habe allerdings auch schon die nächste Frage:

Bei jedem Klick auf den Button soll auch das Datum in der Tabelle aktualisiert werden. Dafür habe ich folgenden Befehl gefunden:

Range("A1").Value = Now()

Auch das funktioniert schon gut, ich hätte aber auch gerne noch den aktuellen Wochentag dahinter, also z.B.: Mittwoch, 23.01.2019

Gibt es auch dafür eine Möglichkeit, das so in einer Zelle wiederzugeben?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 384
Registriert: 11.08.2007

erstellt am: 23. Jan. 2019 14:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Yavis 10 Unities + Antwort hilfreich

Hi,

dein Code aus dem Internet beinhaltet wiederum .Select - was Quatsch ist, wie ich bereits geschrieben habe, denn der Cursor ist kein Hund, der auf dem Tabellenblatt Spazieren geführt werden muss...  

Zu deinem anderen Problem:

Code:
    Range("A1") = Date
    Range("A1").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

Die Funktion Now beinhaltet Datum und Uhrzeit - da du jedoch nur das Datum wünschst, geht es mit Date (=Datum). Allerdings muss die Zelle noch entsprechend formatiert werden, da du ein benutzerdefiniertes Format der Form "Wochentag, 23.01.2019" verwenden willst. Das kannst du einmalig von Hand ausführen oder in den Code einbinden, was durch die 2. Codezeile realisiert ist. Letzteres muss aber nicht sein, da die Zelle sonst unnötigerweise jedesmal formatiert wird - du kannst diese Zeile also weglassen, wenn du die Zelle 1mal entsprechend formatiert hast.

------------------
Bis später,
Karin

[Diese Nachricht wurde von Beverly am 23. Jan. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Yavis
Mitglied


Sehen Sie sich das Profil von Yavis an!   Senden Sie eine Private Message an Yavis  Schreiben Sie einen Gästebucheintrag für Yavis

Beiträge: 9
Registriert: 22.01.2019

erstellt am: 04. Feb. 2019 17:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Karin,

einen riesigen Dank für Deine Hilfe.

Es entwickelt sich langsam in die richtige Richtung.

Je nachdem habe ich jetzt ein oder zwei weitere Fragen:

Und zwar habe ich in der Tabelle eine fortlaufende Reihe mit sieben Zellen mit den Wochentagen. Im Idealfall soll es so sein, dass basierend auf dem Datum aus deinem vorherigen Code diese Reihe aktualisiert wird und zwar mit dem aktuellen Tag und den sechs darauf folgenden Tagen. Das Format soll dabei nur zwei Stellen haben, also "Mo", "Di", "Mi", usw.

Ich hoffe, ich konnte das verständlich beschreiben.

Die zweite Frage - falls Du für die auch noch Zeit und Muße hast  - ist wohl leichter zu beschreiben: Wie kann ich mit einem Click auf einem Button in Tabellenblatt1 einen Bereich in Tabellenblatt2 kopieren?

Großen Dank schon einmal im Voraus.

Viele Grüße,

Robert

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Yavis
Mitglied


Sehen Sie sich das Profil von Yavis an!   Senden Sie eine Private Message an Yavis  Schreiben Sie einen Gästebucheintrag für Yavis

Beiträge: 9
Registriert: 22.01.2019

erstellt am: 05. Feb. 2019 11:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe mich durchs Netz gewühlt und für beide Fragen Antworten gefunden.

Das mit dem Datum habe ich gelöst, indem ich pro Zelle einen Verweis auf die Zelle mit dem aktuellen Datum eingetragen und das Format angepasst habe. Klappt auch gut, vielleicht hat ja jemand noch einen Tip, wie es besser geht.

Für die andere Frage habe ich jetzt auch einen Code gefunden und der funktioniert auch gut.

Jetzt ist meine nächste Frage, ob man das bisherige Makro noch verbessern/verschlanken kann:

Private Sub CommandButton1_Click()

Rows("1:32").Copy
Range("1:32").Insert Shift:=xlDown
Application.CutCopyMode = False

CommandButton1.Top = 36

Range("A1") = Date
Range("A1").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

Sheets("G3").Rows("3:10").Copy
Sheets("G3").Range("3:10").Insert Shift:=xlDown
Application.CutCopyMode = False

Sheets("G3").Range("A3") = Date
Sheets("G3").Range("A3").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

Sheets("G31").Rows("3:10").Copy
Sheets("G31").Range("3:10").Insert Shift:=xlDown
Application.CutCopyMode = False

Sheets("G31").Range("A3") = Date
Sheets("G31").Range("A3").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

Sheets("G33").Rows("3:10").Copy
Sheets("G33").Range("3:10").Insert Shift:=xlDown
Application.CutCopyMode = False

Sheets("G33").Range("A3") = Date
Sheets("G33").Range("A3").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

Sheets("G34").Rows("3:10").Copy
Sheets("G34").Range("3:10").Insert Shift:=xlDown
Application.CutCopyMode = False

Sheets("G34").Range("A3") = Date
Sheets("G34").Range("A3").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

Sheets("G37").Rows("3:10").Copy
Sheets("G37").Range("3:10").Insert Shift:=xlDown
Application.CutCopyMode = False

Sheets("G37").Range("A3") = Date
Sheets("G37").Range("A3").NumberFormat = "dddd" & ", " & "dd.mm.yyyy"

End Sub

Vielen Dank im Voraus!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz