![]() |
Makro Programmierung Excel - VB
Hi,
Ich hab ein ganz simples Problemchen...und da ich schon zulange mich nicht mehr mit dem proggen befasst habe, fehlt mir der Ansatz. Also mein Problem: Ich habe hier eine Excel Tabelle, in der sollen per Formular einpaar sachen bequem eingetragen werden. Nun soll aber jedesmal, der neue Eintrag in der nächsten Zeile darunter stehen... ![]() ![]()
Code:
Dafür habe ich hier schon das i - als zähler, aber mir fehlt jetzt der Ansatz wie ich eine Schleife realisiere, dass ein neuer Eintrag immer eine Zeile nach unten rutscht -.-
Private Sub CommandButton1_Click()
If TextBox1.Value + TextBox2.Value + TextBox2.Value = "" Then GoTo nix End If ' i = i +1 Sheets("Tabelle1").Cells(i, 1).Value = Date Sheets("tabelle1").Cells(i, 2).Value = TextBox1 Sheets("tabelle1").Cells(i, 3).Value = TextBox2 Sheets("tabelle1").Cells(i, 4).Value = Time$ Sheets("tabelle1").Cells(i, 5).Value = TextBox3 nix: End Sub |
Re: Makro Programmierung Excel - VB
Zitat:
|
Re: Makro Programmierung Excel - VB
Hallo atgis,
das hat aber nichts mit Object – Pascal zu tun. VB: z.B. 1. For … Next - Schleife For i = 1 To 10 .. Next i 2. While … Wend – Schleife While I < 10 … Wend 3. Do While … Loop Do While i < 10 …. Loop 4. Do Until … Loop Do Until i < 10 … Loop Bis bald Chemiker |
Re: Makro Programmierung Excel - VB
Hallo,
ein Problem, Programmieren, Excel benutzen oder was? Das Verschieben der Eingabemaske in Excel wird/kann ganz einfach festgelegt werden: Menü->Extras->Optionen, Register 'Bearbeiten', Checkbox 'Markierung nach den Drucken der Eingabetaste verschieben' -> Richtung: (Unten, Rechts, Oben, Links); ?Oder habe ich(was ja mal vorkommen kann) etwas Falsch verstanden, dann bitte Entschuldigung. |
Re: Makro Programmierung Excel - VB
Hallo,
auf der ![]() |
Re: Makro Programmierung Excel - VB
Hallo atgis,
ich habe jetzt erst verstanden was Du meinst. Es muss zuerst die letzte Zeile bestimmt werden und dann die neuen Werte an die neue Stelle geschrieben werden.
Code:
Function letzteZeile() As long
Dim i As integer, letzteMin As long, letzteMax AS long For I = 1 To 256 letzteMin = Cells(65536, i), End(xlUp).Row if letzeMax < letzteMin then letzteMax = LetzteMin endif next i letzteZeile = letzteMax end function
Code:
Geschrieben und nicht ausprobiert.
private sub Commandbutton1_click()
Cells (letzteZeile+1, 1).Value = Date Cells (letzteZeile+1, 2).Value = TextBox1 … usw. end sub Bis bald Chemiker |
Re: Makro Programmierung Excel - VB
Zitat:
Ich möchte einfach, dass nach jedem Klick auf dem "setzen" Button i um 1 erhöht wird und somit der neue Eintrag eine Zeile weiter unten eingetragen wird...
Code:
Sheets("Tabelle1").Cells(i, 1).Value = Date
Sheets("tabelle1").Cells(i, 2).Value = TextBox1 Sheets("tabelle1").Cells(i, 3).Value = TextBox2 Sheets("tabelle1").Cells(i, 4).Value = Time$ Sheets("tabelle1").Cells(i, 5).Value = TextBox3 ![]() ![]() ![]() ![]() ![]() ![]() |
Re: Makro Programmierung Excel - VB
Was funktionieren würde wäre:
Code:
Doch fangen die Einträge erst bei der Zeile A39670 an :stupid:
Range("A2").Value = Range("A2").Value + 1
Sheets("Tabelle1").Cells(Range("A2").Value, 1).Value = Date Sheets("tabelle1").Cells(Range("A2").Value, 2).Value = TextBox1 Sheets("tabelle1").Cells(Range("A2").Value, 3).Value = TextBox2 Sheets("tabelle1").Cells(Range("A2").Value, 4).Value = Time$ Sheets("tabelle1").Cells(Range("A2").Value, 5).Value = TextBox3 |
Re: Makro Programmierung Excel - VB
Hallo atgis,
leider einige Tipp-Fehler, so müsste es funktionieren:
Code:
Function letzteZeile() As Long
Dim i As Integer, letzteMin As Long, letzteMax As Long For i = 1 To 256 letzteMin = Cells(65536, i).End(xlUp).Row If letzteMax < letzteMin Then letzteMax = letzteMin End If Next i letzteZeile = letzteMax End Function
Code:
Versuchs nochmal.
Sub befuellen()
Cells(letzteZeile + 1, 1) = "Test" Cells(letzteZeile, 2) = "Test2" End Sub Bis bald Chemiker |
Re: Makro Programmierung Excel - VB
Ja Funktioniert...aber dauert sehr lange... es füllt die 5 Zeilen innerhalb von 2 sek. aus... :shock: Das liegt aber wohl an den 65536...
Danke! Nur schade das es nicht noch simpler ging... |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Object-Pascal / Delphi-Language" nach "Programmieren allgemein" verschoben.
Das ist jetzt ja nicht wirklich Delphi ;-) |
Re: Makro Programmierung Excel - VB
Hallo atgis,
verstehe ich nicht, wie schnell kann’s Du denn schreiben? Du willst die Daten doch in einem Formular eingeben und dann mit einem Maus-Click in die Tabelle übertragen. Bis bald Chemiker |
Re: Makro Programmierung Excel - VB
Genau...aber bis die 5 Werte in meiner Tabelle stehen vergehen 2 sek^^... Das macht im Prinzip zwar nichts, aber man merkt, damit erst alle 65536 Zeilen durchgezählt werden. Also hab ich das mal so versucht zu optimieren:
Ich zähle in einer anderen Zelle wie Viele Zeilen bereits einen Inhalt haben: =ZÄHLENWENN(A1:A65536;"<>") 'Das macht eine Excel Funktion
Delphi-Quellcode:
Dann zähle ich den Wert aus dieser Zelle + 1...
Function letzteZeile() As Long
Dim i As Integer, letzteMin As Long, letzteMax As Long For i = 1 To 256 letzteMin = Cells(Sheets("Tabelle1").Cells(1, 6) + 1, i).End(xlUp).Row If letzteMax < letzteMin Then letzteMax = letzteMin End If Next i letzteZeile = letzteMax End Function Jetzt funktioniert es wie ich es wollte! Vielen Dank Chemiker :!: |
Re: Makro Programmierung Excel - VB
du koenntest auch die tag eingenschaft des buttons als zaehler benutzen, d.h. die zuletzt geschriebene zeilennummer dort eintragen
du kannst dir auch das zaehlen bis 65xxx ersparen wenn du nach der zuletzt geschriebenen zeile so suchst :
Delphi-Quellcode:
i sollte dann die erste leere zelle in spalte eins liefern
for i = 1 to 65000
if cells(i,1) = "" then exit for next i |
Re: Makro Programmierung Excel - VB
Hallo Grumble,
es funktioniert aber nur, wenn sich keine leere Zelle in der Spalte befindet. Bis bald Chemiker |
Re: Makro Programmierung Excel - VB
@atgis:
Wenn ich das alles richtig verstanden habe, möchtest du sicherstellen, daß neue Eingaben immer in die Zeile gestellt werden, die unter der bisher letzten Zeile der Tabelle liegt. Ich benutze für solche Zwecke folgende 3 Lösungen um die bisher letzte Zeile einer Tabelle zu bestimmen
Delphi-Quellcode:
Function LastRow1() As Long
LastRow1 = ActiveSheet.Cells(1, 1).End(xlDown).Row End Function
Delphi-Quellcode:
Function LastRow2() As Long
LastRow2 = ActiveSheet.Cells(65536, 1).End(xlUp).Row End Function
Delphi-Quellcode:
Version 1 und 2 sind dann problematisch wenn die Tabelle nicht vollständig gefüllt ist.
Function LastRow3() As Long
With ActiveSheet.UsedRange LastRow3 = .Row + .Rows.Count - 1 End With End Function Version 3 dürfte die zuverlässigste sein, weil hier gleichgültig ist, wo auf dem Sheet sich die Tabelle befindet und ob alle Zeilen der Tabelle vollständig gefüllt sind. Diese Version gibt immer die unterste nichtleere Zeile des WorkSheets zurück. |
Re: Makro Programmierung Excel - VB
Nur so am Rande, für alle Excel- und VB- fragenden...
Da gäbs noch ein Klasse Excel forum,... ![]() Aber noch besser sind dort die Beispielprojekte (auch ein Ende Zeilen/ Spaltenprojekt,... was ja hier benötigt wurde) Reinschauen lohnt sich,... :glaskugel: ich hoffe ich hab mich jetzt nicht strafbar gemacht, indem ich ein anderes forum vorgeschlagen hab :tongue: Also chiao :hi: QuizM |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz