@Luc, betr. knifflige For Next Schleife

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: @Luc, betr. knifflige For Next Schleife von: Henri
Geschrieben am: 09.02.2005 08:36:26

Hi Luc,

bin jetzt wieder online und teste das Ganze. Die Parametereingabe von dir würde ich sehr gern ausprobieren.
Übrigens wird kein #BEZUG bei mir ausgegeben. Wo ist denn das bei dir der Fall??
Zu der If Verzweigung.
--> WENN der Wert der aktuellen Zelle ungleich dem Wert einer Zelle darüber ist DANN
(hier suche ich nach dem Ende des jeweiligen Landes)
WENN die Zelle nicht leer ist DANN
Zeile einfügen (damit ich da die Formel reinschreiben kann) und
PivotTabellenFormel in die Zelle schreiben:
=PIVOTDATENZUORDNEN(Statistik!A2;"Deutschland A")
(heißt also dass ich die Summe von A (und M und Z) des jeweiligen Landes haben möchte)
ANSONSTEN wenn schon eine Leerzeile existiert keine einfügen sondern nur die Formel reinschreiben
ANSONSTEN wenn der Wert der Zelle gleich dem der Darüberliegenden ist eine Zeile weiter springen.

Übrigens ist die PivotTabelle nur Mittel zum Zweck. Ich benötige sie nur wegen der Werte und wie diese aussieht ist mir Schnuppe. Ich könnte das Tabellenblatt mit der PivotTabelle auch verstecken.
Gesamtdaten gebe ich übrigens nicht aus, sondern nur die Summe von jeweils A, M und Z der einzelnen Länder.

Hoffe ich habe das einigermassen verständlich erklärt.

viele Grüße
Henri


Betrifft: AW: Fortsetzung - Schleife läuft
von: Luc
Geschrieben am: 03.02.2005 12:34:31

Mahlzeit Henri,
komme erst jetzt dazu - 1 gute & 1 schlechte Nachricht!
1. neue Schleife funktioniert und nur Kopf und Fuß auszutauschen, dann läuft's so wie du wolltest,
2. du wirst noch viel Arbeit haben - die PivotTabÜbernahme klappt offensichtlich nicht. In deinen Algorithmen muss ein Denkfehler stecken, so dass nicht existente Pivotdaten angesprochen wdn (#BEZUG!). Wenn du dabei Hilfe brauchst, musst du mir die IF-Verzweigung unter Bezug auf die jeweils generierten Formeln und ihren Bezug erklären (aber möglichst einfach - prägnant/symbolisch).
Dann noch eine Empfehlung: Die Daten aus der Datenbank entweder ohne Endsumme (compute weglassen) ausgeben oder die 2 Zeilen bei der Abarbeitung in xl weglassen (auch in PivotTab) - sieht doof aus (Summe kann bei Bedarf auch xl bilden). Ins Pgm könntest du außerdem noch Spaltenformatierung einbauen für die "Gesamt"-Einschübe (ist das mit der 3.Spalte so beabsichtigt?). Ansonsten doch recht clever gemacht, da wundert's mich schon, dass du nur eine Schleifenart kennst! So, jetzt aber die Austauschzeilen:
Schleifenkopf:
statt `For i = intZeile To intEnd´ jetzt 2 Zeilen...
`i = intZeile´ und danach der neue Kopf `Do While i < intEnd - 1´
Schleifenfuß:
statt `Next i´ jetzt 2 Zeilen...
`i = i + 1´ und danach der neue Fuß `Loop´
Ja, und dann lief alles durch bis oberhalb Endsumme (hab ich hier schon korrigiert).
Übrigens habe ich eine neue Parametereingabe, bei der alle Angaben auf 1x in eine Inputbox eingegeben wdn) für das Pgm geschrieben. Diese wdn außerdem auf formale Richtigkeit geprüft. Falls' dich interessiert... sag's und du kannst es bekommen.
So, dann teste mal schön. Die Formelgenerierung ist aber auch tückisch mit ihren vielen verschachtelten "-Zeichen.
Gruß Luc
PS: Falls das alles vorzeitig im Archiv verschwinden sollte, such einfach nach Luc oder poste 'ne neue mail mit Luc im Betreff.

Bild


Betrifft: AW: OK z.K.genommen von: Luc
Geschrieben am: 09.02.2005 08:58:55

Hallo Henri,
vielleicht ist der Bezug in meinem Material anders als in deinen Originalen, dann müsste es das ja schon sein. Falls du an der InputBox-Alternative interessiert bist, teile es mit, wenn du den Test durch hast.
Bis dann, Luc


Bild


Betrifft: ich haben fertig... fast von: Henri
Geschrieben am: 09.02.2005 13:43:22

Hi Luc,
jetzt funktioniert mein Code.
Hier https://www.herber.de/bbs/user/17723.xls kannst du dir das Ergebnis mal anschauen.
Habe nur noch ein Problem das ich nicht lösen konnte.
Für das letzte Land (Weissrussland) habe ich es nicht geschafft eine Pivotdatenzuordnung zu bekommen. Habe die Formel händisch in die Zelle eingegeben (=PIVOTDATENZUORDNEN(Statistik!A2;"Weissrussland A")) und selbst da bekomme ich ein #NV. Ich kapiere einfach nicht warum.
Ja, ansonsten funkt es. Falls dir ncoh was einfällt, sag bescheid. Wenn du mir noch die alternative Inputfunktion verrätst bin ich fast zufrieden.

Danke
Henri


Bild


Betrifft: AW: ...der Rest von: Luc
Geschrieben am: 09.02.2005 16:53:22

Okay Henri,
mir geht's heut nicht besonders, total erkältet, aber trotzdem... Rätsel über Rätsel: MS muss auch ein X-Files-Archive haben. Bei mir reagiert die sub nicht genauso wie bei dir:
1. habe ich den genannten Fehler, weil das Statistik-Kriterium so nicht in den DS exist.
2. die letzte Zeile macht keine Schwierigkeiten, aber intEnd in der do_while-Abfrage nur um 1 erhöhen, damit diese Zeile durch die sub nicht mitbehandelt wird. Dann müsste es auch bei dir mit dem letzten Satz klappen.
Es kann natürlich auch sein, dass ich die Eingabeaufforderungen in der InputBox falsch verstehe (meine: C - B - 2), aber so schien es mir logisch.
Sub Statistik()
Static inpBox As String 'neue Var: inpBox,ixVar
Dim strQuelleDaten As String, strQuelleLand, strVergleich As String, strFormel As String
Dim strRowName As String, strColumnName As String, ixVar As String
Dim i As Integer, intEnd As Integer, intZeile As Long
Dim wksDaten As Worksheet

'On Error GoTo ERRORHANDLER

'Daten abfragen********************************************************************************
'***neu*gestaltete*Parametereingabe*mit*nur*1*InputBox************************A*N*F*A*N*G******
If inpBox = "" Then
inpBox = "SpSAK:SpVD:ZlDB"
End If
ixVar = "eintragen"
ix: inpBox = InputBox("Bitte folgende Standortangaben " & ixVar & "..." & vbLf & _
"- SpBuchst Statistik-Auswertkriterium," & vbLf & _
"- SpBuchst Vergleichsdaten," & vbLf & _
"- 1.Zeile Datenbereich", "Eingabe Datenstandorte", inpBox)
If inpBox = "SpSAK:SpVD:ZlDB" Or InStr(inpBox, "?") Then
ixVar = "wiederholen": GoTo ix
End If
If inpBox = "" Then Exit Sub
strQuelleLand = UCase(Left(inpBox, InStr(inpBox, ":") - 1))
inpBox = UCase(Mid(inpBox, InStr(inpBox, ":") + 1))
strQuelleDaten = Left(inpBox, InStr(inpBox, ":") - 1)
intZeile = Mid(inpBox, InStr(inpBox, ":") + 1)
inpBox = strQuelleLand & ":" & inpBox
Select Case strQuelleLand
Case "A" To "Z", "AA" To "IV" 'hier Einschränkung bei Bedarf praxisnäher gestalten!
Case Else
inpBox = WorksheetFunction.Substitute(inpBox, strQuelleLand & ":", "?:")
End Select
Select Case strQuelleDaten
Case "A" To "Z", "AA" To "IV" 'hier Einschränkung bei Bedarf praxisnäher gestalten!
Case Else
inpBox = WorksheetFunction.Substitute(inpBox, ":" & strQuelleDaten & ":", ":?:")
End Select
Select Case intZeile
Case "1" To "65535" 'hier Einschränkung bei Bedarf praxisnäher gestalten!
Case Else
inpBox = WorksheetFunction.Substitute(inpBox, ":" & intZeile, ":?")
End Select
If InStr(inpBox, "?") Then
ixVar = "wiederholen"
GoTo ix
End If
'***neu*gestaltete*Parametereingabe*mit*nur*1*InputBox****************************E*N*D*E******
usw. wie gehabt! Aber im Prinzip reicht deine Methode mit 3 Boxen auch, solange man nicht merkt, dass es drei sind. Noch toller ist natürlich eine Userform. Wenn du das aber nur für deine eigene Anwendung konzipiert hast, lohnt sich das alles nicht.

Machs gut, bleib gesund und lass hören. Wenn von mir nichts mehr kommt, lieg ich endgültig flach.

Ciao Luc


Bild


Betrifft: AW: ...der Rest von: Henri
Geschrieben am: 10.02.2005 08:29:11

Hi Luc,
na dann ich wünsche dir gute Besserung.
Dein Code klappt super, vielen Dank.
Falls noch was ist melde ich mich.
Übriggens hat mein Problem mit der letzten Zeile nichts mit meinem VBA Code zu tun.
Aber ich werde es schon irgendwie reparieren...

Danke und Grüße
Henri


 Bild

Beiträge aus den Excel-Beispielen zum Thema "@Luc, betr. knifflige For Next Schleife"