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
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Adressliste | Herbers Excel-Forum


Betrifft: Adressliste von: Missy
Geschrieben am: 06.12.2009 19:11:59

Hallo an alle Hilfsbereiten,

ich habe schon mal inseriert und keine Hilfe bekommen. Deshalb versuch ichs nochmal, habe meine Wünscheliste stark eingeschränkt und mich nur noch auf die Bugs konzentriert, die ich nicht weg bekomme. Das Script ist fertig, nur eben nicht zu 100% funktionsfähig.

Hoffe deshalb auf Hilfe welcher Art auch immer. Bugliste steht im Tabellenblatt, für Euch sicher Kleinigkeiten, für mich die Welt. Würde mich auf Unterstützung freuen.

Danke und Gruß
Michi

https://www.herber.de/bbs/user/66397.xls

  

Betrifft: AW: Adressliste von: fcs
Geschrieben am: 07.12.2009 08:27:29

Hallo Michi,

einen Teil deiner Probleme konnte ich bereinigen. Da war dann doch etwas mehr zu bereinigen als du evtl. gedacht hast.

Noch nicht funktioniert die Verarbeitung der Eingabe für die Wiedervorlage.
Hier muss noch irgend wie die Formel kopiert werden

Die Prüfung auf identische Datensätze fehlt auch noch.

Die Anzeige Datum Uhrzeit hab ich vereinfacht. Sie erfolgt jetzt wenn Buttons gedrückt werden.

Gruß
Franz
https://www.herber.de/bbs/user/66400.xls


  

Betrifft: AW: Adressliste von: Michi
Geschrieben am: 07.12.2009 14:39:26

Hallo Franz,

vielen Dank für die Mühe, ich weiß das wirklich zu schätzen. Ich habe das File geöffnet und bekomme leider nur Fehlermeldungen. Ich komme gar nicht soweit, das Forumlar auszuprobieren wegen dieser Fehlermeldungen. Woran kann das liegen? Hast du eine andere Excel-Version als ich? Ich benutze XL2003 und wahlweise noch XL2007, geht bei beiden nicht.

1. Kompilierungs-Fehler bei Time und Date
2. Fehler bei den Wiedervorlagen, wie du schon erwähnt hast, auch dort hängt er sich am Date auf, den
3. Prüfung auf Vollständigkeit wäre nicht nötig gewesen, es gehen durchaus Bewerbungen ein, die nur aus Anschreiben bestehen, ohne weitere Angaben...es soll also möglich sein, diesen Datensatz trotzdem anzulegen...trotzdem danke ;)

Sortierung funktioniert einwandfrei, vielen Dank

Prüfung der Datensätze...ich hab keine Ahnung, wie ich das am besten anstelle. Trotzdem vielen Dank für die Mühe, ich geb dir nen virtuellen Schokonikolaus dafür ;)

Falls noch jemand Ideen beim Rest hat, bitte die geuppte Datei von Franz verwenden zur Weiterbearbeitung.

Gruß und Danke Michi


  

Betrifft: AW: Adressliste von: fcs
Geschrieben am: 08.12.2009 08:51:19

Hallo Michi,

hier ein Update der Datei.

Bis auf Prüfung auf versehentlich Doppeleingabe funktioniert es jetzt wohl.

Gruß
Franz
https://www.herber.de/bbs/user/66421.xls


  

Betrifft: AW: Adressliste von: fcs
Geschrieben am: 08.12.2009 15:50:42

Hallo Michi,

hier der letzte Upgrade.
Jetzt sollte alles funktionieren inkl. Prüfung doppelter Datensätze ud einiger anderer für die Logik wichtiger Prüfungen.

Auch das Ausdrucken einzelner Kontakte aus dem UF funktioniert inkl. Zu-/Abwahl einiger Zeilen im UF Druckauswahl. Hierfür hab ich das Blatt "Kontakt" ergänzt.

https://www.herber.de/bbs/user/66437.xls
(Erstellt in Excel 2003)

Gruß
Franz


  

Betrifft: AW: Adressliste von: Wolfgang L.
Geschrieben am: 08.12.2009 17:26:16

Hallo und guten Tag Franz (fcs), Missy und Michi,

wie kann man diese Anwendung erweitern, um eine Uhrzeit (von / bis Uhr) von der UserForm1 in das Tabellenblatt „Daten“ ein- und wieder auszulesen. Die Zeitspanne (von-bis) sollte in der UserForm ebenfalls ersichtlich sein, also:

Beginn 08:30
Ende 13:45
Zeitspanne 05:15.
Das Zeitformat sollte hh:mm sein.

Da ich von VBA kaum Ahnung habe, bitte ich um Eure Hilfe.

Viele Grüße an Euch und an das das Forum

Wolfgang L.


  

Betrifft: AW: Adressliste von: Michi
Geschrieben am: 08.12.2009 17:46:12

Du bist ein Schatz Franz, jetzt funzt es einwandfrei...vielen, vielen Dank...

Kannst du mir trotzdem bitte noch sagen, was du geändert hast, damit es jetzt funktionert? Rein Interessehalber, man lernt ja gerne dazu..

Nochmal vielen, vielen Dank für alles...

Gruß Michi und einen wunderschönen Abend


  

Betrifft: AW: Adressliste von: Wolfgang L.
Geschrieben am: 08.12.2009 17:50:22

Hallo Michi,

hast Du meine Bitte gelesen?

Viele Grüße aus Bonn
Wolfgang L.


  

Betrifft: AW: Adressliste von: Michi
Geschrieben am: 08.12.2009 19:40:00

Hallo Wolfgang,

ich denke, deine Bitte hat sich durch Franz erledigt oder hab ich was überlesen? Ich bin leider genauso miserabel in vba wie du, deshalb bin ich auch sehr froh, daß mir Franz so lieb geholfen hat.

Gruß Michi, Missy oder einfach ich :D


  

Betrifft: AW: Adressliste für Wolfgang von: fcs
Geschrieben am: 08.12.2009 18:29:59

Hallo Wolfgang,

hier dann auch noch der spezieller Service für dich mit 2 zusätzlichen Zeitspalten.
https://www.herber.de/bbs/user/66439.xls

Gruß
Franz


  

Betrifft: AW: Adressliste für Wolfgang von: Wolfgang L.
Geschrieben am: 08.12.2009 18:42:58

Hallo Franz,

für die schnelle Antwort bedanke ich mich herzlich.

Genau so habe ich es mir vorgestellt.

Viele Grüße aus dem Bundesdorf Bonn

Wolfgang L.


  

Betrifft: AW: Adressliste für Wolfgang von: Wolfgang L.
Geschrieben am: 08.12.2009 20:00:11

Nochmals Hallo Franz,

ich habe noch einen Wunsch.

Ist es möglich die Zeitdifferenz (Dauer) aus der UserForm in die Spalte U einzutragen?
Meine händische Formel =SUMME(T..-S..), um die Zeitdifferenz zu ermitteln funktioniert, aber leider kann ich die Formel weder nach unten oder nach oben kopieren; denn es wird immer das gleiche Ergebnis (bei unterschiedlichen Zeiten) aus der Ursprungszelle kopiert.

Mach ich einen Fehler oder wird das Kopieren der Formel ab Spalte U durch VBA blockiert?

Hoffentlich falle ich Dir nicht „auf den Wecker“.

Nochmals viele Grüße
Wolfgang L.


  

Betrifft: AW: Adressliste für Wolfgang von: Michi
Geschrieben am: 08.12.2009 22:04:05

Ich hätte auch noch einen Nachtrag nach ausgiebigem Testen...*schäm*

Das mit der Sortierung innerhalb der Combobox funzt doch noch nicht so ganz, sind wohl eher zufallstreffer, aber das soll jetzt das geringste Problem sein, ansonsten sehr sehr gute Arbeit Franz


  

Betrifft: AW: Adressliste für Wolfgang von: fcs
Geschrieben am: 09.12.2009 08:28:11

Hallo Michi,


dein Problem mit der Sortierung in der Combobox kann ich nicht nachvollziehen. Bei mir erfolgt die Sortierung nach Eingabe von Namen jeweils einwandfrei.

Was die Anpassung zwischen meinen beiden Versionen angeht:
In der hochgeladen ZIP-Datei findest du den Code für Userform1 mit den markierten Änderungen.
Wesentlich sind :
- die Überprüfung auf Doppelte in der Prozedur für das Einfügen neuer Datensätze.
- Codes für die Textboxen 9, 10 und 14 rund um das Wiedervorlage Datum.
- Einschränkung der Eingabe für Geschlecht auf "", m oder w
- Functions Datum und ZelleDatum zur Verarbeitung von Textboxen mit Datumseingaben


Die Codes für die UF Kontaktdaten und Druckauswahl muss du dir halt mal genauer anschauen.
Wichtig hier:
Die Daten aus Steuerelementen anderer Userforms (auch die jener, die per Hide ausgeblendet sind) kann man über ihren vorangestellten Namen abrufen.

Vor der Anzeige der Seitenvorschau für den Druck müssen alle Userforms per Hide ausgeblendet werden, sonst "friert" Excel ein.

Gruß
Franz
https://www.herber.de/bbs/user/66449.zip


  

Betrifft: AW: Adressliste für Wolfgang von: fcs
Geschrieben am: 09.12.2009 06:59:54

Hallo Wolfgang,

die folgenden Anpassungen im Userform-Code fügen die Formeln ein. Ursprünglich hatte ich's schon drin. Dann deine Frage genau gelesen und die Formelerzeugung wieder in Komentare umgewandelt.
Nicht vergessen: Die Formatierung in Spalte U anzupassen - weiße Schrift auf weissen Grund ist nicht so besonders kontrastreich ;-)

Gruß
Franz

'Anzupassende Prozeduren um Code für Userform1

Private Sub Daten_Einlesen(Zeile As Long)

  'Datensatz aus Tabellenblatt einlesen
  With wksData
      TextBox12.Text = .Cells(Zeile, 2).Text
      TextBox15.Text = .Cells(Zeile, 3).Value
      TextBox1.Text = .Cells(Zeile, 5).Value
      TextBox2.Text = .Cells(Zeile, 6).Value
      TextBox3.Text = .Cells(Zeile, 7).Value
      TextBox4.Text = .Cells(Zeile, 8).Value
      TextBox13.Text = .Cells(Zeile, 9).Value
      TextBox5.Text = .Cells(Zeile, 10).Text
      If .Cells(Zeile, 11).Value = "X" Then
        Me.OptionButton1.Value = True
      Else
        Me.OptionButton1.Value = False
      End If
      TextBox6.Text = .Cells(Zeile, 12).Value
      TextBox8.Text = .Cells(Zeile, 13).Value
      TextBox14.Text = .Cells(Zeile, 14).Value
      TextBox9.Text = .Cells(Zeile, 15).Text
      TextBox10.Text = .Cells(Zeile, 16).Text
      TextBox11.Text = .Cells(Zeile, 17).Text
      TextBox7.Text = .Cells(Zeile, 18).Value
      tboxVon.Text = .Cells(Zeile, 19).Text
      tboxBis.Text = .Cells(Zeile, 20).Text
      tboxDauer.Text = .Cells(Zeile, 21).Text ' ##### Ändern/vereinfachen alter Code kann auch  _
bleiben
  End With
  
  ListBox1.Clear
  Call DateAndTime
End Sub



Private Sub CommandButton3_Click()
  Dim letzte_Zeile As Long, Zeile As Long, lngAuswahl
  Dim bolGanz As Boolean, bolTeil As Boolean, bolNeu As Boolean
  With wksData
  If fncEingabeCheck() = True Then
    ' Auf doppelte Eingabe prüfen
    'Prüfung ob Datensatz mit identischen Daten nochmals gespeichert werden soll
    bolGanz = True: bolTeil = True: bolNeu = True
    For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      ' Daten in Userform mit Tabelle vergleichen
      If Datum(.Cells(Zeile, 2).Text) <> Datum(TextBox12.Text) Then bolGanz = False
      If .Cells(Zeile, 3) <> TextBox15.Text Then bolGanz = False
      If .Cells(Zeile, 4) <> ComboBox1.Text Then bolGanz = False: bolTeil = False 'Name
      If .Cells(Zeile, 5) <> TextBox1.Text Then bolGanz = False: bolTeil = False  'VorName
      If .Cells(Zeile, 6) <> TextBox2.Text Then bolGanz = False: bolTeil = False  'Adresse
      If .Cells(Zeile, 7) <> TextBox3.Text Then bolGanz = False: bolTeil = False  'PLZ Ort
      If .Cells(Zeile, 8) <> TextBox4.Text Then bolGanz = False
      If .Cells(Zeile, 9) <> TextBox13.Text Then bolGanz = False
      If Datum(.Cells(Zeile, 10).Text) <> Datum(TextBox5.Text) Then bolGanz = False
      If Me.OptionButton1.Value = True Then
          If .Cells(Zeile, 11) <> "X" Then bolGanz = False
      Else
          If .Cells(Zeile, 11) = "X" Then bolGanz = False
      End If
      If .Cells(Zeile, 12) <> TextBox6.Text Then bolGanz = False
      If .Cells(Zeile, 13) <> TextBox8.Text Then bolGanz = False
      If .Cells(Zeile, 14) <> TextBox14.Text Then bolGanz = False
  '    .Cells(Zeile, 15) <> TextBox9.Text 'WV-Datum wird in Tabelle berechent
      If Datum(.Cells(Zeile, 16).Text) <> Datum(TextBox10.Text) Then bolGanz = False
      If Datum(.Cells(Zeile, 17).Text) <> Datum(TextBox11.Text) Then bolGanz = False
      If .Cells(Zeile, 18) <> TextBox7.Text Then bolGanz = False
      If Zeit(.Cells(Zeile, 19).Text) <> Datum(tboxVon.Text) Then bolGanz = False
      If Zeit(.Cells(Zeile, 20).Text) <> Datum(tboxBis.Text) Then bolGanz = False
      If bolGanz = True And bolTeil = True Then
        If MsgBox("Ein identische Datensatz existiert bereitsmit ID """ & .Cells(Zeile, 1) _
            & """ bereits in Zeile """ & Zeile & """!" & vbLf & vbLf _
            & "Trotzdem neu anlegen?", vbQuestion + vbYesNo, _
            "Prüfung doppelte Eingabe") = vbYes Then
          bolNeu = True
          Exit For
        Else
          bolNeu = False
          Exit For
        End If
      ElseIf bolTeil = True Then
        lngAuswahl = MsgBox("Datensatz für Name, Vorname, Adresse, PLZ Ort" & vbLf & vbLf _
            & "existiert mit ID """ & .Cells(Zeile, 1) & """ bereits in Zeile """ & Zeile & """! _
" & vbLf & vbLf _
            & "Datensatz ändern?" & vbLf _
            & "(bei ""Nein"" wird neuer Datensatz angelegt)", vbQuestion + vbYesNoCancel, _
            "Prüfung doppelte Eingabe")
        If lngAuswahl = vbYes Then
          bolNeu = False
          Call Daten_Eintragen(Zeile:=Zeile)
          Exit For
        ElseIf lngAuswahl = vbNo Then
          bolNeu = True
          Exit For
        Else
          ' weiter prüfen
        End If
      End If
      bolGanz = True: bolTeil = True
    Next
    
    If bolNeu = True Then
    ' Datensatz neu speichern
    
      letzte_Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
      'neue ID ermitteln
      If letzte_Zeile = 2 Then 'Erster Eintrag in Liste
        .Cells(letzte_Zeile, 1) = 1
      Else
        .Cells(letzte_Zeile, 1) = Application.WorksheetFunction.Max(.Range(.Cells(2, 1), _
            .Cells(letzte_Zeile - 1, 1))) + 1
      End If
      Set rngID = .Cells(letzte_Zeile, 1)
      Call Daten_Eintragen(Zeile:=letzte_Zeile)
      'Formel für Wiedervorlage-Datum in Spalte O einfügen
      With .Cells(letzte_Zeile, 15)
        .FormulaR1C1 = _
          "=IF(RC[-1]<>"""",DATE(YEAR(RC[1]),MONTH(RC[1])+RC[-1],DAY(RC[1])),"""")"
      End With
      'Formel für Dauer in Spalte U einfügen
      With .Cells(letzte_Zeile, 21)					'Kommentarzeichen löschen
        .FormulaR1C1 = _
          "=IF(AND(RC[-1]<>"""",RC[-2]<>""""),RC[-1]-RC[-2],"""")"	'Kommentarzeichen löschen
      End With								'Kommentarzeichen löschen
    End If
  End If
  End With
  Call DateAndTime
End Sub



  

Betrifft: AW: Adressliste für Wolfgang von: Wolfgang L.
Geschrieben am: 09.12.2009 18:20:43

Nochmals Hallo und guten Abend Franz,

die Anpassungen der UserForm hat geklappt.
Die Uhrzeiten werden wunschgemäß exakt dargestellt.
Recht herzlichen Dank für Deine Mühewaltung und Geduld.

Ich habe aber noch eine allerletzte Bitte an Dich.

Wo und wie muss ich den VBA-Code ändern, um folgendes zu erreichen:

Der erste Eintrag soll erst ab Zeile 7 per VBA erfolgen.
Die Zeilen 1 bis 5 sollen für interne Eintragungen völlig frei sein.
Die Zeile 6 beinhalten weiterhin die Überschriften.
Soll bedeuten: die Zeilen 1 bis 6 dürfen in keiner Weise von dem VBA-Code
verändert, beeinflusst oder überschrieben werden.

Für mich ist es eine unlösbare Aufgabe; für Dich bestimmt nur ein „Klacks“.
(abgeleitet aus einem Spruch der ersten Mondlandung)

Bitte nenne mir Deine Adresse, damit ich unter Deinem Weihnachtsbaum ein
kleines Dankeschön legen kann. (wolfgang.loedorf@gmx.de)

Viele Grüße aus BN (Kurzfassung für Berlin Nebenstelle)
Wolfgang L.


  

Betrifft: AW: Adressliste für Wolfgang von: fcs
Geschrieben am: 10.12.2009 00:28:06

Hallo Wolfgang,

das mit dem Klacks ist so eine Sache. Speziell wenn man nicht der ursprüngliche Programmierer der VBA-Prozeduren ist. Ich denke aber ich hab alle relevanten Stellen im Code gefunden. Die aktualisierte Datei ist per E-Mail zu dir unterwegs.

Gruß
Franz


  

Betrifft: AW: Adressliste für Wolfgang von: Michi
Geschrieben am: 10.12.2009 20:17:42

Hallo,

wie muß ich dieses Makro noch ändern, wenn folgender Sachverhalt gegeben ist: Es soll jede Zeile von Spalte A bis R farbig markiert werden, sobald das DAtum in Spalte O kleiner gleich heute ist.

Private Sub Farbe()
  Dim wks As Worksheet
  Dim AnzahlWV As Long
  Set wks = Worksheets("Daten")
  With wks
    AnzahlWV = Application.WorksheetFunction.CountIf(.Range(.Cells(2, 15), _
          .Cells(.Rows.Count, 15).End(xlUp)), "<=" & CDbl(Date))
  End With
  Rows.ColorIndex = 6
End Sub
Danke für Tips


  

Betrifft: AW: Adressliste für Wolfgang von: fcs
Geschrieben am: 11.12.2009 09:36:39

Hallo Michi,

als Excel-Profi würde ich das mit bedingter Formatierung lösen.
Die entsprechende Formel für eine Zelle in Zeile 2:

=UND(ISTZAHL($O2);$O2>0;$O2<=HEUTE())

VBA-Lösung:
Private Sub Farbe()
  Dim wks As Worksheet, Zeile As Long
  Dim AnzahlWV As Long
  Set wks = Worksheets("Daten")
  Application.ScreenUpdating = False
  With wks
    For Zeile = 2 To .Cells(.Rows.Count, 15).End(xlUp).Row
      'Wert in Spalte O (15) prüfen
      If IsDate(.Cells(Zeile, 15)) Then
        If .Cells(Zeile, 15) <= CDbl(Date) Then
          Rows(Zeile).Interior.ColorIndex = 6
        Else
          Rows(Zeile).Interior.ColorIndex = xlColorIndexNone
        End If
      Else
          Rows(Zeile).Interior.ColorIndex = xlColorIndexNone
      End If
    Next Zeile
  End With
  Application.ScreenUpdating = True
End Sub

Die bedingte Formatierung hat den Charm, dass die vorhandene Zellformatierung nicht zerstört, sondern nur überblendet wird.

Gruß
Franz


  

Betrifft: AW: Adressliste für Wolfgang von: Michi
Geschrieben am: 10.12.2009 20:20:23

Mist, noch ein Nachtrag...die farbige Markierung soll wieder verschwinden, sobald ein Wert in
Spalte Q eingetragen wird..für mich als VBA-Niete wieder mal ein Jahrhundertprojekt


Beiträge aus den Excel-Beispielen zum Thema "Adressliste"