Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
796to800
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
796to800
796to800
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

For Befehl Name Definieren

For Befehl Name Definieren
28.08.2006 00:46:53
Julian
Hallo Habe folgendes Problem:
Ich fülle ein Tabellenblatt (eine Rechnung) mit einer For Schleife aus einem Userform Modul heraus. Das Dient dazu das sich die Userform über die Schleife freie Zeilen Sucht und anschließen seine Daten weitergibt. In der Userform sind jeweils 2 Zeilen Headline und 6 Zeilen mögliche Posten. Über der ersten Headline sollen aber bei jedem neuen Tag eine Zeile leer gelassen werden. Aber diese eine Zeile wird dann von den anderen Posten benutzt und ausgefüllt. Wie kann ich diesem For Befehl beibringen, das er mir erst ab der ersten Headline Zeile zum zählen anfangen soll? Anbei Code:

Private Sub CommandButton1_Click()
Dim Lnr As Double
'******************Zeile in Rechnung****************************************
' Überprüfung ob im Bereich LNR eine freie Zeile ist und wenn ja, dann dort eintragen
' Headline 1
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr + 1, 1) = TextBox1.Text
Sheets("Tabelle1").Cells(Lnr, 1) = Lnr
Exit For
End If
Next Lnr
' Headline 2
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox2.Text
Exit For
End If
Next Lnr
'Posten 1
For Lnr = 25 To 334 Step 3
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox3.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox1.Text
Exit For
End If
Next Lnr
'Posten 2
For Lnr = 25 To 334 Step 3
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox4.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox2.Text
Exit For
End If
Next Lnr
'Posten 3
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox5.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox3.Text
Sheets("Tabelle1").Cells(Lnr, 1) = Lnr
Exit For
End If
Next Lnr
'Posten 4
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox6.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox4.Text
Sheets("Tabelle1").Cells(Lnr, 1) = Lnr
Exit For
End If
Next Lnr
'Posten 5
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox7.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox5.Text
Exit For
End If
Next Lnr
'Posten 6
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox8.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox6.Text
Exit For
End If
Next Lnr
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Befehl Name Definieren
28.08.2006 01:00:32
MichaV
Hallo,
schreibe ab der 2. Headline:
For Lnr = Lnr To 334
dann beginnt die For-Schleife erst mit dem Wert, mit dem sie in der Schleife davor abgebrochen wurde.
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: For Befehl Name Definieren
28.08.2006 01:41:21
Julian
Hey super fixe Antwort,
leider wenig erfolg er schreibt mir die Headline 1 brav da wo sie hinsol und headline 2 in die leere Zeile drüber sie code:
'*****************************Zeile in Rechnung****************************************
' Überprüfung ob im Bereich LNR eine freie Zeile ist und wenn ja, dann dort eintragen
' Headline 1
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr + 1, 1) = TextBox1.Text
Exit For
End If
Next Lnr
'**************************************************************************************
' Headline 2
For Lnr = Lnr To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox2.Text
Exit For
End If
Next Lnr
'**************************************************************************************
Anzeige
AW: For Befehl Name Definieren
28.08.2006 01:48:58
MichaV
Hallo,
logisch, Du schreibst ja die 1. Headline auch in die Zeile unter der gefundenen leeren Zeile.
Du musst Deine Suche also auch eine Zeile weiter fortsetzen:
' Headline 2
For Lnr = Lnr + 1 To 334 'oder gleich +2. denn die 1. Zeile unter der gefundenen Zeile ist ja schon mit der 1. Headline belegt
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: For Befehl Name Definieren
28.08.2006 02:43:28
Julian
Danke das hat vorerst funktioniert. Wenn ich ein zweites mal das jedoch mache gehts nicht mehr.
Der Sinn soll sein, das es sich hierbei um eine Sammelrechnung handel für eine Zeitung. Hierbei müssen jeweils einzeln die Seiten und Thema (Headlines) angeben werden und detailiert mit Menge was gemacht wurde z.B. Textzeilen, Rechtschreibprüfung, Fotos groß klein mittel etc (Posten). Jetzt kann es sein das eine Rechnung nur 1 Artikel (Take) hat oder 20. Der rest von Wegen gesamtbetrag und Zahlungstext soll dann möglichst nahe an den Posten stehen. Mit anderen Worten statische Elemente sind blöd wenn z.B. zwei Seiten gebraucht werden weil 1 Posten nicht mehr drauf passt und die restliche Seite bis auf den Text unten leer bleibt. Anbei eine Datei mit dem Quellcode, Userform und Layout und auf dem zweiten Blatt ein Beispiel wie es aussehen soll. Vielleicht siehst du was in Meiner Denkweise was falsch ist. Nochmals danke für die tatkräftige Unterstützung um 3 Uhr morgens...
https://www.herber.de/bbs/user/36204.xls
Anzeige
AW: For Befehl Name Definieren
29.08.2006 16:12:03
Julian
Habe das Problem jetzt glaube ich gelöst mit einer Doppel Bedingung in der ersten IF Cause Bedingung:
'*****************************Zeile in Rechnung****************************************
' Überprüfung ob im Bereich LNR eine freie Zeile ist und wenn ja, dann dort eintragen
' Headline 1
For Lnr = 25 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" And Sheets("Tabelle1").Cells(Lnr + 2, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr + 2, 1) = TextBox1.Text
Exit For
End If
Next Lnr
'**************************************************************************************
' Headline 2
For Lnr = Lnr + 2 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox2.Text
Exit For
End If
Next Lnr
'**************************************************************************************
'Posten 1
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox3.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox1.Text
Exit For
End If
Next Lnr
Danke nochmals
Anzeige
AW: For Befehl Name Definieren
29.08.2006 17:01:43
Julian
Hallo Habe jetzt ein neues Problem damit. Die Daten sauber zu schreiben habe ich soweit in den Grief bekommen. Jetzt ist mir nur aufgefallen das wenn man nur Headline 2 alleine beschreibt es zu schwierigkeiten kommt. Er füllt nämlich dann immer die eine leerzeile so wie früher bei headline 1. Deshalb habe ich mir überlegt die wenn dann zu ändern und zu prüfen ob eins leer ist. Das funktioniert alles super ABER, wie kann ich den Ablauf springen lassen. Es geht darum wenn er erkannt hat das in 1 nichts ist soll er eine abgeänderte Version abspielen die in der If Cause drinnen ist und dann anschließen die Ursprüngliche Headline 2 übergehen und erst wieder bei posten einsetzen. Aber mein GoTo funktioniert nicht. Deshalb habe ich die MSGBox dazwischen um zu sehen ob er springt oder nicht.
'*****************************Zeile in Rechnung****************************************
' Überprüfung ob im Bereich LNR eine freie Zeile ist und wenn ja, dann dort eintragen
' Headline 1
For Lnr = 26 To 334
If TextBox1.Value = "" And Sheets("Tabelle1").Cells(Lnr, 1) = "" And Sheets("Tabelle1").Cells(Lnr + 1, 1) = "" Then
'Wenn Headline 1 nicht beschrieben wird und wenn eine leere Zeile gefunden wurde und die Zeile darunter auch leer ist dann schreibe Textbox 2 da rein und gehe zu Posten sonst fahr alte Prozedur
Sheets("Tabelle1").Cells(Lnr + 1, 1) = TextBox2.Text
Exit For
GoTo Sprung:
Else
If Sheets("Tabelle1").Cells(Lnr, 1) = "" And Sheets("Tabelle1").Cells(Lnr + 1, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr + 1, 1) = TextBox1.Text
Exit For
End If
End If
Next Lnr
'**************************************************************************************
' Headline 2
MsgBox ("Bin bei Headline 2 bei normalen Fluß")
For Lnr = Lnr + 2 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox2.Text
Exit For
End If
Next Lnr
'**************************************************************************************
Sprung:
'Posten 1
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox3.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox1.Text
Exit For
End If
Next Lnr
Was muss ich tun das er mir einfach weiter springt und alles was zwischen Else und Posten 1 ist auslässt?
Anzeige
AW: For Befehl Name Definieren
31.08.2006 00:30:11
MichaV
Hallo,
Sorry, Dein Code ist irgendwie unübersichtlich geworden. Versuch mal so. Leider ist die Hauptarbeit nicht von mir, aber ich war Dir ja noch eine Antwort/ Lösung schuldig.
http://www.online-excel.de/fom/fo_read.php?f=1&bzh=13043&h=13040&ao=1#a123x
Option Explicit

Private Sub CommandButton1_Click()
Dim r As Long
Dim rngArray As Range
Dim rngLeereZellen As Range
With Sheets("Tabelle1")
Set rngLeereZellen = Range("a26:a334").SpecialCells(xlCellTypeBlanks)
For Each rngArray In rngLeereZellen.Areas
If rngArray.Cells.Count > 9 Then
r = rngArray.Cells(1).Row
Exit For
End If
Next rngArray
If r = 0 Then MsgBox "kein Platz für Eintrag": Exit Sub
'Headline 1
.Cells(r + 1, 1) = TextBox1.Text
'Headline 2
.Cells(r + 2, 1) = TextBox2.Text
'Posten 1
.Cells(r + 2 + 1, 1) = TextBox3.Text
.Cells(r + 2 + 1, 2) = ComboBox1.Text
'usw. usw. bis
'Posten 6
.Cells(r + 2 + 6, 1) = TextBox8.Text
.Cells(r + 2 + 6, 2) = ComboBox6.Text
End With
End Sub

Das mit den Leerzeilen habe ich noch nicht ganz kapiert. Kommen die Leerzeilen dadurch zustande, daß Zellen in Excel gelöscht werden oder dadurch, daß nicht alle Felder in der UserForm nacheinander ausgefüllt werden? Brauchst Du noch eine Lösung, ohne Leerzeilen zu schreiben, obwohl nicht alle Felder ausgefüllt sind?
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: For Befehl Name Definieren
31.08.2006 12:35:14
Julian
Hey Super für deine AW. Habe inzwischen auch eine Lösung gefunden in dem ich einfach durch MSGboxen mir sagen hab lassen wo sich die Prozedur wann befindet. Dann habe ich die If Bedingung geändert und so umgestalltet das ein Sprung nicht mehr notwendig ist. (Siehe Code) Das mit den Leerzeilen ist so: Im Ersten Take steht in Headline 1 "Ausgabe 27 vom 11.11.1911" in der 2 Headline "Seite 1/2". Dann im nächsten Take handelt es sich immer noch um Ausgabe 27 aber Seite 3/4. Deshalb bleibt headline 1 Leer und dann soll er sich aber mit einer Leerzeile an den Letzen Posten von Take 1 anhängen. Muss leider zugeben das es langssam wirklich unübersichtlich wird.
Jetzt habe ich aber noch eine Frage speziell an dich (passt nicht mehr zur Überschrift im Forum). Das was in Headline 1 und Headline 2 eingetragen wird soll Unterstrichen werden. Aber nur das was in Headline 1/2 steht. Hab da ein bischen was probiert und am Schluss durfte ich alles nochmal schreiben weil der Code so hin war, das wenn ich irgendwo im VBA hingeklickt hab die Meldung kahm Fehler, Dokument wiederherstellen.
Dim Lnr As Double
'*****************************Zeile in Rechnung****************************************
' Überprüfung ob im Bereich LNR eine freie Zeile ist und wenn ja, dann dort eintragen
' Headline 1,2 oder nur 2
For Lnr = 26 To 334
If TextBox1.Value = "" And Sheets("Tabelle1").Cells(Lnr, 1) = "" And Sheets("Tabelle1").Cells(Lnr + 1, 1) = "" Then
Sheets("tabelle1").Cells(Lnr + 1, 1) = TextBox2.Value
Selection.Font.Underline = xlUnderlineStyleSingle
Exit For
'/
Else '-
'\
If Sheets("Tabelle1").Cells(Lnr, 1) = "" And Sheets("Tabelle1").Cells(Lnr + 1, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr + 1, 1) = TextBox1.Text
Selection.Font.Underline = xlUnderlineStyleSingle
Sheets("Tabelle1").Cells(Lnr + 2, 1) = TextBox2.Text
Selection.Font.Underline = xlUnderlineStyleSingle
Exit For
End If
End If
Next Lnr
'**************************************************************************************
'Posten 1
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox3.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox1.Text
Exit For
End If
Next Lnr
'**************************************************************************************
'Posten 2
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox4.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox2.Text
Exit For
End If
Next Lnr
'**************************************************************************************
'Posten 3
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox5.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox3.Text
Exit For
End If
Next Lnr
'**************************************************************************************
'Posten 4
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox6.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox4.Text
Exit For
End If
Next Lnr
'**************************************************************************************
'Posten 5
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox7.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox5.Text
Exit For
End If
Next Lnr
'**************************************************************************************
'Posten 6
For Lnr = Lnr + 1 To 334
If Sheets("Tabelle1").Cells(Lnr, 1) = "" Then
Sheets("Tabelle1").Cells(Lnr, 1) = TextBox8.Text
Sheets("Tabelle1").Cells(Lnr, 2) = ComboBox6.Text
Exit For
End If
Next Lnr
'**************************************************************************************
End Sub
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige