Angerf1st Geschrieben 20. August 2009 Teilen Geschrieben 20. August 2009 Hallo, ich komme dann ma direkt zu meinem problem. ich schreibe gerade ein Programm in das man Excel Dateien Importieren kann (In eine Excel Datei) und in der bestimmte Sachen vergliechen werden und dann berechnet. Das ganze Programm ist nicht sonderlich "Variabel" vorallem muss der Benutzer immer eingeben wie viele Zeilen es sind sonst vergleicht das Programm erst garnicht. Meine Frage Wie kann ich es anstellen das Excel sagen wir mal in Spalte B alle Zeilen zählt (nach unten) bis kein Wert mehr in der zelle steht Er zählt mir praktisch alle zeilen bis zu der Zelle in der kein wert mehr steht dadurch müsste das nicht immer angegeben werden. Durch google bin ich auf die Lösung gekommen "Sheets("Tabelle1").Range(Cells(ZelleA, 2), Cells(ZelleB, 2)).Select" da bekomm ich aber immer einen fehlerlaufzeit fehler (ich habe es auch schon mit einer einfachen for schleife probiert dort bekomm ich aber immer den fehler es wäre kein next vorhanden :confused:) kenn ich aus c++ garnicht Danke schonmal im vorraus (rechtschreibfehler sind genug vorhanden ;P) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
getCppKenntnisse() Geschrieben 20. August 2009 Teilen Geschrieben 20. August 2009 hi, das kannst du z.B. so hier machen: Public Function zellenZaehlen() Dim zaehler As Integer zaehler = 0 Do While ActiveCell <> "" zaehler = zaehler + 1 ActiveCell.Offset(1, 0).Select Loop End Function mfg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 hi, das kannst du z.B. so hier machen: Public Function zellenZaehlen() Dim zaehler As Integer zaehler = 0 Do While ActiveCell <> "" zaehler = zaehler + 1 ActiveCell.Offset(1, 0).Select Loop End Function mfg das ganze zählt mir doch alle zellen oder? wollt eig nur die kompletten zeilen runterzählen in zB Spalte D Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 Guten Morgen, ich nutze folgende Zeilen: Range("E1").Select // Spalte in der gezählt werden soll Range(Selection, Selection.End(xlShiftDown)).Select // Markiert alles bis ein Leeres Feld kommt. zeilen = Selection.Rows.Count // Speichert die Anzahl der Zeilen in einer anderen Variable ab. [/PHP] Vorher hatte ich es auch mit Schleife realisiert, so geht es aber schneller [b]Hinweis #1[/b]: Das geht aber nur wenn Du weißt - so wie bei mir - das ein bestimmtes Feld immer gefüllt ist. Sollte das nicht der Fall sein wird nicht alles markiert, somit nicht gezählt. [b]Hinweis #2[/b]: Im Code-Abschnitt oben haben ich ' (Zeilenkommentar Excel) mit // (Zeilenkommentar PHP) ersetzt damit es aussieht wie ein Kommentar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 Hi danke ich hab das jetz ma so gemacht... Sheets("Tabelle1").Select counter1 = ActiveSheet.Cells(65536, 4).End(xlUp).Row Sheets("Projektelemente").Select counter2 = ActiveSheet.Cells(65536, 2).End(xlUp).Row naja is halt auch nicht variabel gehalten aber war die einfachste lösung für so ein "anfänger wie mich" zumindest in vba -------------------------------------------------------------------------- Mittlerweile hab ich acuh neues Problem: Fehlermeldung 1004. LAufzeitfehler While counter2 > 0 'Fügt die beiden Projekt ID's aus dem Sheet "Projekelemente" zusammen 'damit man sie vergleichen kann zahl2 = ActiveWorkbook.Worksheets("Projektelemente").Cells(ZeilenB, 2) zahl3 = ActiveWorkbook.Worksheets("Projektelemente").Cells(ZeilenC, 3) Speicher(1) = zahl2 Speicher(2) = zahl3 Zahlenkette = Join(Speicher) 'löscht die leerzeichen in "Tabell1" 'und speichert die Zahlenkette in zahl1 zahl1 = ActiveWorkbook.Worksheets("Tabelle1").Cells(ZeilenD, 4) zahl1 = DelSpaces(zahl1) 'Projekt ID's auf Gleichheit prüfen If Zahlenkette <> zahl1 Then ZeilenD = ZeilenD + 1 End If If Zahlenkette = zahl1 Then ZeilenD = 2 ZeilenB = ZeilenB + 1 ZeilenC = ZeilenC + 1 counter2 = counter2 - 1 End If Wend MsgBox "Schleife ist durchgelaufen" die schleife läuft nciht druch kann einer den fehler erkennen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 (bearbeitet) Hi, bitte Code-Zeilen immer mit [_PHP][/php_] (ohne _) einfügen dann kann man den Code besser lesen. Welche Zeile wird denn markiert? [Edit1: Lösung?] Vermutlich liegt das Problem hier: zahl1 = ActiveWorkbook.Worksheets("Tabelle1").Cells(Zeilen D, 4) [/PHP] müsste es nicht [PHP] zahl1 = ActiveWorkbook.Worksheets("Tabelle1").Cells(ZeilenD, 4) heissen? Bearbeitet 21. August 2009 von Maulwurf_der_Schlaue wegen Lösungsvorschlag um Doppeltpost zu vermeiden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 Achso ne, das habe ich gefixt das ist durchs kopieren gekommen leider . Kann es auch daran liegen (was ich erst jetzt gemerkt habe) das er durchläuft und kein wert findet....] bekomm aber trotzdem noch den fehler Laufzeitfehler 1004 also ich bin die logik dahinter durch gegangen und ich kann mir einfach nicht erklären warum er nicht in das else springt außer er findet den wert nicht... warum er dann allerdings weitermacht keine ahnung....zahl1 ist auch nicht NULL also kann da auch kein fehler sein *verzweifel* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 (bearbeitet) Hallo, geh doch den Abschnitt mit dem Debugger Schritt für Schritt durch, und schau bei welcher Zeile er aussteigt, oder kommt die Meldung gleich zu beginn? Poste bitte nochmal den aktuellen Code, Danke. Edit: Ich nehme an ZeilenB/ZeilenC werden initialisiert? If Zahlenkette <> zahl1 Then ZeilenD = ZeilenD + 1 End If If Zahlenkette = zahl1 Then ZeilenD = 2 ZeilenB = ZeilenB + 1 ZeilenC = ZeilenC + 1 counter2 = counter2 - 1 End If [/PHP] Wieso zählst Du ZeilenD um ein Hoch, wenn Du es später ohnehin wieder auf 2 festlegst? Bearbeitet 21. August 2009 von Maulwurf_der_Schlaue Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 Private Sub CommandButton1_Click() Dim Tabelle1kette As String Dim zahl1 As String Dim zahl2 As String Dim zahl3 As String Dim Speicher(1 To 2) As String Dim Zahlenkette As String 'Variable "Tabelle1" Dim ZeilenD As Long ZeilenD = 2 Dim counter1 As Long 'Variablen "Projektelmente" Dim ZeilenB As Long Dim ZeilenC As Long ZeilenB = 2 ZeilenC = 2 Dim counter2 As Long 'Deklaration der Counter (wichtig für die Schleifen) 'Counter 1 zählt die Zeilen im sheet "Tabelle1" 'Counter 2 zahlt die Zeilen im sheet "Projektelemente" Sheets("Tabelle1").Select counter1 = ActiveSheet.Cells(65536, 4).End(xlUp).Row Sheets("Projektelemente").Select counter2 = ActiveSheet.Cells(65536, 2).End(xlUp).Row MsgBox counter1 While counter2 > 0 'Fügt die beiden Projekt ID's aus dem Sheet "Projekelemente" zusammen 'damit man sie vergleichen kann zahl2 = ActiveWorkbook.Worksheets("Projektelemente").Cells(ZeilenB, 2) zahl3 = ActiveWorkbook.Worksheets("Projektelemente").Cells(ZeilenC, 3) Speicher(1) = zahl2 Speicher(2) = zahl3 Zahlenkette = Join(Speicher) 'löscht die leerzeichen in "Tabell1" 'und speichert die Zahlenkette in zahl1 zahl1 = ActiveWorkbook.Worksheets("Tabelle1").Cells(ZeilenD, 4) zahl1 = DelSpaces(zahl1) 'Projekt ID's auf Gleichheit prüfen If Zahlenkette <> zahl1 Then ZeilenD = ZeilenD + 1 If counter2 = 0 Then counter2 = counter1 End If Else ZeilenD = 2 ZeilenB = ZeilenB + 1 ZeilenC = ZeilenC + 1 counter2 = counter2 - 1 End If Wend MsgBox "Schleife ist durchgelaufen"[/PHP] er soll ja dann in dem anderen sheet zeileB und zeileC den 2 wert nehmen und in tabell1 komplett suchen wo er steht dazu muss er ja wieder von vorne anfangen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 Hallo, wenn Du einen Wert in einem Bereich suchst verwende FIND siehe Hilfe (F1 wenn das Wort in Excel markiert ist). So wie es aussieht findet er bei Dir keine Übereinstimmung und läuft dann über die 65536-Zeilengrenze. Ich hab das Skript mit leeren Arbeitsblättern gestartet. Da ich das Skript starten konnte geh ich davon aus das das 'Deklaration der Counter (wichtig für die Schleifen) 'Counter 1 zählt die Zeilen im sheet "Tabelle1" 'Counter 2 zahlt die Zeilen im sheet "Projektelemente" Sheets("Tabelle1").Select counter1 = ActiveSheet.Cells(65536, 4).End(xlUp).Row Sheets("Projektelemente").Select counter2 = ActiveSheet.Cells(65536, 2).End(xlUp).Row [/PHP] nicht richtig funktioniert. Ich muss mich entschuldigen, Du solltest mal um den Counter1 und Counter2 zu ermitteln die For-Schleifen-Version anwenden, ich bin mir im Moment nicht sicher warum meine Version zum ermitteln nicht funktioniert. (Werde mir das nochmal genau ansehen) Dann füge noch folgendes ein und zwar vor dem Wend [PHP] If ZeilenD >= 65536 Or _ ZeilenC >= 65536 Or _ ZeilenB >= 65536 Then MsgBox "Keine Uebereinstimmung fuer '" & zeichenkette & "' gefunden!", vbOKOnly counter2 = 0 End If Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 Also sobald ich dein Code einfüge( vielen vielen Dank übrigends dafür =) ) ohne was bei mir jetz speziel geändert zu haben komm "Keine übereinstimmung.......etc" also wird es wohl darin liegen das er keine übereinstimmung hat.. (warum auch immer das projekt in der tabelle noch nicht drin ist :upps) oder seh ich das falsch und es könnte noch an etwas anderem liegen.. ich glaube unteranderem auch das ich die counter falsch mache obwohl ich eigentlich ja auch nur den counter1 brauchen fällt mir gerade ma so auf(ich idiot). Lass ich mir diesen aber ausgeben kommt er auf die richtige Zeilenwerte was mich dann weider zweifeln lässt ob es nun auch an dem counter liegt oder einfach weil er keinen wert findet Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 22. August 2009 Teilen Geschrieben 22. August 2009 Hallo, hab mir das ganze nochmal angesehen und versucht Dir zu zeigen was du brauchst: Folgende Variablen: - eine zum Speichern wie viele Zeilen auf Tabelle1 in Spalte D mit Werten gefüllt sind - eine zum Speichern wie viele Zeilen auf Projektelemente in Spalte B/C mit Werten gefüllt sind - eine zählvariable (for-schleife) - eine Range-Variable zum speichern von Zellbezügen (find) - eine Variable mit dem Suchkriterium (Spalte B & Spalte C aus Projektelemente) Ablauf: - ermitteln gefüllte zeilen in spalte D in Tabelle1 - ermitteln gefüllte zeilen in spalte B/C in Projektelemente - for schleife (durchlaufe alle zeilen in Projektelemente Spalte - Suchwort ermitteln - Suchbereich definieren mit Range().select - Suche starten Set gefunden = Selection.Find(What:=Zahlenkette, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) [/php] - Suche auswerten, wenn gefunden ist "is nothing" heisst kein Treffer Wenn es noch Fragen dazu gibt dann sag einfach Bescheid. P.S. Ich könnte jetzt auch mein Excel-Dokument hochladen, dann wäre aber der Lerneffekt gleich null Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 24. August 2009 Autor Teilen Geschrieben 24. August 2009 Hi ich werde es gleich ma testen. Ich hatte übers Wochende kein Internet da ich meine eltern besuchen war. Mfg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 24. August 2009 Autor Teilen Geschrieben 24. August 2009 Hi ich werde es gleich ma testen. Ich hatte übers Wochende kein Internet da ich meine eltern besuchen war. Mfg //Edit also klappen tut das ganze bei mir nur wenn er beim ersten nichts findet er nimmt aber aus dem sheet "Projektelemente"(dort wo SpalteB und C zusammgengefügt werden) nur Zeile3 findet er mit der ID nichts bricht er komplett ab dabei soll er dann zu Zeile4 gehen und mit der ID weiter suchen :'( *verzweifel* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 24. August 2009 Autor Teilen Geschrieben 24. August 2009 /edit2 (kann meine einträge nicht bearbeiten -.-) Nach dem test hab ich den fehler und zwar zählt er obwohl in "Tabelle1" keine zellen mehr eingetragen sind bis 65xxx anstatt sich im Sheet "Projeklemente" die neue zahl zu holen und wieder von vorne mit suchen beginnen...hab mich auch gewundert warum er IMMER in der if schleife gelandet ist in der die ausgabe ist "Keine trallala gefunden".... mit deinem letzen code kann ich allerdings nichts anfangen da ic davon nur bahnhof verstehe :upps trotzedm vielen dank für alles schonmal :uli Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 24. August 2009 Teilen Geschrieben 24. August 2009 Guten Morgen, also so ermittle Ich die Counter // Ermitteln wie viele Werte auf Tabelle 1 maximal vorhanden sind Sheets("Tabelle1").Select ActiveSheet.Range("D1").Select ActiveSheet.Range("D1", Selection.End(xlDown)).Select Tabelle1Zeilen = Selection.Rows.Count // Ermitteln wie viele Einträge auf Tabelle1 gesucht werden sollen Sheets("Projektelemente").Select ActiveSheet.Range("B1").Select ActiveSheet.Range("B1", Selection.End(xlDown)).Select ProjektZeilen = Selection.Rows.Count [/PHP] und so suche ich den Wert von Projektelemente in Tabelle1 [PHP] Range("D1" & ":D" & Tabelle1Zeilen).Select // Suchen nach der Zahlenkette in dem selektierten Bereich Set gefunden = Selection.Find(What:=Zahlenkette, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) // Wurde kein Treffer gefunden ist die Variable gefunden = nothing If gefunden Is Nothing Then // Hier eventuell anpassen, bei mir schreibt er halt in Zeile D das // in Tabelle1 das Projektelement nicht gefunden wurde. ActiveWorkbook.Worksheets("Projektelemente").Range("D" & Zeile) = "kein Treffer" Else // Hier eventuell anpassen, bei mir schreibt er halt in Zeile D wo er das // entsprechende Projektelement in Tabelle1 gefunden hat. ActiveWorkbook.Worksheets("Projektelemente").Range("D" & Zeile) = "gefunden in Zelle " & gefunden.Address End If Bitte beim Einfügen in Excel beachten die // druch ' zu ersetzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Angerf1st Geschrieben 25. August 2009 Autor Teilen Geschrieben 25. August 2009 Gute Morgen, die Schleife läuft nun endlich druch und macht das was sie machen soll:uli. (hab es sogar Manuel nachgeprüft mit einer msgbox und 10000 mal auf OK geklickt :upps). Vielen vielen Dank für deine Hifle =):valen bis zum nächsten fehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.