Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1616to1620
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform hilfe

Userform hilfe
03.04.2018 15:28:26
Simone

Hallo zusammen,
ich brauche mal euere Hilfe im Userform.
Ich habe bereits eine USERFORM gestellt, aber ich kenne mich leider nicht aus, wie man sowas aufbaut.
Ich möchte im Schnellzugriff ein Symbol anlegen der dann den USERFORM aufmacht.
Im Tabellenblatt Daten für USERFORM lege ich alle meine Daten an.
Jetzt soll die User form gefüllt werden.
Die Telefonnummer soll automatisch gezeigt werden wenn ich den Kunde auswähle.Wähle ich das Material aus sollen Daten1 bis4 automatisch gefüllt werden (Tabellenblatt Daten für USERFORM)."Datum ist heute" soll immer das heute Datum drin stehen,aber man sollte es ändern können.
Text Feld information werden alle gespräche notiert. Wähle ich jetzt den Kunde 2 aus und das Material Hammer dann gebe ich die Informationen ein und kreuze Daten 5 , Daten6 und oder Daten7 an. Danach gebe ich mein Bestelldatum ein und klicke auf speichern. Alle Daten werden Jetzt im Tabellenblatt Kunde2 gespeichert. Wichtig ist, das es immer nach Material und nach Datum ist heute sortiert wird. Das Jahr wäre nicht schlecht wenn es automatisch gefüllt mit.
Ich hoffe ihr könnt mir dabei helfen.
https://www.herber.de/bbs/user/120828.xlsm
Danke euch

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform hilfe
03.04.2018 17:02:15
Peter(silie)
Hallo,
hier deine Mappe mit Code der die Kunden reinlädt und bei Auswahl die TelNr holt:
https://www.herber.de/bbs/user/120831.xlsm
Mehr mache ich erstmal nicht, da du dein Datenmodell überdenken solltest.
Excel ist oder war auf 255 Blätter beschränkt.
Sollte dieses Limit immer noch bestehen,
hast du ein wirkliches Problem bei mehr als 254 Kunden.
AW: Userform hilfe
03.04.2018 17:42:57
Simone
Hallo
danke erstmal
es sind insgesamt 35 Kunden.
mehr werden es nicht
AW: Userform hilfe
03.04.2018 21:55:55
Simone
Hallo,
Ich hoffe du kannst mir weiter helfen.
Danke dir
AW: Userform hilfe
04.04.2018 08:04:46
Peter(silie)
Hallo,
du hast einen Artikel mehrfach in einer Kundentabelle.
Wie sieht es da aus mit den Daten 1 bis 4.
Ist Daten1 = Wahr wenn nur ein Artikel des gleichen Types dort ein Kreuz hat?
Unten ein bisschen mehr Code, ersetze einfach den anderen UserForm Code damit.
Fügt Kunden hinzu und Material und Datum und Tel-Nr.
Der Code ist Kommentiert und relativ Simpel gehalten.
Versuche dich also mal rein zu lesen und gehe mit dem Debugger durch.
Option Explicit
Private Sub CmbKunde_Change()
Dim ws      As Worksheet    'Worksheet with Phonenumber
Dim lRow    As Long         'Last Row of Column xy
Dim tmp     As Variant      'stores data temporary
'if no client is selected then go out
If CmbKunde.Value = vbNullString Then Exit Sub
Set ws = ThisWorkbook.Sheets("Daten für USERFORM")
With ws
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
tmp = .Range(.Cells(1, 1), .Cells(lRow, 1)).Value2
lRow = GetPosition(CmbKunde.Value, tmp)
If lRow > 0 Then
'Add the Phonenumber to the textbox
Me.TxtKundentelefon.Value = .Cells(lRow, 2).Value
'try to get clients list of Articles
On Error Resume Next
Me.CmdMaterial.List = GetClientMaterial(Me.CmbKunde.Value)
'display first item of list
Me.CmdMaterial.Value = Me.CmdMaterial.List(0, 0)
End If
End With
End Sub
Private Function GetClientMaterial(ByVal cName As String)
Dim ws      As Worksheet    'Worksheet in which we go
Dim lRow    As Long         'Last Row of Column xy
Dim tmp     As Variant      'stores data temporarily
Dim vItem   As Variant      'used for looping
Dim dict    As Object       'Dictionary Object
'Try to get the sheet with the given client name
'If it failes, just go out here
On Error GoTo ClientSheetNotThere
Set ws = ThisWorkbook.Sheets(cName)
On Error Resume Next
With ws
'Get last Row of Column 1
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
'store all Articles in temporary Variant Array
tmp = .Range(.Cells(3, 1), .Cells(lRow, 1)).Value2
'Create Dictionary Object by Latebinding
Set dict = CreateObject("Scripting.Dictionary")
'Add all Items
'we do this to get rid of all duplicates
For Each vItem In tmp
dict(vItem) = vbNull
Next vItem
End With
'Pass the dictionary keys to the function
GetClientMaterial = dict.Keys
ClientSheetNotThere:
End Function
Private Sub Cmdabrechen_Click()
Unload Me 'Closes the form
End Sub
Private Sub UserForm_Initialize()
Dim ws      As Worksheet    'Sheet with Clients listed
Dim lRow    As Long         'Last Row of Column xy
Me.TxtDatum.Value = Date
Set ws = ThisWorkbook.Sheets("Daten für USERFORM")
With ws
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Me.CmbKunde.List = .Range(.Cells(2, 1), .Cells(lRow, 1)).Value2
End With
End Sub
'returns the Position of an Item within an Array or Range
'returns 0 if the item couldnt be found
'if you pass an Int (like GetPosition(10, Array)) then it
'will return 0 because the OfItem Variable is of Type string
Private Function GetPosition(ByVal OfItem As String, _
ByRef Area As Variant) As Long
If Not VBA.IsError(Application.Match(OfItem, Area, 0)) Then
GetPosition = Application.Match(OfItem, Area, 0)
End If
End Function

Anzeige
AW: Userform hilfe
04.04.2018 10:04:33
Simone
Hallo Peter,
lieben Dank das du mir hilfst. Kannst du die Kommentare in Deutsch schreiben, mein Englisch ist nicht so gut.
Die Daten 1 bis 4 die sind immer nach dem Material gezogen. Das soll nur eine Info sein.
Die Daten sind in Tabellenblatt DATEN USERFORM D1:H10.
Wähle ich Hammer aus, dann soll automatisch das kreuz gesetzt werden bei Daten1 und Daten3.
Wäre da eine TextBox besser gewesen?
Also zum Tagesablauf.
Ich wähle den Kunden aus. ( Kunde = Tabellenblattname) dadurch habe ich gleich die Telefonnummer.
Dann rufe ich den Kunden an. Wenn er frägt wegen dem Material ( mehrere Fragen möglich) dann klicke ich drauf und erzähle ihm ob Daten1 2,3,4 (Die Daten 1 bis 4 sind Marterialinhalt ) beinhaltet.
wenn er sich für den Hammer entscheidet geht es in den nächsten Schritt.
Danach schreibe ich das Telefongespräch auf und anschließend gebe ich dann ein Kreuz ein bei /und Daten5 bis Daten7 danach gebe ich das Bestelldatum ein.
Jetzt sollen die Daten bei der Kundenliste untereinander gespeichert werden(alle Daten wie in der USERFORM eingegeben wurde ) und erst nach Artikelnamen anschließend nach G Datum Sortiert.
Es kann schon sein das der Kunde im Jahr 10 mal den Hammer bestellt. Aber immer ein anderes Datum
Ich möchte mich Bedanken, dass du so viel Zeit für mich opferst.
Simone
Anzeige
AW: Userform hilfe
04.04.2018 11:29:51
Peter(silie)
Hallo,
hier deine Mappe: https://www.herber.de/bbs/user/120845.xlsm
Durchlaufe den Code Schrittweise mit dem Debugger.
Mehr Code gibts von mir nicht mehr.
Musst das ganze ja auch irgendwo verstehen und
anpassen sowie erweitern können.
Fragen beantworte ich natürlich gerne.
hier nur Code:
Option Explicit
Private Sub CmbKunde_Change()
Dim ws      As Worksheet    'Tabelle mit Kunden und Tel-Nr
Dim lRow    As Long         'letzte Zelle einer Spalte
Dim tmp     As Variant      'zwischenspeichern v. Daten
'Falls kein Kunde ausgewählt beende hier
If CmbKunde.Value = vbNullString Then Exit Sub
Set ws = ThisWorkbook.Sheets("Daten für USERFORM")
With ws
'hole dir die letzte Zeile der Spalte A
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
'zwischenspeichern von allen kunden
'wird an GetPosition weitergegeben zum suchen
'des richtigen Kunden
'Arrays zu druchsuchen ist schneller als eine Range
'zu durchsuchen
tmp = .Range(.Cells(1, 1), .Cells(lRow, 1)).Value2
'Suche nach dem Kunden im Array
lRow = GetPosition(CmbKunde.Value, tmp)
'Falls gefunden
If lRow > 0 Then
'Füge die Tel-Nr in die Textbox ein
Me.TxtKundentelefon.Value = .Cells(lRow, 2).Value
End If
End With
End Sub
Private Sub Cmdabrechen_Click()
Unload Me 'Closes the form
End Sub
Private Sub CmdMaterial_Change()
Dim ws  As Worksheet    'Tabelle mit userform daten
Dim pos As Long         'Position eines Materials
'Falls die Combo leer ist, dann setze checkboxes zurück und beende
If CmdMaterial.Value = vbNullString Then
ClearCheckboxes
Exit Sub
End If
Set ws = ThisWorkbook.Sheets("Daten für USERFORM")
With ws
'finde das Material
pos = GetPosition(CmdMaterial.Value, _
.Range(.Cells(1, 4), .Cells(10, 4)))
'Falls gefunden
If pos > 0 Then
'guckt ob die benötigte zelle nicht leer ist
'ist die zelle nicht leer dann ist die checkbox auf wahr gesetzt
Me.CheckBox1.Value = CBool(Not IsEmpty(.Cells(pos, 5)))
Me.CheckBox2.Value = CBool(Not IsEmpty(.Cells(pos, 6)))
Me.CheckBox3.Value = CBool(Not IsEmpty(.Cells(pos, 7)))
Me.CheckBox4.Value = CBool(Not IsEmpty(.Cells(pos, 8)))
Else
ClearCheckboxes
End If
End With
End Sub
'Setzt die werte der checkboxes zurück
Private Sub ClearCheckboxes()
Me.CheckBox1.Value = False
Me.CheckBox2.Value = False
Me.CheckBox3.Value = False
Me.CheckBox4.Value = False
Me.CheckBox5.Value = False
Me.CheckBox6.Value = False
Me.CheckBox7.Value = False
End Sub
Private Sub CmdSpeichern_Click()
Dim ws      As Worksheet
Dim i    As Long
On Error GoTo ClientSheetNotThere
Set ws = ThisWorkbook.Sheets(Me.CmbKunde.Value)
On Error Resume Next
'Sorry aber das ist keiner Beschreibung würdig...
'der Debugger lässt grüßen
With ws
i = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(i, 1).Value = Me.CmdMaterial.Value
If Me.CheckBox1.Value = True Then
.Cells(i, 2).Value = "x": End If
If Me.CheckBox2.Value = True Then
.Cells(i, 3).Value = "x": End If
If Me.CheckBox3.Value = True Then
.Cells(i, 4).Value = "x": End If
If Me.CheckBox4.Value = True Then
.Cells(i, 5).Value = "x": End If
.Cells(i, 6).Formula = "=WENN(G14="";"";G14)"
.Cells(i, 7).Value = CDate(Me.TxtDatum.Value)
.Cells(i, 8).Value = Me.TextBox1.Value
If Me.CheckBox5.Value = True Then
.Cells(i, 9).Value = "x": End If
If Me.CheckBox6.Value = True Then
.Cells(i, 10).Value = "x": End If
If Me.CheckBox7.Value = True Then
.Cells(i, 11).Value = "x": End If
.Cells(i, 12).Value = CDate(Me.TextBox2.Value)
End With
On Error GoTo 0
ClientSheetNotThere:
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'erlaubt . und 0-9
Select Case KeyAscii
Case 46, 48 To 57:
Case Else: KeyAscii = 0
End Select
End Sub
Private Sub TxtDatum_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'erlaubt . und 0-9
Select Case KeyAscii
Case 46, 48 To 57:
Case Else: KeyAscii = 0
End Select
End Sub
Private Sub UserForm_Initialize()
Dim ws      As Worksheet    'Tabelle mit Kunden
Dim lRow    As Long         'Letzte Zeile
'Aktuelles Datum
Me.TxtDatum.Value = Date
'Hole alle Kunden aus der Tabelle für die userform
'füge die Kunden in die Combo ein
Set ws = ThisWorkbook.Sheets("Daten für USERFORM")
With ws
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Me.CmbKunde.List = .Range(.Cells(2, 1), .Cells(lRow, 1)).Value2
lRow = .Cells(.Rows.Count, 4).End(xlUp).Row
'Füge die Materialliste ein
Me.CmdMaterial.List = .Range(.Cells(2, 4), .Cells(lRow, 4)).Value2
'zeige das erste Item der Artikel liste an
Me.CmdMaterial.Value = Me.CmdMaterial.List(0, 0)
End With
End Sub
'Gibt die Position eines Wertes in einem Array oder einer Range zurück
Private Function GetPosition(ByVal OfItem As String, _
ByRef Area As Variant) As Long
If Not VBA.IsError(Application.Match(OfItem, Area, 0)) Then
GetPosition = Application.Match(OfItem, Area, 0)
End If
End Function

Anzeige
AW: Userform hilfe
04.04.2018 12:42:25
Simone
Hallo Peter,
lieben Dank :-) für alles.
Leider bin ich kein VBA Profi wie du :-(
Wénn ich z.b. Kunde6 eingebe und das Tabellenblatt ist nicht vorhanden. Dann sollte ein Fehler kommen.
Wie geht sowas ?
Und kann man nach dem Speichern eine MSG Box einfügen ( Bestellung wurde eingegeben ? )
Ich hoffe das du mir weiterhilft.
DANKE FÜR ALLES
AW: Userform hilfe
04.04.2018 13:40:32
Peter(silie)
Hallo,
prüfen könntest du so:

Private Sub CmbKunde_Change()
Dim ws      As Worksheet    'Tabelle mit Kunden und Tel-Nr
Dim lRow    As Long         'letzte Zelle einer Spalte
Dim tmp     As Variant      'zwischenspeichern v. Daten
'Falls kein Kunde ausgewählt beende hier
If CmbKunde.Value = vbNullString Then Exit Sub
If Not SheetExists(CmbKunde.Value) Then
MsgBox "Die Tabelle " & cmbkunde.value & " Existiert nicht!" & _
vbCrLf & "Bitte legen Sie eine neue Tabelle mit diesem Namen an.", _
vbInformation, "Fehler bei Tabelle"
Exit Sub
End If
'bla bla
End Sub
Private Function SheetExists(ByVal shName As String) As Boolean
On Error Resume Next
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(shName)
If Err.Number = 0 Then
SheetExists = True
End if
End Function
Welchen Sinn macht es nach dem Speichern so etwas zu fragen?
Und warum soll es überhaupt gefragt werden.
Anzeige
AW: Userform hilfe
04.04.2018 14:43:04
Simone
Hallo
Es kann ja sein, das das Tabellenblatt vergessen wurde anzulegen.
Aber in der Liste Daten für User Form steht es drin.
AW: Userform hilfe
04.04.2018 14:46:34
Simone
..... und muss ich jetzt den code CmdKunde_chance mit deinen neuen Code ersetzen?
Danke dir
gut hab es hinbekommen :-)
04.04.2018 15:14:36
Simone
Danke Dir :-)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige