Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Hilfe zur Dropdown Liste
#11
(14.02.2015, 06:32)WillWissen schrieb: Hi Emre,

Zitat:Hättest du vielleicht eine Seite für mich um ein wenig meine VBA Kenntnisse zu verbessern ?

Hier! ;)

Im Ernst, es hilft meistens nur nach dem Problem googeln (z.B. hier) oder sich hier von den VBA-Spezis helfen lassen und zu versuchen, die Codes zu verstehen.

Das Farbige sind anklickbare Links!

Hallo WillWissen,

gegoogelt habe ich das schon und auch eine große Anzahl von Seiten gefunden! Ich dachte halt nur, dass Schauan vielleicht eine empfehlenswerte Seite hat.
Trotzdem danke :19:
Antworten Top
#12
Hallo Emre,

ich bin zwar auch nicht André, aber schaue z.B:

http://www.online-excel.de/excel/grusel_vba.php?f=1

http://de.wikibooks.org/wiki/VBA_in_Excel

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Emre
Antworten Top
#13
(13.02.2015, 20:42)schauan schrieb: Hallo Emre,

Du kannst diesen code in das Modul DieseArbeitsmappe einfügen. Wie das Makro funktioniert, hab ich kommentiert. Das ist jetzt erst mal der Teil mit dem Leeren der Zellen. Jetzt wäre noch die Frage, wo denn die Daten sind, damit man sie wieder einfügen kann, wenn ein bereits verwendeter Monat nochmal gewählt wird. Ich nehme mal an, dass Du dafür auch noch ein Makro brauchst. In der bereitgestellten Musterdatei war keins.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
If Left(Sh.Name, 4) = "TEST" And Target.Address = "$C$1" Then
  'Auf dem Blatt den Bereich C6:E36 leeren
  'Hinweis: ggf. Sicherheitsabfrage einabuen!
  Sh.Range("C6:E36").ClearContents
'Ende Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
End If
End Sub

Guten Abend Schauan,

ich versuche vergebens noch eine Sicherheitsabfrage einzubauen..
Diese solle so funktionieren, dass wenn ich diese bestätige der Befehl ausgeführt wird aber wenn ich auf "Nein" drücke der Befehl abgebrochen wird und auch dieser Monat bestehen bleibt, sprich nicht auf den nächsten Monat wechselt und auch nicht die Stunden löscht.

Sub Zeile_Loeschen()
If MsgBox("Sind sie sicher?", vbYesNoCancel, "Zeilen Löschen") = vbYes Then
Selection.EntireRow.Delete
End If
End Sub
Antworten Top
#14
(15.02.2015, 00:43)Kuwer schrieb: Hallo Emre,

ich bin zwar auch nicht André, aber schaue z.B:

http://www.online-excel.de/excel/grusel_vba.php?f=1

http://de.wikibooks.org/wiki/VBA_in_Excel

Gruß Uwe

Guten Abend Kuwer,

danke dir und danke auch den anderen für eure Unterstützung :25:
Werde mir mal die Zeit nehmen und mir das alles durchlesen!
Antworten Top
#15
Hallo Emre,

die Abfrage muss mit in das Makro eingebaut werden. Beim jetzigen Stand kann man erst mal nur verhindern, dass die Daten gelöscht werden. Der Eintrag des neuen Monats bleibt.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
If Left(Sh.Name, 4) = "TEST" And Target.Address = "$C$1" Then
  'Sicherheitsabfrage!
  If MsgBox("Sollen die Daten entfernt werden?", vbYesNo, "Zeilen Löschen") = vbYes Then
    'Auf dem Blatt den Bereich C6:E36 leeren
    Sh.Range("C6:E36").ClearContents
  'Ende Sicherheitsabfrage!
  End If
'Ende Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
End If
End Sub

Um zu erreichen, dass der Monatseintrag bleibt, muss sich Excel irgendwo den "alten" Monat merken. Dafür gäbe es z.B. zwei Wege
- Speicherung des Monatseintrages beim Öffnen der Mappe und beim Aktivieren des Blattes sowie beim Wechsel, wenn nicht abgebrochen wird, in einer Variable
oder
- Speicherung des Monatseintrages beim Wechsel, wenn nicht abgebrochen wird, in einer Zelle.

Den zweiten Weg fände ich sicherer, da in einigen Fällen die Variable ungewollt geleert werden kann. Dafür müsstest Du eine Zelle vorsehen.

Ich habe den Eintrag hier mal nach B1 gelegt.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
If Left(Sh.Name, 4) = "TEST" And Target.Address = "$C$1" Then
  'Sicherheitsabfrage!
  If MsgBox("Sollen die Daten entfernt werden?", vbYesNo, "Zeilen Löschen") = vbYes Then
    'Auf dem Blatt den Bereich C6:E36 leeren
    Sh.Range("C6:E36").ClearContents
    'Monat aus C1 nach B1 uebertragen
    Sh.Cells(1, 2).Value = Cells(1, 3).Value
  'Sicherheitsabfrage! Falls nein
  Else
    'Event-Aktionen ausschalten
    Application.EnableEvents = False
    'Monat aus B1 nach C1 uebertragen
    Sh.Cells(1, 3).Value = Cells(1, 2).Value
    'Event-Aktionen einschalten
    Application.EnableEvents = True
  'Ende Sicherheitsabfrage!
  End If
'Ende Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
End If
End Sub

Du wolltest bei Auswahl eines anderen Monats aber auch noch die Daten wiederherstellen, falls es da schon welche gibt? Wie in einem anderen Post schon gesagt, da müssen die auch irgendwo gesichert werden. Und dann hast Du noch das Problem, dass Deine Formeln auf dem Blatt Stundenerfassung in jedem Monat an die gleiche Stelle gehen, du hättest also von Januar bis Dezember die gleichen Werte.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Emre
Antworten Top
#16
(15.02.2015, 06:50)schauan schrieb: Hallo Emre,

die Abfrage muss mit in das Makro eingebaut werden. Beim jetzigen Stand kann man erst mal nur verhindern, dass die Daten gelöscht werden. Der Eintrag des neuen Monats bleibt.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
If Left(Sh.Name, 4) = "TEST" And Target.Address = "$C$1" Then
  'Sicherheitsabfrage!
  If MsgBox("Sollen die Daten entfernt werden?", vbYesNo, "Zeilen Löschen") = vbYes Then
    'Auf dem Blatt den Bereich C6:E36 leeren
    Sh.Range("C6:E36").ClearContents
  'Ende Sicherheitsabfrage!
  End If
'Ende Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
End If
End Sub

Um zu erreichen, dass der Monatseintrag bleibt, muss sich Excel irgendwo den "alten" Monat merken. Dafür gäbe es z.B. zwei Wege
- Speicherung des Monatseintrages beim Öffnen der Mappe und beim Aktivieren des Blattes sowie beim Wechsel, wenn nicht abgebrochen wird, in einer Variable
oder
- Speicherung des Monatseintrages beim Wechsel, wenn nicht abgebrochen wird, in einer Zelle.

Den zweiten Weg fände ich sicherer, da in einigen Fällen die Variable ungewollt geleert werden kann. Dafür müsstest Du eine Zelle vorsehen.

Ich habe den Eintrag hier mal nach B1 gelegt.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
If Left(Sh.Name, 4) = "TEST" And Target.Address = "$C$1" Then
  'Sicherheitsabfrage!
  If MsgBox("Sollen die Daten entfernt werden?", vbYesNo, "Zeilen Löschen") = vbYes Then
    'Auf dem Blatt den Bereich C6:E36 leeren
    Sh.Range("C6:E36").ClearContents
    'Monat aus C1 nach B1 uebertragen
    Sh.Cells(1, 2).Value = Cells(1, 3).Value
  'Sicherheitsabfrage! Falls nein
  Else
    'Event-Aktionen ausschalten
    Application.EnableEvents = False
    'Monat aus B1 nach C1 uebertragen
    Sh.Cells(1, 3).Value = Cells(1, 2).Value
    'Event-Aktionen einschalten
    Application.EnableEvents = True
  'Ende Sicherheitsabfrage!
  End If
'Ende Wenn die ersten 4 Zeichen des Blattes TEST sind
'und die geänderte Zelle C1, dann
End If
End Sub

Du wolltest bei Auswahl eines anderen Monats aber auch noch die Daten wiederherstellen, falls es da schon welche gibt? Wie in einem anderen Post schon gesagt, da müssen die auch irgendwo gesichert werden. Und dann hast Du noch das Problem, dass Deine Formeln auf dem Blatt Stundenerfassung in jedem Monat an die gleiche Stelle gehen, du hättest also von Januar bis Dezember die gleichen Werte.

Hallo André,

ich werde das dann jetzt so behalten. Danke hast mir sehr geholfen.
Ich hätte nur noch eine Frage! Es werden ja nicht nur 2 Arbeitsblätter mit "Test" geben sondern deutlich mehr, mit unterschiedlichen Namen. Wie müsste ich denn die Zeile anpassen ?
If Left(Sh.Name, 4) = "TEST" And Target.Address = "$C$1"

Außerdem hat jetzt jeder Mitarbeiter seine "eigene" Dropdown-Liste und es wird nicht mehr vom 1ten Arbeitsblatt übernommen, damit man bei jeden Arbeiter individuell jeden gewünschten Monat ändern kann.

P.S. Hab mir schon ein wenig VBA angeguckt und es sieht nach ganz viel arbeit aus! Whistle
Antworten Top
#17
Hallo Emre,

Wenn Du bei den Blattnamen irgendwas einheitliches und eindeutiges vorne dran stellst, ist die Programmierung am Einfachsten. Wenn das z.B. als Abkürzung für was passendes durchgeht, noch besser, z.B. EAT für Excel-AnwesenheitsTabelle - allerdings könnte dann die Frage kommen, wer wen fressen will Wink Bei "EAT" müsstest Du dann übrigens , 3 programmieren und nicht , 4, oder Du nimmst "EAT "

Ansonsten müsstest Du das If mit Or erweiteren und die jeweils kompletten Blattnamen programmieren, also z.B.
Code:
If sh.Name = "Schulze" Or sh.Name = "Meier" Or ... Then
Damit eine Zeile beim Programmieren nicht so lang wird, kann man sie auch mit _ in die nächste Zeile erweitern, z.B.
Code:
If sh.Name = "Schulze" Or _
   sh.Name = "Meier" Or _
   ... Then
(da gibt's aber auch Grenzen)

Alternativ wäre im Programm ein Array oder auf einem Blatt eine Liste möglich, wo Du alle Blattnamen einträgst und welche das Makro dann durchgeht und mit dem aktiven Blattnamen vergleicht.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
(16.02.2015, 18:40)schauan schrieb: Hallo Emre,

Wenn Du bei den Blattnamen irgendwas einheitliches und eindeutiges vorne dran stellst, ist die Programmierung am Einfachsten. Wenn das z.B. als Abkürzung für was passendes durchgeht, noch besser, z.B. EAT für Excel-AnwesenheitsTabelle - allerdings könnte dann die Frage kommen, wer wen fressen will Wink Bei "EAT" müsstest Du dann übrigens , 3 programmieren und nicht , 4, oder Du nimmst "EAT "

Ansonsten müsstest Du das If mit Or erweiteren und die jeweils kompletten Blattnamen programmieren, also z.B.
Code:
If sh.Name = "Schulze" Or sh.Name = "Meier" Or ... Then
Damit eine Zeile beim Programmieren nicht so lang wird, kann man sie auch mit _ in die nächste Zeile erweitern, z.B.
Code:
If sh.Name = "Schulze" Or _
   sh.Name = "Meier" Or _
   ... Then
(da gibt's aber auch Grenzen)

Alternativ wäre im Programm ein Array oder auf einem Blatt eine Liste möglich, wo Du alle Blattnamen einträgst und welche das Makro dann durchgeht und mit dem aktiven Blattnamen vergleicht.

Ich hatte es auch einheitlich, hab davor MA ( Mitarbeiter) geschrieben und hat auch so funktioniert, aber wollte dort eigentlich nur den Namen stehen haben, aber dies ist mir dann doch zu umständlich. Dann lasse ich es.
Danke für deine Hilfe:28:
Antworten Top
#19
Hallo,

nachdem das eigentliche Thema gelöst wurde noch eine kleine Anmerkung:

Es ist normalerweise nicht notwendig den kompletten Beitrag des Vorposters zu zitieren - das macht das Ganze eher unübersichtlich.
Gruß
Peter
Antworten Top
#20
Hallo Peter,

werde ich mir in Zukunft merken :19:
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste