Hot News aus dem CAD.de-Newsletter:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  UsedRangeTest bricht vorzeitig ab, warum?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   UsedRangeTest bricht vorzeitig ab, warum? (706 mal gelesen)
CAD-Freakle
Mitglied
CAD


Sehen Sie sich das Profil von CAD-Freakle an!   Senden Sie eine Private Message an CAD-Freakle  Schreiben Sie einen Gästebucheintrag für CAD-Freakle

Beiträge: 189
Registriert: 05.10.2015

erstellt am: 25. Feb. 2017 17:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


UsedRangeTest_20170225.jpg


UsedRangeTest_20170225-1.txt

 
Hallo an Alle,

zur Zeit versuche ich mich in VBA einzulesen. Jetzt wollte ich
die "Replace-Funktion" ausprobieren.

Zuerst habe ich die Daten in A1:C5 geschrieben,siehe JPG.
Dann habe ich das Listing geschrieben siehe TXT.

Bei der Ausgabe fehlen jetzt die letzten beiden Zellen C14 und C15, siehe JPG.

Warum? Wo ist der Fehler?

Danke an alle Helfenden.

------------------
--------------------------
Freundliche Grüsse
CAD-Freakle
INV Prof. 2015 SP2 (Student)

_-_-_-_-_-_-_-_-_-_-_-_-_-
Sodele, Jetzetle, ab gehts
-_-_-_-_-_-_-_-_-_-_-_-_-_

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Ehrenmitglied V.I.P. h.c.
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 27. Feb. 2017 08:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CAD-Freakle 10 Unities + Antwort hilfreich


110_911_ergebnis-test.png


110_911_testmappe1.zip

 
Hallo CAD-Freakle,

also bei mir kommt die Ausgabe etwas anders heraus, siehe Bild - bei mir wird keine 5. Zeile geschrieben, was ich nach dem Code auch absolut logisch finde. Also entweder hast du andere Ausgangsdaten oder einen anderen Code für deine Routine.

Es wäre vielleicht einfacher zum nachvollziehen, wenn du a) eine Excel-Mappe mit den Testcodes und Testdaten anhängst, damit sich das der geneigte Helfer nicht selber machen muss und du b) erklärst, was du erreichen möchtest, sonst kann ich zumindest schwer sagen, ob und wenn ja wo ein Fehler in der Logik ist. Wie gesagt, im Moment kommt meiner Ansicht nach genaus das raus, was die Programmlogik vorgibt. Ich versteh zwar nicht so ganz warum du die ersten vier Zeilen 10 Zeilen darunter noch mal schreiben und darin was ersetzen möchtest, aber das sagt die Prozedur und das tut es, zumindest bei mir.

Wenn deine Ausgabe wirklich anders ist  

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Freakle
Mitglied
CAD


Sehen Sie sich das Profil von CAD-Freakle an!   Senden Sie eine Private Message an CAD-Freakle  Schreiben Sie einen Gästebucheintrag für CAD-Freakle

Beiträge: 189
Registriert: 05.10.2015

erstellt am: 27. Feb. 2017 09:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Beispieldaten_20170227.jpg


UsedRangeTest.zip

 
Hallo Stefan,

Danke für deine Antwort.

Zitat:
- bei mir wird keine 5. Zeile geschrieben, was ich nach dem Code auch absolut logisch finde.

Naja, Du hast in "If ze < ObergrenzeZe And sp <= ObergrenzeSp Then" das Gleichheitszeichen herausgenommen.

Zitat:
a) eine Excel-Mappe mit den Testcodes und Testdaten anhängst, damit sich das der geneigte Helfer nicht selber machen muss.

Hab's nochmal neu gemacht, siehe Datei im Anhang

Zitat:
b) erklärst, was du erreichen möchtest, sonst kann ich zumindest schwer sagen, ob und wenn ja wo ein Fehler in der Logik ist.

Was ich erreichen möchte:
Die im ersten Beitrag gezeigten Daten sind nur Beispieldaten, um zu sehen ob und wie es überhaupt geht.

Im angehängt JPG (Beispieldaten_20170227.jpg) habe ich eine Tabelle mit Profilen, diese möchte ich
auseinanderklammüsern um die Daten einzeln zu verwenden.
Die Datei Bespieldaten_20170227.JPG ist wiederum nur ein kleiner Ausschnitt von mehreren Tabellen.

Zitat:
Wenn deine Ausgabe wirklich anders ist ?

Ich habe deine Excel genommen und mit meinen Beispieldaten getestet. Es kommt wieder ein unvollständiges
Ergebnis heraus. Warum? Wo liegt der Fehler?

Wenn ich in den VBA-Editor gehe sehe ich kein Modul von Dir, Warum?

------------------
--------------------------
Freundliche Grüsse
CAD-Freakle
INV Prof. 2015 SP2 (Student)

_-_-_-_-_-_-_-_-_-_-_-_-_-
Sodele, Jetzetle, ab gehts
-_-_-_-_-_-_-_-_-_-_-_-_-_

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Ehrenmitglied V.I.P. h.c.
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 27. Feb. 2017 10:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CAD-Freakle 10 Unities + Antwort hilfreich


100_911_UsedRangeTest.zip

 
Hallo CDA-Freakle,

Zitat:
Original erstellt von CAD-Freakle:
Naja, Du hast in "If ze < ObergrenzeZe And sp <= ObergrenzeSp Then" das Gleichheitszeichen herausgenommen

Nee, eigentlich nicht, ich hab per Copy-Paste denm Code genommen, den du oben als Text angehangen hast. Aber egal ;)

Zitat:
Original erstellt von CAD-Freakle:
Wenn ich in den VBA-Editor gehe sehe ich kein Modul von Dir, Warum?

Ist nicht als Modul drin, sondern direkt als Code am Tabellenblatt.

Zitat:
Original erstellt von CAD-Freakle:
Ich habe deine Excel genommen und mit meinen Beispieldaten getestet. Es kommt wieder ein unvollständiges
Ergebnis heraus. Warum? Wo liegt der Fehler?

Okidoki, ich hab jetzt mit deiner angehängten Tabelle probiert (die vom Code her jetzt auch etwas anders ist mit OR), da bekomm ich erst mal dasselbe Ergebnis wie du. Nachdem ich mir den Code jetzt etwas genauer angeschaut habe denke ich habe ich den Fehler in deiner Logik auch gefunden:

Code:
For Each Element In ZellenInhalt()
    If ze < ObergrenzeZe Or ze = ObergrenzeZe Then      'And sp <= ObergrenzeSp
        ZellenInhalt(ze, sp) = Replace(ZellenInhalt(ze, sp), "/", "---\/---")
       
        Cells(ceze, sp) = ZellenInhalt(ze, sp)
        ze = ze + 1
        ceze = ceze + 1
    ElseIf sp >= ObergrenzeSp Then  'ze >= ObergrenzeZe And
                Exit Sub
    Else
            If ze >= ObergrenzeZe Then
            ze = 1
            sp = sp + 1
            ceSp = ceSp + 1
            ceze = ze + 10
           
            End If
    End If

Next



Du läufst deine For each ... Next Schleife im Beispiel 15x durch, eben für jedes Element (so benannst du das) der 5x3 Matrix einmal. Aber du benutzt Element gar nicht, sondern holst die Inhalte aus einem Feld, was du dir vorher aus dem bereich selber vorgehalten hast.

Jetzt ist es so, dass du nach deiner Logik, wenn du in der 6. Zeile angekommen bist (im Else-Zweig) den zeilenzähler zurücksetzt und in die nächste Spalte springst, aber keine Ausgabe für diesen Schleifendurchlauf machst! Da du diesen Bereich zweimal durchläufst (also zweimal zur näcshten Spalte springen musst) fehlen dir logischerweise 2 "Ergebnisse".

Ich würde versuchen das etwas einfacher zu machen, ungefähr so:

Code:

Dim spalte              As Integer
Dim ze_read            As Integer
Dim ze_write_offset    As Integer

Dim ObergrenzeZe As Integer
Dim ObergrenzeSp As Integer
Dim Element

ze_read = 1
spalte = 1
ze_write_offset = 10
ObergrenzeZe = UBound(ZellenInhalt, (1))
ObergrenzeSp = UBound(ZellenInhalt, (2))


For Each Element In ZellenInhalt()
    ' das aktuelle Element umwurschteln und unten hinschreiben
    Cells(ze_write_offset + ze_read, spalte) = Replace(Element, "/", "---\/---")
   
    ' nächste Zeile
    ze_read = ze_read + 1
   
    ' falls "unten" angekommen Zeile und Spalte zum nächsten schreiben anpassen
    If ze_read > ObergrenzeZe Then
        ze_read = 1
        spalte = spalte + 1
    End If
   
Next

End Sub



Auf diese Art läufst du eben alle deine Elemente durch, schreibst das jeweils an die gerade angepeilte Zelle und passt nur die "Zielzelle" für den nächsten Durchlauf an, wenn du unten abgekommen bist.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 693
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 27. Feb. 2017 10:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CAD-Freakle 10 Unities + Antwort hilfreich

Hallo CAD-Freakle

Das Problem liegt in deiner ForEach-Schlaufe.
Du arbeitest nicht mit dem "Element" weiter, sonder mit dem generierst ein weiteres aus dem "ZellenInhalt"-Array.

Entweder schreibst du dein Code mit zwei verschachtelten ForNext-Schlaufen um, oder verwendest dein "Element" in der ForEach-Schlaufe.

Zweiteres würde z.B. so aussehen

Code:
Public Sub UsedRangeTest()
    Dim Auswahl As Range
    Dim Element As Range

    Worksheets("Tabelle1").Activate
    Set Auswahl = ActiveSheet.UsedRange

    For Each Element In Auswahl
        Element.Offset(10, 0).Value = Replace(Element.Value, "/", "---\/---")
    Next

End Sub


Gruss Andreas

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Freakle
Mitglied
CAD


Sehen Sie sich das Profil von CAD-Freakle an!   Senden Sie eine Private Message an CAD-Freakle  Schreiben Sie einen Gästebucheintrag für CAD-Freakle

Beiträge: 189
Registriert: 05.10.2015

erstellt am: 28. Feb. 2017 06:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


UsedRangeTest3.txt

 
Hallo Andreas, Hallo Stefan,

erstmal Danke Euch beiden.

So nebenbei, VBA ist schon eine recht störrische Materie.
Mir fällt da sofort das grau Tier mit den langen Ohren ein.

So, jetzt zum Thema:
Da mich meine eigenen Variablennamen überrannt haben, habe ich
nochmal von vorne angefangen. Außerdem habe ich nochmal
"Endlosschleife an: gesucht und gelesen, next gesucht".

Mein Code funktioniert jetzt auch, wie ich mir das vorstelle. Siehe Anhang.

Über weitere Anregungen und Kritik freue ich mich.

------------------
--------------------------
Freundliche Grüsse
CAD-Freakle
INV Prof. 2015 SP2 (Student)

_-_-_-_-_-_-_-_-_-_-_-_-_-
Sodele, Jetzetle, ab gehts
-_-_-_-_-_-_-_-_-_-_-_-_-_

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz