Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1312to1316
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 liefertnulleintrag

Userform liefertnulleintrag
22.05.2013 12:39:25
hartmut
Hallo,
dies ist ein Userformeintrag welcher mir probleme bereitet. Und zwar liefert er mir immer einen 0 Eintrag in meiner Liste, er soll aber in den Spalten 15-20 mir den Wert aus der Tabelle holen wenn der wert vorhanden ist, sollte der Wert nicht vorhanden soll er bei bestätigung diesen Eintrag in die Tabelle über nehmen. Ich kann auch gerne die Datei hochladen wenn es besser ist. Vielleicht kann mir jemand von euch helfen um dieses "verteufelte teil" laufen zu bringen. Danke schon jetzt für eure Hilfen.

Private Sub CommandButton1_Click()
Dim txtCable_Number As Integer
Dim txtcable_type As String
Dim txtendjunction_from As String
Dim txtlocation_from As String
Dim txtendjunction_to As String
Dim txtlocation_to As String
Cells(Rows.Count, 15).End(xlUp).Offset(1, 0).Select
With ActiveSheet.Cells(Rows.Count, 15).End(xlUp)
.Offset(1, 0).Value = CDbl(txtCable_Number)
.Offset(0, 1).Value = txtcable_type
.Offset(0, 2).Value = txtendjunction_from
.Offset(0, 3).Value = txtlocation_from
.Offset(0, 4).Value = txtendjunction_to
.Offset(0, 5).Value = txtlocation_to
End With
'txtCable_Number = ""
'txtcable_type = ""
'txtendjunction_from = ""
'txtlocation_from = ""
'txtendjunction_to = ""
'txtlocation_to = ""
End Sub

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform liefertnulleintrag
22.05.2013 12:44:55
Klaus
Hi,
dies ist fehlerhaft:
Cells(Rows.Count, 15).End(xlUp).Offset(1, 0).Select
With ActiveSheet.Cells(Rows.Count, 15).End(xlUp)

Du selektierst eine Zelle (wozu?), und machst dann mit einer anderen Zellanweisung weiter - die übrigens selbst auch fehlerhaft ist.
Willst du die Letzte Zelle +1 in Spalte 15 haben? Dann so:
With ActiveSheet.cells(activesheet.Cells(activesheet.Rows.Count, 15).end(xlup).row +1 , 15)
oder besser so:
with activesheet
with .cells(.cells(.rows.count, 15).end(xlup).row +1 ,15)
[...]
end with
end with

Grüße,
Klaus M.vdT.

Anzeige
@Klaus: oder besser so
22.05.2013 12:53:51
Rudi
Hallo,
noch besser so:
with activesheet
with .cells(.rows.count, 15).end(xlup)
.offSet(1,0)=....
.offSet(1,1)=....
[...]

Gruß
Rudi

AW: Userform liefertnulleintrag
22.05.2013 15:13:48
hartmut
Hallo Klaus,
ich habe den code jetzt wie du beschrieben hast geändert. er liefert als antwort das die variable nicht deklariert worden ist. (der debugger färbt "CDbl(txtCable_Number)" ein. deswegen habe ich auch die DIM gesetzt welche aber ebenfalls nicht die entsprechende lösung gebracht hat.

AW: Userform liefertnulleintrag
22.05.2013 15:20:00
Klaus
Hi,
hier
.Offset(1, 0).Value = CDbl(txtCable_Number)
versuchst du, txtCable_Number von integer (nicht string?) in double zu verwandeln.
Jetz müssten wir mal wissen, was zur Laufzeit in txtCable_Number steht. Wenn da "5555" steht, ist alles gut. Wenn da "'5555" (als Text) steht, dann auch. Wenn da aber "Hallo Welt" steht, kann das mit der Umwandlung nicht klappen.
ist txtCable_Number eine Variable oder eine Textbox? Beim ersteren: Wann und wo wird die denn gefüllt? Bei letzterem: Dann darfst du die nicht DIMen!
Grüße,
Klaus M.vdT.

Anzeige
AW: Userform liefertnulleintrag
22.05.2013 17:34:50
hartmut
hallo Klaus,
ich habe alle DIM gelöscht. trotzdem kommt die meldung variable nicht deklariert. In der Userform sind 5 Textboxen die gefüllt werden sollen. Die Einträge können sowohl zahlen als auch kombis aus Zahlen und Text sein. z.b. 120LAC9876 oder 20BBA10EG001 oder 10651 usw.

AW: Userform liefertnulleintrag
22.05.2013 17:52:49
hartmut
https://www.herber.de/bbs/user/85463.xls
Hallo Klaus , ich habe eine kleine Beispieldatei hochgeladen. Der Button ist auf der Kabelliste. und die Userform soll mit 6 Textboxen (Spalte 15-20) ausgestattet werden. Dabei sollen neue Daten in die Tabelle eingefügt werden können und wenn ich eine vorhandene Kabelnummer eingebe und auf ändern klick dann sollen sich die anderen Werte einlesen.

Anzeige
AW: Userform liefertnulleintrag
22.05.2013 12:58:19
Erich
Hi Hartmut,
da wird nicht so recht klar, was eigentlich passieren soll.
Ich versuchs mal:
In einer UsertForm gibt es den CommandButton1.
Wird er angeklickt, was soll dann passieren?
Sollen Werte aus einem Tabellenblatt geholt werden?
("er soll aber in den Spalten 15-20 mir den Wert aus der Tabelle holen"
Oder sollen Werte aus der UserFormm in die Tabelle ausgegeben werden?
(z. B. mit ".Offset(0, 1).Value = txtcable_type"
Du deklarierst mit "Dim" Variablen txtCable_Number, txtcable_type usw.
Diesen Variablen wird aber nie ein Wert zugewiesen.
Da txtCable_Number as Integer deklariert ist, hat diese Variable den Wert 0.
Kann es sein, dass txtCable_Number, txtcable_type usw. TextBoxen in deiner UserForm sind,
also überhaupt keine Variablen?
Lösch doch mal testweise die Zeilen, die mit "Dim" beginnen, aus dem Code raus.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Userform liefertnulleintrag
22.05.2013 15:09:10
hartmut
Hallo Erich,
genau es gibt bisher einen Button der mir die einträge in die Liste eintragen soll. Es soll aber ein zweiter dazukommen welcher mir wenn ich die kabelnummer in die userform eintrage die anderen werte dazuholt damit ich diese editieren kann. den gesamten code habe ich aus dem net. meiner einer ist noch nicht fit in vba, deswegen fällt es mir schwer lösungen bzw. probleme zu erkennen oder zu beheben.

was sollen denn die DIM im Code? (owT)
22.05.2013 14:16:00
EtoPHG

AW: was sollen denn die DIM im Code? (owT)
22.05.2013 15:06:03
hartmut
hallo, wenn ich den code so ausführe dann kommt immer die meldung das die variablen nicht deklariert worden sind. deswegen diese DIM eingaben und die untenstehenden als Kommentar.

Anzeige
Control-Elemente... und Codeklasse
22.05.2013 15:24:26
EtoPHG
Hallo Hartmut,
1. Ich nehme an dein Button ist ebenfalls Teil der Userform und dessen Code in deren Codeklasse.
2. Wenn die Meldung kommt, dass die Variablen nicht deklariert sind, dann haben die Steuerelemente (Textboxen) halt nicht genau diese Namen.
3. Das mit der Beispielmappe hochladen wäre eine gute Idee, damit würde die Hilfestellung wesentlich erleichtert.
Gruess Hansueli

AW: Control-Elemente... und Codeklasse
22.05.2013 17:54:25
hartmut
Hallo, ich habe eine beispieldatei hochgeladen allerdings ohne codes weil dieses das nicht wollte. vielleicht reicht es auch so danke schon jetzt an alle die mir helfen.

Anzeige
Deine Controls haben Standardnamen!
22.05.2013 18:26:03
EtoPHG
Hartmut,
Also lauten die Zuweisungen, z.B.
    .Offset(1, 0).Value = CDbl(TextBox1)
.Offset(0, 1).Value = TextBox2
...etc.
Einzig Label1 hast du umgetauft in Cable_number. Das ist aber ziemliche nutzlos, da das ein statisches Label (Bezeichnungsfeld) ist, der variable (eingegebene) Wert aber in der TextBox1 ist.
Gruess Hansueli

Anzeige
AW: Deine Controls haben Standardnamen!
22.05.2013 18:40:22
hartmut
Hallöchen,
dies ist nur eine beispieldatei ohne codes.

AW: Deine Controls haben Standardnamen!
22.05.2013 18:43:08
hartmut
ich habe die Einträge in der Originaldatei geändert trotzdem wird diesselbe Meldung angezeigt. Variable nicht deklariert. gruß Hartmut

mal der Versuch eiern Teilrealisation
22.05.2013 19:05:02
Erich
Hi Hartmut,
schau dir diese Mappe mal an, insbesondere die Namen der Textboxen und Buttons in der UF
und deren Verwendung im Code.
Wenn man bei "Cable Number" eine existierende Kabel-ID (das sind doch keine Numbers...) eingibt
und das Textfeld verlässt (Exit-Ereignis), werden die Daten dieses Kabels angezeigt.
Der Rest ist - danke ich - klar.
Hier die Mappe: https://www.herber.de/bbs/user/85467.xls
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
P.S. an Matze:
Ja, in den aktuellen XL-Versionen Dateien mit Makros standardmäßig die Endung XlSM.
Aber man muss diesen Standard nicht nutzen/befolgen. Es gibt hier einen Grund dafür.
Hartmut und ich haben die Mappe absichtlich als XLS hochgeladen, damit auch Menschen mit etwas älteren XLs
damit etwas anfangen können (aktiv, helfend, oder passiv).

Anzeige
AW: mal der Versuch eiern Teilrealisation
22.05.2013 20:58:20
hartmut
Hallo Erich,
HUT ab. Das sieht schon ganz toll aus. Danke dir. Ich werde es sofort ausprobieren und dann melde ich mich noch einmal. gruß Hartmut

AW: mal der Versuch eiern Teilrealisation
22.05.2013 21:57:53
hartmut
Hallo Erich,
applaus, applaus. Ich hätte wohl noch Tage gebraucht. Es funktioniert Super bis auf eine Kleinigkeit. In meiner Beispieltabelle beginnen die Eintragungen in Zeile 8 in meiner Datei bei Zeile 6. Wenn ich nun in meiner Datei deinen Code eingebe und hier
vTst = Application.Match(tbCable_Number, Cells(8, 15).Resize(1000), 0)
den Wert von Cells(8, 15) in Cells(6, 15) ändere dann fängt die bearbeitung nicht in zeile 6 an, (wenn ich auf "tut nix" klicke. muss ich noch etwas anderes ändern? Oder bin ich auf dem holzweg? Und ich gehe einmal davon aus das Resize(1000) für die Anzahl der Zeilen steht welche bearbeitet werden können?
Gruß Hartmut

Anzeige
AW: mal der Versuch eiern Teilrealisation
22.05.2013 23:45:27
Erich
Hi Hartmut,
für die Anpassung an den Datenbeginn schon in Zeile 6 reicht es nicht aus, Cells(8, 15) in Cells(6, 15) zu ändern.
In der Zeile
vTst = Application.Match(tbCable_Number, Cells(8, 15).Resize(1000), 0)
wird vTst mittels der VERGLEICH-Funktion ab Zeile 8 berechnet.
Nehmen wir mal an, der Treffer ist bei vTst = 1, also gleich in Zeile 8.
Dann werden mit
With Sheets("Tabelle1").Rows(vTst + 7)
die Daten richtig aus Zeile 8 geholt. (Die 7 steht etwa für die Anzahl Überschriftzeilen.)
Bei Änderung von Cells(8, 15) in Cells(6, 15) wäre entsprechend
With Sheets("Tabelle1").Rows(vTst + 7)
in
With Sheets("Tabelle1").Rows(vTst + 5)
zu ändern.
Das "Resize(1000)" war nur meiner Faulheit geschuldet, ist einfach unschön. :-(
Auch deshalb habe ich eine neue Version der Exit-Routine für dich gestrickt:

Private Sub tbCable_Number_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngLast As Range, lngZ As Long, vTst
With Sheets("Tabelle1")
Set rngLast = .Cells(.Rows.Count, 15).End(xlUp) ' letzter Eintrag Sp. 15
' Suche mit Match = VERGLEICH
vTst = 5 + Application.Match(tbCable_Number, _
.Range(.Cells(6, 15), rngLast), 0)
If IsNumeric(vTst) Then                    ' wenn gefunden, ...
lngZ = vTst
tbCable_Number = .Cells(lngZ, 15)            ' war schon gleich
tbCable_Type = .Cells(lngZ, 16)
tbEndjunction_from = .Cells(lngZ, 17)
tbLocation_from = .Cells(lngZ, 18)
tbEndjunction_to = .Cells(lngZ, 19)
tbLocation_to = .Cells(lngZ, 20)
End If
End With
End Sub
Deine Bemerkung "wenn ich auf 'tut nix' klicke. muss ich noch etwas anderes ändern?" verstehe ich nicht.
"tut nix" tut doch rein gar nix. Was soll denn passieren, wenn man auf diesen Button klickt?
Es gibt dazu keinen Code. Den kann man frühestens dann schreiben, wenn man weiß, was er bewirken soll. ;-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: mal der Versuch eiern Teilrealisation
23.05.2013 07:25:42
hartmut
Guten Morgen Erich,
ich habe mal ein wenig rumgemacht und habe 2 leerzeilen eingefügt. dann geht es mit deinem "alten code". ich werde im laufe des tages deinen "neuen code" einpflegen. Nur habe ich noch eine Frage? Wofür steht denn das "Resize"?
Grüße aus Schwalmtal, Hartmut

AW: mal der Versuch eiern Teilrealisation
23.05.2013 10:29:41
hartmut
Hallo Erich,
es klappt. Danke dir. Ich habe nun ein Exit zum schließen der userform eingefügt. doch der befehl "unload.me" bringt die Meldung das dieses ereignis nicht optional ist. Weißt du vielleicht was das bedeutet?

d.h. Unload Me (ohne Pkt.) (owT)
23.05.2013 10:40:35
EtoPHG

Unload Me
23.05.2013 10:57:27
Erich
Hi Hartmut,
ja, das weiß ich wohl. :-)
Die Fehlermeldung war nicht "ereignis nicht optional", sondern "Argument ist nicht optional".
Woher kommt bei dir der Punkt zwischen Unload und Me?
Unload ist eine Anweisung, die genau ein Argument benötigt - die Info, was unloaded werden soll.
Andere Beispiele für Anweisungen sind Dim, Call und ChDir.
Du würdest nicht schreiben
Dim.strText as String, intI as Integer
Call.Makro2
ChDir."C:\Temp"
Stattdessen wäre richtig:
Dim strText as String, intI as Integer
Call Makro2
ChDir "C:\Temp"
Also: Zwischen der Anweisung und dem/den Argument(en) steht immer ein Leerzeichen - aber kein Punkt.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Unload Me
23.05.2013 11:25:07
hartmut
jep Danke euch. Tztztz was so ein kleiner Punkt nicht alles anstellt. Asche über mein Haupt. Aber es gibt noch ein paar Fragen die ich hätte wo ihr mir bestimmt helfen könnt. Aber dazu später mehr. Bis dahin sage ich mal ein großes "DANKE" an euch für eure tatkräftige Unterstützung.
Viele Grüße aus Schwalmtal
Hartmut

AW: Userform liefertnulleintrag
22.05.2013 18:43:54
Matze
Hallo Hartmut,
vielleicht unwichtig, aber ich habe sofort gesehen, das wenn du die Werte dann eingibst ein Zeilenversatz entsteht. Die Kabelnummer wird eine Zeile tiefer eingetragen, so gewollt?
wenn nicht diese:
.Offset(1, 0).Value = Textbox1
in:
.Offset(0, 0).Value = Textbox1
ändern.
Du hast Excel 2010, soll die Datei weiterhin als XLS gespeichert werden?
Ab 2010 haben Datei die Makros enthalten die Endung XlSM
https://www.herber.de/bbs/user/85466.xlsm
Matze

AW: Userform liefertnulleintrag
22.05.2013 21:00:18
hartmut
Ja stimmt Matze. Erich hat mir gerade ein Lösungsvorschlag gesendet. Ich muss ihn einmal ausprobieren ob es das ist. trotzdem erst einmal auch Danke an deine Hilfe für mein Problem. gruß Hartmut

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige