Excel VBA Userform daten in 2 Tabellen einfügen und Löschen

Hallo Zusammen

habe mir eine Adressverwaltung die ich im Internet gefunden habe für meine zwecke umgebaut. Die ist VBA basiert und daten werden über ein UserForm eingegeben und gelöscht.

meine Fragen ich...

1.)... habe mehrer tabellen Blätter habe es auch hinbekommen das das UserForm mir die Namen mit in das 2te tabellenblatt einfügt über diesen Code

With Worksheets("Anwesenheitsliste")

' Datensatz neu speichern

letzteZeile = .Range("A65536").End(xlUp).Offset(1, 0).Row .Cells(letzteZeile, 1) = .Cells(letzteZeile - 1, 1) + 1 .Cells(letzteZeile, 3) = TextBox1.Text .Cells(letzte_Zeile, 2) = ComboBox1.Text

End With

So wird das auch von dem original gemacht

jetzt hätte ich aber auch gerne das wenn ich auf "Datensatz löschen" drücke die namen aus dem tabellenblatt auch wieder raus gelöscht werden bei dem originalen klappt das über diesen Code

If ComboBox1.Text = "" Then MsgBox "Keine Daten zum Löschen verfügbar !" Exit Sub Else

'Datensatz löschen

letzte_Zeile = Worksheets("Adressenliste").Range("A65536").End(xlUp).Row

If Not rngID Is Nothing Then a = rngID + 1 Else a = Range(rngFind.Address).Row End If

If MsgBox(" Datensatz wirklich löschen ?", vbYesNo) = vbNo Then Exit Sub Else Range(Cells(a, "B"), Cells(a, "T")).Delete shift:=xlShiftUp Cells(letzte_Zeile, "A").ClearContents

End If

End If

ClearAll
UserForm_Initialize
ComboBox1.SetFocus

End Sub

kriege es aber leider nicht hin diesen Code so zu ändern das die Daten beim klicken auf "Datensatz Löschen" mit aus der Tabelle2 gelöscht werden bitte um hielfe

  1. kann man einen Button in dem UserForm zeitlich begernzen z.B. das man daten nur vom 1.12 - 31.1 löschen kann?

    würde mich über Hilfe freuen

    gruß Kai

...zum Beitrag

Hallo Kai,

mir fällt an deinem Code zum Löschen zunächst nur auf, dass - im Gegensatz zu dem fürs Eintragen - keine Tabelle festgelegt wird, in der die folgenden Anweisungen ausgeführt werden sollen. Wenn das wirklich so ist (die Originaldatei habe ich mir aus Zeitgründen noch nicht heruntergeladen und angesehen), wird der Code automatisch in der Tabelle ausgeführt, die gerade aktiv ist, und dann ist Schluss.

Wenn du den selben Code auch in einem zweiten Arbeitsblatt ausführen willst, musst du dieses explizit nennen (z.B. mit der Anweisung With Worksheet("Tabellenname")), also analog zum Code fürs Einfügen.

Letztlich müsstest du den Code also zwei Mal hintereinander schreiben, nur mit den entsprechend angepassten Tabellenblatt-Namen.

Eleganter wäre es natürlich, diesen Code in ein separates Makro zu legen, das z.B. LöschenDatensatz heißt, und dieses von einem anderen Makro aus zwei mal aufzurufen. Dabei müsste der jeweilige Tabellenname als Variable mit übergeben werden, also z.B. mit der Anweisung Call LöschenDatensatz("Anwesenheitsliste").

Genauer will ich jetzt hier nicht einsteigen und hoffe, du kannst mit diesen Hinweisen etwas anfangen. Einige VBA-Erfahrung hast du ja anscheinend schon. Aber gleich ob's klappt oder noch nicht, deine Rückmeldung würde mich sehr interessieren.

Viele Grüße

richtoldi

...zur Antwort

Wie Oubyi schon schrieb, ist die Autokorrekturfunktion von Office dafür zuständig. Du musst die allerdings gar nicht unbedingt abschalten, denn Excel behandelt diese Änderungen so, als hättest du sie selber vorgenommen - mit anderen Worten, du kannst sie im Einzelfall rückgängig machen, wenn du diese Autokorrektur ansonsten hilfreich findest.

Am Beispiel USt: Du gibst diese 3 Buchstaben genau so ein. Sobald du dahinter ein Leerzeichen eintippst, macht Excel daraus Ust - und als nächstes klickst du auf "Rückgängig", oder du drückst die Tastenkombination Strg+Z. Schon steht wieder USt da. :)

Leider funktioniert das nicht, wenn du nach der Eingabe von USt direkt die Zelle verlässt - dann bezieht sich das Rückgängigmachen auf die komplette Änderung der Zelle :(

...zur Antwort

Hier sind offenbar zwei Excel-Funktionen durcheinander geraten. Die Funktion, die du hier brauchst, heißt nicht ZÄHLENWENN, sondern einfach WENN - komplett also:

=WENN(Tabelle1!D4=6;1;0)

(Die Funktion ZÄHLENWENN ist für ganz andere Zusammenhänge gedacht, sie zählt z.B. in einer Spalte alle Zellen, die einen bestimmten Wert enthalten.)

Viel Erfolg beim Excel-Lernen (was ungeheuer Spaß machen kann!) wünscht

richtoldi

...zur Antwort

Such mal unter C:\Windows.old\Program Files (x86)\Microsoft Office\Office14 nach der Datei EXCEL.EXE. Wenn es diese Ordner gibt und die Datei dort liegt, klickst du mit der rechten Maustaste darauf, zeigst dann mit der Maus auf "Senden an" und klickst im Untermenü auf "Desktop (Verknüpfung erstellen)". Mit Hilfe dieser Verknüpfung auf dem Desktop versuchst du dann Excel zu starten.

Es würde mich sehr interessieren, ob das funktioniert, denn evtl. werde ich selbst auch bald nach Win8 upgraden.

Viel Erfolg wünscht

richtoldi

...zur Antwort

So wie die Frage gestellt ist, lässt sie sich nicht gut beantworten. Konkrete Hilfe setzt voraus, dass du die Aufgabe möglichst konkret beschreibst. Am besten wäre ein Screenshot (Bildschirmfoto) von der zugrundeliegenden Tabelle mit den Werten, die in dem Diagramm dargestellt werden sollen, und von deinem bisherigen Lösungsversuch (soweit vorhanden). Dann kann dir hier vielleicht jemand weiterhelfen.

...zur Antwort

Das Problem: Wenn du nach Mitternacht ins Bett gehst, gehört schon das Datum des nächsten Tages dazu. Eigentlich müsste die Zubettgehzeit also eine Zeile tiefer eingetragen werden, aber das würde wiederum nicht gehen, wenn du am selben Tag vor Mitternacht wieder schlafen gehst.

Also ist es sinnvoller, du trägst das Datum nicht in eine separate Spalte ein, sondern mit der Uhrzeit zusammen in die jeweilige Zelle. Die Differenz ist dann in jedem Fall die korrekte Schlafzeit.

Für die Schlafzeit solltest du allerdings ein separates Diagramm anlegen, weil es sich hier ja nicht um eine Uhrzeit, sondern um eine Zeitspanne handelt, die sich allerdings im Wert teilweise mit der Aufwachzeit überschneidet.

Bei der Darstellung der Einschlafzeit im Diagramn ist das Hauptproblem, dass der Wert mal kleiner, mal größer als 0 Uhr ist. Damit Excel damit umgehen kann, musst du in den Optionen die "1904-Datumswerte" auswählen. Dann lässt sich das Ganze so darstellen wie in den angefügten Screenshots.

Die Formel in D4 (Abbildung mit Tabelle) kannst du dann so in die übrigen Zellen in Spalte D und E kopieren.

Falls du noch Fragen zu den Formeln oder Diagrammen hast, beantworte ich sie gerne. Ansonsten gutes Gelingen und schlaf gut ;-)

...zur Antwort

Hallo Richard,

ich habe zwar nichts, was ich dir kostenfrei zur Verfügung stellen könnte (weil solche Unterlagen entweder sehr spezifisch auf eine Zielgruppe bezogen sind oder dem Copyright unterliegen). Aber ich finde die Lehr- und Übungsunterlagen vom Bildner Verlag sehr gut, und sie sind nicht teuer. Außerdem hast du als Kunde dort die Möglichkeit, Beispiel- und Übungsdateien zu dem jeweiligen Buch herunterzuladen, die Teilnehmer müssen sie also nicht selbst eintippen (und du natürlich auch nicht).

Vielleicht kannst du ja damit auch etwas anfangen. Die Internetadresse findest du in jeder Suchmaschine.

Viel Erfolg bei der Schulung!

...zur Antwort

Die Methode von CholoAleman nutze ich auch gerne, sowohl für mich selbst als auch, wenn ich in Schulungen verschachtelte Funktionen erklären will.

Hier noch eine kleine Ergänzung:

Man kann sich (am einfachsten in der Bearbeitungsleiste) die Teilergebnisse verschachtelter Funktionen anzeigen lassen und so testen, ob die Formel das Gewünschte tut, bzw. an welcher Stelle sie es nicht tut. Ein Beispiel: In Zelle A1 steht das aktuelle Datum und in A3 die Formel

=WENN(WOCHENTAG(A1;2)<=6;"Werktag";"Wochenende")

Um zu sehen, welchen Wert die innere Funktion WOCHENTAG zurückgibt, markierst du nur diese Funktion, also WOCHENTAG(A1;2) und drückst dann die Funktionstaste F9. Nun zeigt Excel an dieser Stelle das (aktuelle) Ergebnis. Auf diese Weise kannst du auch bei komplizierteren Formeln nach und nach alle Berechnungen "von innen nach außen" überprüfen.

Wichtig: Wenn du mit der Zelle fertig bist oder Änderungen an der Formel vornehmen willst, musst du zuerst die ESC-Taste drücken, um die Berechnungen wieder rückgängig zu machen. Sonst würde statt der Funktionen das berechnete Ergebnis fixiert. (Oder du benutzt zunächst die Rückgängig-Funktion.)

...zur Antwort

In welchem Format speicherst du deine Excel-Dateien ab, und auf welche Weise versuchst du sie zu öffnen?

Speichern: Versuche mal, was passiert, wenn du die Dateien im alten xls-Format (Excel97-2003) speicherst.

Öffnen: Was geschieht, wenn du erst Excel startest und dann die Datei über "Datei" - "Öffnen" zu öffnen versuchst?

...zur Antwort

Es scheint so, als ob das Wiederherstellungsprogramm von O&O die Datei nicht mehr rekonstruieren konnte. Diese Software kann ja nur Dateien retten, die zwar (aus dem Festplatten-Inhaltsverzeichnis, TOC genannt) gelöscht wurden, aber noch immer an der ursprünglichen Stelle vollständig vorhanden sind. Weil sie aber im TOC nicht mehr auftauchen, werden sie irgendwann beim Speichern einer anderen Datei mal überschrieben, vielleicht auch nur teilweise. Dann klappt die Wiederherstellung natürlich nicht mehr.

Es sieht also so aus, als wäre die Datei in der zuletzt gespeicherten Fassung nicht mehr wiederherstellbar. Bestenfalls hast du eine Backup-Software installiert (oder du nutzt die entsprechende Funktion von Windows) und hast in den letzten Tagen oder Wochen noch ein Backup von der Datei machen lassen. Dann hättest du immerhin noch eine ältere Version davon. Eine andere Lösung wüsste ich nicht.

Tut mir leid, aber ich kann dir nur den Tipp geben, so bald wie möglich regelmäßig Sicherungen von deinen Dateien anzulegen, damit dir so etwas nicht öfter passiert.

...zur Antwort

Deine zweite Frage ist vielleicht noch nicht abschließend beantwortet. Wenn du auf mehreren Tabellenblättern automatisch in der gleichen Zelle die aufeinander folgenden Monatsnamen stehen haben möchtest (nicht in mehreren Zellen eines Blattes nebeneinander), kannst du auch so vorgehen:

  1. Auf dem zweiten Tabellenblatt, ich nenne es mal "Monat2", schreibst du in Zelle A1 die Formel =TEXT(EDATUM(DATWERT("1."&Monat1!$A$1&"1900");1);"MMMM"), wobei Monat1 der Name der ersten Tabellenblattes sein soll und der Monatsname dort ebenfalls in Zelle A1 angenommen wird.
  2. Du kopierst diese Formel in die Zelle A1 des dritten Blattes und änderst anschließend darin nur "Monat1" in "Monat2".
  3. In der gleichen Weise überträgst du die Formel auf die übrigen 9 Blätter.

Diese Formel erzeugt den Monatsnamen des Folgemonats jeweils als Text (unabhängig von der Formatierung der Zelle) und funktioniert auch, wenn du auf dem ersten Blatt in A1 einen anderen Monat als Januar eingibst.

Diese Vorgehensweise hat nur einen Nachteil: Wenn du mit den Werten aus A1 weiterrechnen willst (z.B. um in A3 den Monatsersten darzustellen), wird das etwas umständlicher als bei der Verwendung von Zahlen, die durch Zellformatierung (benutzerdefiniert: "MMMM") nur als Text angezeigt werden. Und das aktuelle Jahr wird dabei auch nicht berücksichtigt. Aber vielleicht brauchst du das ja auch gar nicht ...

Viel Erfolg beim "Kalendern"!

...zur Antwort

Hallo fusselmax,

es gibt mehrere Möglichkeiten (getestet mit Excel 2010):

  1. Du markierst nur die Zelle, in welche du die Adresse einfügen willst, gehst aber nicht in den "Bearbeiten"-Modus (Doppelklick), dann wird die Adresse auch nicht automatisch mit einen Hyperlink versehen, der beim Anklicken ein E-Mail-Formular öffnet.
  2. Alternativ gibst du im Bearbeiten-Modus vor der Adresse ein Hochkomma (Apostroph) ein.
  3. Du klickst direkt nach dem Einfügen und der automatischen Formatierung als Hyperlink (blau und unterstrichen) auf das darunter erscheinende SmartTag (flaches Kästchen unter dem ersten Zeichen). Dann hast du zwei Optionen: "Hyperlinks nicht automatisch erzeugen" (diese Einstellung bleibt!) bzw. "Rückgängig: Hyperlink" (nur für dieses Element).
  4. Du klickst mit der rechten Maustaste auf eine E-Mail-Adresse, die bereits als Hyperlink formatiert ist, und wählst im Kontextmenü den Eintrag "Hyperlink entfernen".
  5. Du hältst die linke Maustaste beim Anklicken einer Zelle mit einem Hyperlink so lange gedrückt, bis aus dem Hand-Symbol des Mauszeigers wieder das gewohnte weiße Kreuz wird.

Wenn du eine ältere Excel-Version verwendest, können diese Möglichkeiten u.U. etwas anders aussehen oder teilweise nicht funktionieren. Aber die vierte geht immer!

Was klappt bei dir am besten?

...zur Antwort

Deine 1. Frage ist offenbar noch nicht beantwortet, oder du bist inzwischen selbst auf die Lösung gekommen:

Cells(intTag + 3, 2) = DateSerial(Year(Date), Month(Date), intTag)

Zur 2. Frage noch eine Ergänzung dessen, was Distel geschrieben hat. Du kannst das Ausfüllen der Spalte A entweder aus dem VBA-Code ganz rauslassen und stattdessen in A4 (für den 1. Tag) folgende Formel eintragen und nach unten kopieren:

=WENN(B4>0;B4;"")

Dann formatierst du die Zellen A4:A34 so, wie Distel es vorgeschlagen hat.

Die andere Möglichkeit ist die von dir beschriebene, dass der VBA-Code Spalte A mit ausfüllt. Das sieht dann so aus: Hinter die o.g. Programmzeile fügst du ein:

Cells(intTag + 3, 1) = Cells(intTag + 3, 2).Value

Auch in diesem Fall musst du die von Distel genannte Formatierung für A4:A34 verwenden, damit statt des Datums oder einer Zahl der abgekürzte Wochentag angezeigt wird. Wenn das ebenfalls vom Makro geleistet werden soll, müsstest du dich allerdings nochmal anderweitig schlau machen, welcher Code dafür benötigt wird. Es ist sicherlich kein großer Aufwand, aber ob er sich lohnt, ist die andere Frage.

Gutes Gelingen!

...zur Antwort

Es gibt eine solche Funktion in Excel, allerdings wird sie dort nicht so bezeichnet, sondern als "Array". Damit legst du auf einen Rutsch eine Formel für einen größeren Bereich fest, z.B. für einen Vektor, wie du ihn in B10:B14 stehen hast. Das funktioniert so: 1. Du markierst den Bereich, in dem die Berechnung stattfinden soll, in deinem Beispiel also D10:D14 (von oben nach unten, damit D10 die aktive Zelle ist, s. Abb. 1). 2. Du gibst in der Bearbeitungsleiste die Formel =b10:b14*$C$6 ein (b10:b14 ist der Vektor, der multipliziert werden soll) (Abb. 2) 3. Du beendest die Eingabe NICHT einfach mit der Enter-/Eingabetaste, sondern drückst vorher und währenddessen auch die Strg- und die Shift-/Hochstelltaste. Dann erscheint die Formel in geschweiften Klammern (Abb. 3).

Achtung: Die Zellen in diesem Array können nicht einzeln bearbeitet (oder gelöscht) werden, sondern nur durch erneutes Markieren des ganzen Bereiches (C10:C14). Es lassen sich auch nicht nachträglich Zellen (bzw. Zeilen/Spalten) in ein Array einschieben. Das "AutoAusfüllen" funktioniert hier nur, wenn du zuvor C6 absolut gesetzt hast ($C$6), was für ein Array sonst nicht nötig ist.

Ist es das, was du gesucht hast?

Dann viel Erfolg!

...zur Antwort

Ein automatisches Aufrückenlassen wäre theoretisch machbar, aber sehr aufwändig. Die Funktion, die du dann verwenden müsstest, nennt sich BEREICH.VERSCHIEBEN. Aber vielleicht reicht es ja, wenn du (ausgehend vom letzten Stand) die leeren Zeilen in den Tabellen datum1 und datum2 ausfilterst?

Allerdings hat das normale Filtern einen Haken: Wenn du die leeren Zeilen bei "Eingang" filterst, sind auch die Zahlen bei "Ausgang" weg (außer sie stehen zufällig neben einem Eingang). Dafür gibt es den "Erweiterten Filter" bzw. "Spezialfilter". Im folgenden das Vorgehen bei Excel 2007/2010:

  • Auf dem Blatt "gesamt" schreibst du in J1 das Wort Ausgang, in K1 das Wort Eingang (so wie es in G1 und H1 steht).
  • In die Zellen J2 und K3 tippst du jeweils die Formel =">0".
  • Dann markierst du die Zellen J1 bis K3 und tippst im Namensfeld (über dem Spaltenkopf von Spalte A) als Name für diesen Bereich das Wort "Filter" (ohne Anführungszeichen)
  • Nun kannst du in den Tabellen datum1 und datum2 filtern: In der Multifunktionsleiste "Daten", Gruppe "Sortieren und Filtern", klickst du auf "Erweitert".
  • Es öffnet sich das Dialogfeld "Spezialfilter". Darin legst du oben die Option "An andere Stelle kopieren" fest.
  • Vergewissere dich, dass bei "Listenbereich" der gesamte Datenbereich eingetragen ist ($A$1:$D$30).
  • Als "Kriterienbereich" trägst du wieder das Wort Filter ein.
  • Im Feld "Kopieren nach" legst du den Bereich "$F$1:$I$30" fest und schließt das Dialogfeld mit "OK". Damit ist der Filter gesetzt; die gesuchten Werte sollten nun in F2:I13 stehen.
  • Wenn du nun noch die Spalten A bis E ausblendest (Spaltenbreite 0), ist die "Täuschung" perfekt ;-)

Viel Erfolg beim Nachbauen!

...zur Antwort

Ich weiß nicht, welche Excel-Version du benutzt, deshalb hier erst mal die Beschreibung für Excel bis 2003.
1. Kopiere in eine unbenutzte Zelle deines Tabellenblattes (wo es nicht unbedingt auffällt) folgende Formel für die aktuelle Kalenderwoche:
=KÜRZEN((HEUTE()-DATUM(JAHR(HEUTE()+3-REST(HEUTE()-2;7));1;REST(HEUTE()-2;7)-9))/7).
(Die Excel-Formel Kalenderwoche() liefert u.U. falsche Werte.) Ich spreche diese Zelle nachher mit $BC$1 an.
2. Markiere ALLE Zellen, die (irgendwann mal) die Linie erhalten sollen, von links oben nach rechts unten.
3. Klicke im Menü "Format" auf "Bedingte Formatierung".
4. Wähle im Dropdown-Feld unter "Bedingung 1" den Eintrag "Formel ist".
Jetzt kommt es darauf an, in welcher Zelle bei dir die ERSTE Wochenzahl steht (in deinem Screenshot die 28 unterhalb von Juli, vielleicht fängt es aber auch weiter vorne an). Ich nehme hier mal die Zelle A4 an.
5. In das breite Feld rechts von "Formel ist" schreibst du die Formel
=A$4=$BC$1
Ersetze ggf. A$4 und $BC$1 durch die zutreffenden Zellbezüge. Die $-Zeichen müssen genau an diesen Stellen stehen!
6. Nun klickst du noch auf die Schaltfläche "Format" und wählst auf dem Registerblatt "Rahmen" die gewünschte Linie aus. (Leider lässt Excel 2003 hier keine verschiedenen Linienstärken zu.)
7. Schließe das Dialogfeld "Bedingte Formatierung" mit "OK" und überprüfe das Ergebnis in deiner Tabelle. Ich hoffe, es ist das, was du erreichen wolltest!

...zur Antwort

Wie ist es denn mit dem Drucken aus anderen Anwendungen, z.B. Word? Wenn da auch alles 5x rauskommt, liegt es an den Druckereinstellungen. Je nach Windows-Version sind die an verschiedenen Stellen zu ändern. Wenn du damit nicht weiter kommst, schreib' mal, welche Version du hast. Vielleicht kann ich's dir dann genauer beschreiben.
Wenn das Problem nur in Excel auftritt und bei der ganz normalen Druckfunktion (nicht irgendeine spezielle Schaltfläche mit Makro dahinter), wüsste ich allerdings auch keinen Rat - außer selbst ein Makro zu generieren, das dafür sorgt, dass jedes (!) Dokument nur 1x gedruckt wird.

Noch ein Tipp zum Papier (und Tinte/Toner) einsparen: Wenn du einen PDF-Generator als Drucker eingerichtet hast, benutze diesen und kontrolliere das Ergebnis, bevor du es an den "echten" Drucker schickst. Ich finde FreePDF ganz gut, dafür muss man aber zusätzlich GhostWriter installieren (findest du alles über die Seite von FreePDF).

...zur Antwort

Um beim Kopieren der Formel nach unten den Bezug auf das Arbeitsblatt zu ändern (statt den Bezug auf die Zelle), benötigst du die INDIREKT-Formel. Ich hänge einige Screenshots an, dort habe ich folgende Struktur:
Das "Hauptblatt" enthält die Ergebnisse in den Zellen A4, A5 etc. Danach folgen Tabelle1, Tabelle2 usw. mit den Ursprungswerten. Wichtig: Die folgenden Arbeitsblätter müssen Namen haben, die mit einer fortlaufenden Zahl enden!
Im Hauptarbeitsblatt verwendest du dann folgende Formel:
=INDIREKT("Tabelle"&ZEILE()-3&"!B15")
und kopierst sie so weit wie nötig nach unten. Natürlich musst du die Formel anpassen, je nach dem, in welcher Zeile sie beginnt. Wenn du also einen Wert aus Tabelle1 in C24 stehen haben willst, muss es in der Mitte heißen
ZEILE()-23
Ich hoffe, du kommst mit dieser knappen Erklärung zurecht. Viel Erfolg!

...zur Antwort

Auch wenn's schon lange her ist, seit die Frage gestellt wurde - für spätere Antwortsucher hier noch ein Tipp:
http://www.d-rhyme.de
Diese Seite findet nicht (nur) stumpf alle Wörter, die mit den selben Buchstaben aufhören, sondern (teilweise) auch solche, die am Schluss ähnlich klingen. (Bisher allerdings zu 'Welt' nicht 'Geld' oder Ähnliches.)
Vor allem aber hat diese Seite eine erweiterte Suche, mit der man nach Kategorien, Worttypen oder Silbenzahl filtern kann. Das hilft ungemein, das Suchergebnis auf eine überschaubare Menge an Wörtern einzugrenzen.
Ein aktueller Browser und Javascript werden benötigt.

...zur Antwort