Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1476to1480
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

Variable als Zeilennummer vergeben

Variable als Zeilennummer vergeben
01.03.2016 15:55:53
Marco
Schönen guten Tag allerseits.
Ich als VBA-Rookie habe folgendes Problem:
An einer bestimmten Stelle (I1) wird ein Startwert, in J2 ein Endwert eingegeben.
Nun hätte ich gerne eine VBA-Schleife, die bei der Zeile "Startwert" beginnt zu arbeiten und bei der Zeile "Endwert" damit aufhört. (Zwischen-Code lasse ich jetzt mal aus, der funktioniert).
Ich bekomme es einfach nicht hin, dass diese Schleife durchlaufen wird. Folgend mein bisheriger Code:
Dim Anzahl As String
Dim a As Integer
Dim Zeilen As Long
Dim z As Integer
Dim Startzeile As Long
Dim s As Integer
Dim Endzeile As Long
Dim e As Integer
Anzahl = Range("C" & ActiveCell.Row).Value
Startzeile = Cells(9, 1).Value
Endzeile = Cells(10, 1).Value
For z = Startzeile To Endzeile
.
.
.
Next z

Könnt ihr mir bitte helfen? Herzlichen Dank vorab!
Gruß, Marco

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

Betreff
Datum
Anwender
Anzeige
AW: Variable als Zeilennummer vergeben
01.03.2016 16:09:45
Steve
Hallo Marko,
das liegt daran, dass "Cells(9,1)" die Adresse "A9" aufweist und nicht "I1" wie du behauptest. Achte beim Eingeben von Cells-Befehlen mal auf die Tooltips.
lg Steve

AW: Variable als Zeilennummer vergeben
01.03.2016 16:11:41
EtoPHG
Hallo Marco,
Empfehlung an alle Rookies: Benutzt die XL-Hilfe zu den Objekten, wie Cells(row, column) (Cursor auf das Keyword setzen und F1)
Dann siehst du:
Startzeile = Cells(9, 1).Value   ' Entspricht A9
Endzeile = Cells(10, 1).Value   ' Entspricht A10

I1 und J2 müsste aber heissen:
Startzeile = Cells(1, 9).Value   ' Entspricht I1
Endzeile = Cells(2, 10).Value   ' Entspricht J2

Gruess Hansueli

Anzeige
AW: Variable als Zeilennummer vergeben
01.03.2016 16:23:50
Luschi
Hallo Hansueli,
ich bin mir sicher, das viele Fragesteller in den Excelforen diese Taste noch nie benutzt haben, um an die Feinheiten des jeweiligen Problems zu gelangen.
Gruß von Luschi
aus klein-Paris

AW: Variable als Zeilennummer vergeben
01.03.2016 16:36:08
Marco
Vielen Dank für diesen Hinweis - habe ich sofort umgesetzt (und im Kopf gespeichert). Nach dieser Änderung allerdings tut sich nun gar nichts mehr. Der Zwischen-Code, den ich vorher ausgelassen habe, funktioniert nun nicht mehr (hat er vorher aber). Bestimmt ist das ein typischer Definierungsfehler im Kopf des Codes. Hier ist er noch einmal in Gänze:

Sub KopierenDruck()
Dim Anzahl As String
Dim a As Integer
Dim Zeilen As Long
Dim z As Integer
Dim Startzeile As Long
Dim s As Integer
Dim Endzeile As Long
Dim e As Integer
Anzahl = Range("C" & ActiveCell.Row).Value
Startzeile = Cells(1, 9).Value
Endzeile = Cells(2, 10).Value
For z = Startzeile To Endzeile
For a = 1 To Anzahl
Sheets("GS-Vorlage").Select
Range("E5").Value = a
Sheets("Tageszeitungen").Select
Range("D" & ActiveCell.Row).Select
Selection.Copy
Sheets("GS-Vorlage").Select
Range("F3").Select
ActiveSheet.Paste
Sheets("Tageszeitungen").Select
Range("A" & ActiveCell.Row).Select
Selection.Copy
Sheets("GS-Vorlage").Select
Range("F4").Select
ActiveSheet.Paste
Sheets("Tageszeitungen").Select
Range("E" & ActiveCell.Row).Select
Selection.Copy
Sheets("GS-Vorlage").Select
Range("F5").Select
ActiveSheet.Paste
Range("F3:F5").Select
With Selection.Font
.Name = "Century Gothic"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.349986266670736
.ThemeFont = xlThemeFontMinor
End With
Selection.Font.Italic = False
Selection.Font.Bold = True
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
Selection.InsertIndent -1
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Next a
Sheets("Tageszeitungen").Select
Next z
End Sub

Viele Grüße,
Marco

Anzeige
Dann kommen wir zu Lektion 2 und 3 in VBA
01.03.2016 18:48:50
EtoPHG
Marco,
Lektion 2.
VBE kennt einen Debug-Modus (F8 für Einzelschritte ausführen)
Die nächste auszuführende Zeile wird gelb markiert.
Fährt man mit dem Cursor über Variablen, wird deren Inhalt angezeigt.
Ich vermute stark, dass nicht J2 sondern J1 als Endzeile gemeint war und das J2 als Endzeile nun 0 enthält und damit die For-Next Schleife nie durchlaufen wird. Überprüfe das mit dem Debugger!
Lektion 3.
An deinem Code liegt Einiges im Argen:
Zahlen als String definiert: z.B. Anzahl)
Ungleiche Variablen Definitionen: z.B. Endzeile As Long(Richtig), aber a As Integet(Falsch)
und vor allem .Select angewendet, das zu 99.99% überflüssig, fehleranfällig und kontraproduktiv ist. Lies dazu Der Malermeister und sein Geselle und verkürze deinen Code auf ein Zehntel!
Zudem ist ActiveCell eine gefährliche Sache, die besser durch absolute Zellangaben oder definierte Zellen/Bereichsnamen ersetzt werden sollte!
Gruess Hansueli

Anzeige
AW: Hallo Profis - Widersprüche im Code !!!
02.03.2016 00:33:07
Piet
Hallo Marco + Profis
ich wollte in den Thread garnicht reingehen, habe nur zum SPASS das Makro geladen,
um es für Marco zu verkürzen. Dabei ist mir erstaunliches aufgefallen, was man erst
sehen kann wenn man den Code bereinigt und dadurch seine Grundstruktur versteht
Das war für mich so verblüffend das ich den Thread noch einmal offen gestellt habe, damit
die wirklich guten Programmierer sich den -gekürzten Code- noch einmal ansehen können.
Wir sprechen hier von zwei For Next Schleifen die m.E. völlig überflüssig sind !!
Kopiert wird in den Tageszeitungen mit: Range("D" & ActiveCell.Row).Copy
aber die Active Zelle wird, wenn ich das richtig sehe - nie veraendert?
Und kopiert wird im Blatt "GSVorlage" immer in -dieselbe Zielzelle-
Dazu wird jedesmal der Bereich neu formatiert. Wer veraendert ihn denn?
Bin ich schon zu alt zum Programmieren, oder ist das Programm "seltsam"
Dieser Befehl ist mir nicht bekannt, vielleicht verschiebt er ja Zeilen?
Range("F3:F5").InsertIndent -1
Damit verschiebt er aber nicht die ActiveCell.Row im Blatt "Tageszeitung"
Wüsste man welche Zeile damit gemeint ist könnte man auf den ganzen Quatsch
mit ActiveCell.Row verzichten und ohne Sheets("Tageszeitung").Select kopieren.
Komisch ist dass das Programm vor dem aendern ja gelaufen haben soll!
Aber wenn ich mir den Code so ansehe komme ich da echt ins grübeln?
mfg Piet
'Zusammengefastes Programm (ohne Sheet().Select)

Sub KopierenDruck()
'(ohne Dim Zeilen)
Anzahl = Range("C" & ActiveCell.Row).Value
Startzeile = Cells(1, 9).Value
Endzeile = Cells(2, 10).Value
For z = Startzeile To Endzeile
For a = 1 To Anzahl
Sheets("GS-Vorlage").Range("E5").Value = a
Sheets("Tageszeitungen").Select
'"Tageszeitungen" kopieren
Range("D" & ActiveCell.Row).Copy
'in Sheets("GS-Vorlage") kopieren
Sheets("GS-Vorlage").Range("F3").PasteSpecial xlAll
'"Tageszeitungen" kopieren
Range("A" & ActiveCell.Row).Copy
'in Sheets("GS-Vorlage") kopieren
Sheets("GS-Vorlage").Range("F4").PasteSpecial xlAll
'"Tageszeitungen" kopieren
Range("E" & ActiveCell.Row).Copy
'in Sheets("GS-Vorlage") kopieren
Sheets("GS-Vorlage").Range("F5").PasteSpecial xlAll
Sheets("GS-Vorlage").Range("F3:F5").InsertIndent -1
'Formatierung rausgenommen, völlig überflüssig !!
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Next a
Sheets("Tageszeitungen").Select
Next z
End Sub

'Extra Programm zum formatieren
Sub GSVorlage_Font_formatieren()
With Sheets("GS-Vorlage").Range("F3:F5").Font
.Name = "Century Gothic"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.349986266670736
.ThemeFont = xlThemeFontMinor
'2. Teil aus Selection Font
.Italic = False
.Font.Bold = True
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
End Sub

Anzeige
AW: .InsertIndent ist TextEinzug vor ZellInhalt. orT
02.03.2016 09:58:14
Marco
Ganz vielen Dank erst einmal für all Eure Antworten. Ich sehe natürlich ein, dass ich da einen Mist zusammengebaut habe. Als erstes werde ich mich also mal mit den empfohlenen (Lehr-)Links beschäftigen.
Kurz noch einmal zur Funktionsweise, der Einfachheit halber abgekürzt auf drei Werte:
Tabellenblatt A enthält eine Liste von Daten (viele Zeilen).
Aus dieser Liste sollen nun Wert 1 und Wert 2 an eine jeweils feste Stelle in das Tabellenblatt B kopiert werden. Wert 1 und Wert 2 sind von Zeile zu Zeile unterschiedlich, stehen aber immer in der selben Spalte (sagen wir mal C & D).
Nun kommt für Wert 3 die erste Schleife ins Spiel. Dieser Wert 3 steht in ebenfalls in Tabellenblatt 1, Spalte E, und wird - für eine fortlaufende Nummerierung an eine feste Stelle in Tabellenblatt 2 ausgegeben. Nehmen wir an, der Wert 3 = 3. Dann sollen also Wert 1 und Wert 2 übergeben werden, Wert 3 beträgt an dieser Stelle 1 und wird ebenfalls übergeben.
Nun wird das Tabellenblatt 2 gedruckt.
Anschließend können Wert 1 und Wert 2 stehen bleiben, Wert 3 beträgt nun allerdings 2 und wird im Tabellenblatt B entsprechend verändert. Danach Druck von Tabellenblatt B.
Ist der Endwert 3 erreicht, kommt die zweite Schleife ins Spiel:
Mache das alles mit jeder Zeile (von bis), die vorher auf Tabellenblatt A mit "Startzeile" und Endzeile" vom User definiert wurden.
oder anders erklärt:
- Kopiere Wert 1 und Wert 2 aus Tabellenblatt A an eine bestimmte Stelle in Tabellenblatt B
- Analysiere Wert 3 aus Tabellenblatt A
- Fang bei 1 an zu zählen, übertrage Wert 3, mit 1 beginnend, ebenfalls an eine bestimmte Stelle in Tabellenblatt B
- Drucke Tabellenblatt B
- Mach das so lange, bis das Maximum von Wert 3 erreicht ist (erste Schleife)
- Springe in die nächste Zeile und beginne von vorn. (zweite Schleife)
- Mach das für alle Zeilen, die vorher in Tabellenblatt A angegeben wurd (Zeile X bis Zeile Y)
- fertig
Ich hoffe, ich habe mich bei der Erklärung nicht allzu sehr verzettelt.
Danke & VG
Marco
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige