Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1020to1024
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

CommandButton

CommandButton
04.11.2008 13:37:50
Frank
Hallo,
Ingo aus dem Forum war mir bei diesem Code sehr behilflich
nun sollte ich aber noch einen CommandButton3 einfügen
der sollte bewirken das wenn ich den Preis in der TextBox=Preis
überschreibe diesen dann im Tabellenblatt ändert, nach Möglichkeit
erst noch eine Rückfrage z.B. MsgBox Ja/Nein
Wäre dies ohne größeren Aufwand noch zu machen?
Option Explicit
Dim wsh_name As String
Public blnSchalter As Boolean, blnSchalter2 As Boolean

Private Sub CommandButton2_Click()
Dim wsh_name As String
If Me.ComboBox1.Value  "" Then
wsh_name = Me.ComboBox1
Unload Me
ThisWorkbook.Worksheets(wsh_name).Activate
Else
MsgBox "Bitte erst Kunde auswählen"
End If
End Sub



Private Sub UserForm_Initialize()
Dim wsh As Worksheet
Me.ComboBox1.Clear
For Each wsh In ThisWorkbook.Worksheets
Me.ComboBox1.AddItem wsh.Name
Next wsh
End Sub



Private Sub ComboBox1_Click()
Dim l_row As Long
Dim i_row As Integer
wsh_name = Me.ComboBox1
l_row = ThisWorkbook.Sheets(wsh_name).Range("A" & Rows.Count).End(xlUp).Row
Me.cboBezeichnung.Clear
Me.cboArtikelNr.Clear
Me.Bemerkung.Clear
For i_row = 5 To l_row
Me.cboArtikelNr.AddItem ThisWorkbook.Sheets(wsh_name).Cells(i_row, 1)
Me.cboBezeichnung.AddItem ThisWorkbook.Sheets(wsh_name).Cells(i_row, 2)
Next i_row
End Sub



Private Sub cboArtikelNr_Click()
Dim rng As Range
Me.Preis = ""
Me.cboBezeichnung.ListIndex = Me.cboArtikelNr.ListIndex
Set rng = ThisWorkbook.Sheets(wsh_name).Range("A:A").Find(Me.cboArtikelNr, LookIn:=xlValues, _
lookat:=xlWhole)
If Not rng Is Nothing Then
Me.Preis = rng.Offset(0, 2)
Me.Bemerkung = rng.Offset(0, 4)
End If
End Sub



Private Sub cboBezeichnung_Click()
Dim rng As Range
Me.Preis = ""
Me.cboArtikelNr.ListIndex = Me.cboBezeichnung.ListIndex
Set rng = ThisWorkbook.Sheets(wsh_name).Range("B:B").Find(Me.cboBezeichnung, LookIn:=xlValues,  _
_
_
lookat:=xlWhole)
If Not rng Is Nothing Then
Me.Preis = rng.Offset(0, 1)
Me.Bemerkung = rng.Offset(0, 3)
End If
End Sub


Viele Grüsse
Frank

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CommandButton
04.11.2008 15:07:53
fcs
Hallo Frank,
die Prozedur des Commandbuttons zum Eintragen des Preises müsste etwa wie folgt aussehen.
Gruß
Franz

Private Sub CommandButton9999_Click()
Dim rng As Range
If Me.cboArtikelNr.ListIndex  -1 Then
Set rng = ThisWorkbook.Sheets(wsh_name).Range("A:A").Find(Me.cboArtikelNr, _
LookIn:=xlValues, lookat:=xlWhole)
If Not rng Is Nothing Then
If MsgBox(Prompt:="Soll der alte Preis: " & rng.Offset(0, 2) & vbLf _
& "durch den neuen Preis: " & Me.Preis & vbLf _
& "ersetzt werden?", Buttons:=vbQuestion + vbYesNo, _
Title:="Neuer Artikel-Preis") = vbYes Then
If Me.Preis = "" Then
If MsgBox(Prompt:="Es ist kein neuer Preis eingegeben" & vbLf _
& "Alten Preis: " & rng.Offset(0, 2) & " löschen?", _
Buttons:=vbQuestion + vbYesNo, _
Title:="Neuer Artikel-Preis") = vbYes Then
rng.Offset(0, 2).ClearContents
End If
Else
If IsNumeric(Me.Preis) Then
rng.Offset(0, 2) = CDbl(Me.Preis)
Else
MsgBox "Eingabewert für Preis (" & Me.Preis & ") ist keine Zahl!"
End If
End If
End If
End If
Else
MsgBox "Bitte erst Artikel auswählen"
End If
End Sub


Anzeige
AW: CommandButton
04.11.2008 15:19:22
Frank
Hallo fsc,
was heißt --- müsste etwa wie folgt aussehen----.
der Code funktioniert viel besser wie ich es mir vorgestellt habe.
Vielen vielen Dank
Gruss
Frank
AW: CommandButton
04.11.2008 16:03:36
Frank
Hallo,fsc oder jeder andere Profi der mir bitte helfen könnte
ich habe noch eine Textbox eingefügt------ Me.Datum = rng.Offset(0, 3).
Meine Frage:
Kann der bestens funktionierende Code von fsc
noch so angepasst werden das das aktuelle Datum mit der Änderung des Preises
mit diesem Code übergeben werden kann.
Gruss
Frank
AW: CommandButton
05.11.2008 08:49:00
fcs
Hallo Frank,
dann muss du den Abschnitt des Makros, das den preis in die Tabelle einträgt wie folgt anpassen.
Gruß
Franz

If IsNumeric(Me.Preis) Then
rng.Offset(0, 2) = CDbl(Me.Preis)
'Aktuelles Datum in Tabelle und Textbox schreiben
rng.Offset(0, 3) = Date
Me.Datum = Format(Date, "DD.MM.YYYY")
Else


Anzeige
AW: CommandButton
05.11.2008 09:48:20
Frank
Hallo fsc,
danke für deine weitere Hilfe, funktioniert super,
leider ist mir jetzt noch folgendes aufgefallen.
Ich habe noch eine Userform mit einer ComboBox für die Namensvergabe
und einen Button zur Erstellung eines neuen Blattes danach wird die Userform geschlossen
und die Userform Preisliste wo dein Code steht geöffnet, um einen neuen Artikel anzulegen
jetzt kommt aber die MsgBox bitte erst Artikel auswählen könnte man noch
einen zusätzlichen Button anlegen der den neuen Artikel anlegt.
Dann würde alles funkionieren
Viele Grüsse
Frank
AW: CommandButton
05.11.2008 13:54:00
fcs
Hallo Frank,
weitere Buttons anlegen ist natürlich kein Problem. Problem ist die entsprechende Prozedur :-)
Für neue Artikel muss in dem ausgewählten Blatt die nächste freie Zeile ermittelt werden, in die die Daten des Artikel eingetragen werden sollen.
Außerdem sollten wesentliche Eingaben geprüft werden.
Da ich die Namen der Steuerelemente mit den Daten für die Artikelnummer und Bemerkung bei neuen Artikeln nicht kenne hab ich im Code-Beispiel XXXXX eingefügt.
Gruß
Franz

Private Sub CommandButtonNeu_Click()
Dim rng As Range, lngZeileNeu As Long, wks As Worksheet
'Eingaben Prüfen
If Me.XXXXX1  "" Then 'Artikelnummer ist eingetragen
If Not IsNumeric(Me.Preis) Then
MsgBox "Eingabewert für Preis (" & Me.Preis & ") ist keine Zahl!"
Else
If MsgBox(Prompt:="Neuen Artikel anlegen?" & vbLf & vbLf _
& "Artikelnummer: " & Me.XXXXX1 & vbLf _
& "Artikel-Bemerkung: " & Me.XXXXX2 & vbLf _
& "Preis: " & Me.Preis & vbLf _
& "Datum: " & Format(Date, "DD.MM.YYYY"), _
Buttons:=vbQuestion + vbOKCancel, _
Title:="Neuer Artikel") = vbOK Then
Set wks = ThisWorkbook.Sheets(wsh_name)
With wks
'Prüfen, ob neue Artielnummer bereits vorhanden
Set rng = .Range("A:A").Find(Me.XXXXX1, LookIn:=xlValues, lookat:=xlWhole)
If rng Is Nothing Then 'Neue Artikelnummer nicht gefunden
'Nächste leere Zelle in Spalte A (Artikelnummer) ermitteln
lngZeileNeu = .Cells(.Rows.Count, 1) + 1
'Werte eintragen
.Cells(lngZeileNeu, 1).Value = Me.XXXXX1 'Artikelnummer
.Cells(lngZeileNeu, 2).Value = Me.XXXXX2 'Bemerkung
.Cells(lngZeileNeu, 3).Value = CDbl(Me.Preis) 'Preis
.Cells(lngZeileNeu, 4).Value = Date 'Datum
Else
MsgBox "Die Artikel-Nummer '" & Me.XXXXX1 & "' existiert bereits!"
End If
End With
End If
End If
Else
MsgBox "Eingabewert für Artikel-Nummer fehlt!"
End If
End Sub


Anzeige
AW: CommandButton
05.11.2008 14:19:13
Frank
Hallo fcs
Laufzeitfehler 9
Set wks = ThisWorkbook.Sheets(wsh_name)
bekomme nun Fehlermeldung im Code
AW: CommandButton
05.11.2008 17:09:12
fcs
Hallo Frank,
wsh_name ist eine Variable, die den Namen des Tabellenblatts mit den Artikelnummern enthalten soll.
Bei der vorherigen Prozedur hatte es ja auch so funtkioniert. Deshalb dachte ich, dass die Variable bei irgendeiner Aktion im Formular einen Wert zugewiesen bekommt.
Außerdem muss das Tabellenblatt in der Arbeitsmappe sein, in der das Makro gespeichert ist (ThisWorkbook).
ggf. muss du die Variable durch den Wert eines Steuerelements ersetzen (Me.xyz.Value) oder durch den Namen des Blattes ("Tabelle1").
Gruß
Franz
Anzeige
AW: CommandButton
07.11.2008 09:42:15
Frank
Hallo Franz,
passt soweit alles bis auf eines,
die Artikelnummer beginnen in Zeile 5
momentan wir in Zeile 1 übergeben
also ab Zeile 5 in die nächst freie Zeile.

Private Sub CommandButton6_Click()
Dim rng As Range, lngZeileNeu As Long, wks As Worksheet
'Eingaben Prüfen
If Me.cboArtikelNr  "" Then 'Artikelnummer ist eingetragen
If Not IsNumeric(Me.Preis) Then
MsgBox "Eingabewert für Preis (" & Me.Preis & ") ist keine Zahl!"
Else
If MsgBox(Prompt:="Neuen Artikel anlegen?" & vbLf & vbLf _
& "Artikelnummer: " & Me.cboArtikelNr & vbLf _
& "Artikel-Bemerkung: " & Me.Bemerkung & vbLf _
& "Preis: " & Me.Preis & vbLf _
& "Datum: " & Format(Date, "DD.MM.YYYY"), _
Buttons:=vbQuestion + vbOKCancel, _
Title:="Neuer Artikel") = vbOK Then
Set wks = ThisWorkbook.Sheets(wsh_name)
With wks
'Prüfen, ob neue Artielnummer bereits vorhanden
Set rng = .Range("A:A").Find(Me.cboArtikelNr, LookIn:=xlValues, lookat:=xlWhole)
If rng Is Nothing Then 'Neue Artikelnummer nicht gefunden
'Nächste leere Zelle in Spalte A (Artikelnummer) ermitteln
lngZeileNeu = .Cells(.Rows.Count, 1) + 1
'Werte eintragen
.Cells(lngZeileNeu, 1).Value = Me.cboArtikelNr 'Artikelnummer
.Cells(lngZeileNeu, 2).Value = Me.cboBezeichnung 'Bezeichnung
.Cells(lngZeileNeu, 3).Value = CDbl(Me.Preis) 'Preis
.Cells(lngZeileNeu, 4).Value = Date 'Datum
.Cells(lngZeileNeu, 5).Value = Me.Bemerkung 'Bemerkung
Else
MsgBox "Die Artikel-Nummer '" & Me.cboArtikelNr & "' existiert bereits!"
End If
End With
End If
End If
Else
MsgBox "Eingabewert für Artikel-Nummer fehlt!"
End If
End Sub


Könntest du mir dies noch ändern dann wäre mein Wochenende gerettet.
Viele Grüsse
Frank

Anzeige
AW: CommandButton
07.11.2008 11:38:00
fcs
Hallo Frank,
passe die folgende Zeile an, in der die neu Zeilennummer berechnet wird.

'Nächste leere Zelle in Spalte A (Artikelnummer) ermitteln
lngZeileNeu = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'oder
lngZeileNeu = Application.WorksheetFunction.Max(5, .Cells(.Rows.Count, 1).End(xlUp).Row + 1) _


Gruß
Franz

AW: CommandButton Danke
07.11.2008 11:55:29
Frank
Hallo Franz,
"PERFEKT"
vielen Dank nochmals für deine ausdauernde Hilfe
ich habe wieder einiges dazu gelernt.
Ein schönes Wochenende wünscht Dir
Frank
AW: CommandButton
10.11.2008 14:31:00
Frank
Hallo Franz,
ich habe noch ein Problem festgestellt wenn ich in der ComboBox1
keinen Kunden auswähle bekomme ich keinen Hinweis mit einer MsgBox
sondern eine Fehlermeldung in VBA.
------Set wks = ThisWorkbook.Sheets(wsh_name)------
Gruss
Frank

Private Sub CommandButton6_Click()
Dim rng As Range, lngZeileNeu As Long, wks As Worksheet
'Eingaben Prüfen
If Me.cboArtikelNr  "" Then 'Artikelnummer ist eingetragen
If Not IsNumeric(Me.Preis) Then
MsgBox "Eingabewert für Preis (" & Me.Preis & ") ist keine Zahl!"
Else
If MsgBox(Prompt:="Neuen Artikel anlegen?" & vbLf & vbLf _
& "Artikelnummer: " & Me.cboArtikelNr & vbLf _
& "Artikel-Bemerkung: " & Me.Bemerkung & vbLf _
& "Preis: " & Me.Preis & vbLf _
& "Datum: " & Format(Date, "DD.MM.YYYY"), _
Buttons:=vbQuestion + vbOKCancel, _
Title:="Neuer Artikel") = vbOK Then
Set wks = ThisWorkbook.Sheets(wsh_name)
With wks
'Prüfen, ob neue Artielnummer bereits vorhanden
Set rng = .Range("A:A").Find(Me.cboArtikelNr, LookIn:=xlValues, lookat:=xlWhole)
If rng Is Nothing Then 'Neue Artikelnummer nicht gefunden
'Nächste leere Zelle in Spalte A (Artikelnummer) ermitteln
lngZeileNeu = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Werte eintragen
.Cells(lngZeileNeu, 1).Value = Me.cboArtikelNr 'Artikelnummer
.Cells(lngZeileNeu, 2).Value = Me.cboBezeichnung 'Bemerkung
.Cells(lngZeileNeu, 3).Value = CDbl(Me.Preis) 'Preis
.Cells(lngZeileNeu, 4).Value = Date 'Datum
.Cells(lngZeileNeu, 5).Value = Me.Bemerkung 'Bemerkung
Else
MsgBox "Die Artikel-Nummer '" & Me.cboArtikelNr & "' existiert bereits!"
End If
End With
End If
End If
Else
MsgBox "Eingabewert für Artikel-Nummer fehlt!"
End If
End Sub


Anzeige
AW: CommandButton
10.11.2008 15:39:57
fcs
Hallo Frank,
mit folgender Fehlerbehandlung wird der Fehler abgefangen.
Alternativ kannst du auch eine entsprechende If-Abfrage auf wsh_Name einbauen.
Gruß
Franz

Private Sub CommandButton6_Click()
Dim rng As Range, lngZeileNeu As Long, wks As Worksheet
'Eingaben Prüfen
On Error GoTo Fehler
If Me.cboArtikelNr  "" Then 'Artikelnummer ist eingetragen
Set wks = ThisWorkbook.Sheets(wsh_Name)
If Not IsNumeric(Me.Preis) Then
MsgBox "Eingabewert für Preis (" & Me.Preis & ") ist keine Zahl!"
Else
If MsgBox(Prompt:="Neuen Artikel anlegen?" & vbLf & vbLf _
& "Artikelnummer: " & Me.cboArtikelNr & vbLf _
& "Artikel-Bemerkung: " & Me.Bemerkung & vbLf _
& "Preis: " & Me.Preis & vbLf _
& "Datum: " & Format(Date, "DD.MM.YYYY"), _
Buttons:=vbQuestion + vbOKCancel, _
Title:="Neuer Artikel") = vbOK Then
With wks
'Prüfen, ob neue Artielnummer bereits vorhanden
Set rng = .Range("A:A").Find(Me.cboArtikelNr, LookIn:=xlValues, lookat:=xlWhole)
If rng Is Nothing Then 'Neue Artikelnummer nicht gefunden
'Nächste leere Zelle in Spalte A (Artikelnummer) ermitteln
lngZeileNeu = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Werte eintragen
.Cells(lngZeileNeu, 1).Value = Me.cboArtikelNr 'Artikelnummer
.Cells(lngZeileNeu, 2).Value = Me.cboBezeichnung 'Bemerkung
.Cells(lngZeileNeu, 3).Value = CDbl(Me.Preis) 'Preis
.Cells(lngZeileNeu, 4).Value = Date 'Datum
.Cells(lngZeileNeu, 5).Value = Me.Bemerkung 'Bemerkung
Else
MsgBox "Die Artikel-Nummer '" & Me.cboArtikelNr & "' existiert bereits!"
End If
End With
End If
End If
Else
MsgBox "Eingabewert für Artikel-Nummer fehlt!"
End If
Fehler:
If Err.Number  0 Then
Select Case Err.Number
Case 9
MsgBox "Fehler-Nr. " & Err.Number & vbLf & Err.Description & vbLf & vbLf _
& "Es wurde kein Kundenblatt gewählt oder Blatt '" & wsh_Name & "' existiert nicht!"
Case Else
MsgBox "Fehler-Nr. " & Err.Number & vbLf & Err.Description
End Select
End If
End Sub


Anzeige
AW: CommandButton
10.11.2008 16:04:51
Frank
Hallo Franz,
passt,
ich habe noch versucht folgende Zeile einzubauen
------Preis.Value = Format(Preis, "0.00")------
da wenn ich einen neuen Artikel mit nur einer Stelle hinterm komme anlege z.B Preis 3,3
und ich diesen wieder aufrufe wäre es schön wenn 3,30 da stehen würde also mit Null
aber funktioniert leider nicht
Gruss
Frank
AW: CommandButton
10.11.2008 16:45:00
fcs
Hallo Frank,
beim Schreiben der Zahlen-Werte in die Tabelle, solltest -oder besser muss- du Zahlen aus dem User-Form in die Tabelle schreiben. Deshalb die Umwandlung des Textbox-Inhalts per CDbl(...) in eine Zahl. Sonst hast du ggf. Probleme bei Formeln und anderen Funktionen in der Tabelle.
Die Zahlenformatierung muss du dann in der Tabelle vornehmen.
Wenn du den Preis im UF mit zwei Nachkommastellen darstellen möchtest, dann muss du diesen beim Einlesen des Wertes in die Textbox entsprechend formatieren oder die Texteigenschaft der Zelle einlesen.
Gruß
Franz

Beispiele:
With Worksheets("Daten")
If IsNumeric(.Cells(Zeile,Spalte) Then
Me.Preis=Format(.Cells(Zeile,Spalte).Value,"#,##0.00")
Else
Me.Preis=""
End If
End With
oder
With Worksheets("Daten")
Me.Preis=.Cells(Zeile,Spalte).Text
End With


Anzeige
AW: CommandButton
11.11.2008 07:37:40
Frank
Hallo Franz,
untere Zeile ist im Code rot hinterlegt.
If IsNumeric(.Cells(Zeile,Spalte) Then
wo muss ich den ganzen Code einfügen
Viele Grüsse
Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige