1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

[excel] WENN-Abfrage, 3 Bedingungen

Discussion in 'Office-Programme' started by Tiffiklotz, Sep 18, 2009.

Thread Status:
Not open for further replies.
  1. Tiffiklotz

    Tiffiklotz Byte

    Ich sehe gerade, dass in meinem Programm noch ein Bugs ist, der auch behoben werden sollte. Hier erstmal der Code:

    Code:
        If VorhSigma <= ZulSigma Then                                       'NACHWEIS
            MsgBox "Der Nachweis ist erf&#252;llt!"
        Else
            MsgBox "Der Nachweis ist nicht erf&#252;llt!"
        End If
    Fehler: Auch wenn ZulSigma >VorhSigma erscheint eine MsgBox mit "Der Nachweis ist erf&#252;llt" :confused:

    Und ich wollte noch einen Cmd-Button "End" einbauen, der das Programm einfach nur beendet. Befehl: END
    Jedoch bekomme ich immer diese Fehlermeldung, keine Ahnung wieso:


    Laufzeitfehler '9'
    Index au&#223;erhalb des g&#252;ltigen Bereichs

    Bisher hat&#180;s immer so geklappt :/
     
    Last edited: Oct 17, 2009
  2. Urs2

    Urs2 Megabyte

    Hallo Matthias,

    1. .....If VorhSigma <= ZulSigma Then....
    Manchmal ist VBA starrsinnig.... die Abfrage ist an sich richtig...
    - Setze einen Haltepunkt im VB-Editor in der Zeile "If VorhSigma........" >
    >>> neben dieser Zeile auf den linken vertikalen grauen Rand klicken > ein brauner Punkt erscheint dann dort
    - führe das Programm aus > es hält jetzt in dieser Zeile an
    - wenn Du jetzt mit dem Mauszeiger über VorhSigma und ZulSigma fährst, erscheint der Wert der Variablen > ohne Anführungszeichen ist es eine Zahl, mit ist es ein String
    - dann im Schrittmodus weiter...
    - vielleicht muss er Zahl mit String vergleichen... Dann versuche das (= umwandeln in Double)
    If CDbl(VorhSigma) <= CDbl(ZulSigma) Then
    - normalerweise wird das automatisch gewandelt, aber vielleicht ist die Variable so, dass sie nicht als Zahl erkannt werden kann.
    Die User-Eingaben wurden ja alle schon mit IsNumeric geprüft, sie können gewandelt werden - die errechneten Variablen....?

    Bei der Winddicke 17.5 auch so testen...


    2. .....der das Programm einfach nur beendet. Befehl END
    Du meinst doch das UserForm schliessen? Das geht so nicht!
    Setze einen Button "Abbrechen" ins UserForm, ich nenne ihn hier jetzt "cbnCancel" sein Code im UserForm ist hier, mit dem Automacro für Schliessen mit Kreuz >
    Code:
    Private Sub cbnCancel_Click()
                'freiwillig > speichert die Datei
        Me.Save
                'freiwillig > setzt Focus auf gewünschtes Tabellenblatt
        Worksheets("NameDesGewünschtenBlattes").Activate
                'Pflicht > schliesst Form und geht zu Excel zurück
                'wenn Dein Form nicht UserForm1 heisst, dann jenen Namen
        Unload UserForm1
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, closemode As Integer)
                'wenn Form mit "Kreuz" geschlossen wird, sollen die gleichen Befehle
                'wie beim normalen Schliessen ausgeführt werden
        If closemode <> 1 Then cbnCancel_Click
    End Sub

    3. ......nicht ganz klar, an welche Stelle meines Codes ist den Round Befehl...
    Können > überall, bei der Eingabe, mitten im Code, bei der Ausgabe...
    Wenn nicht spezielle Gründe dagegen sprechen, rundet man natürlich erst die Ausgabe ins Form und ins Blatt.
    Excel rechnet ja so oder so mit seinen 15 signifikanten Stellen, auch wenn 12 davon Nullen sind, es addiert dann einfach Nullen...


    4. Zusatz-Aufgabe
    Wenn das so zu verstehen wäre... dann hatte ER auch gemerkt, dass mit seiner Vorgabe der User weit draussen im Regen steht...
    Wir haben das ja mit der Combo korrigiert, wo für alle Kombinationen auch ihr SigmaNull aufgeführt ist.
    Wäre das ein Lösungsweg >
    - Du rechnest das minimal erforderliche SigmaNull zurück, und gibst es in einem Label aus
    - daneben ein Label mit sinngemäss diesem Text >
    " = SigmaNull erforderlich --- die dafür wirtschaftlichste Kombination Mörtel/Stein in der Combo auswählen --- und neu berechnen"


    >>> die Fehlersuche in einer für mich virtuellen Datei wird wirklich schwierig...
    Mach die Datei fertig, so weit es geht, mit den Aenderungen soweit möglich... Zeit haben wir ja noch...
    Schreib die Dir bekannten Macken in ein Zusatz-Tabellenblatt
    Dann maile sie mir zu, nicht als ZIP, sondern als XLS(M)
    Welches Excel hast Du eigentlich? Ich habe 2003, aber das kommt auch mit anderen Versionen zurecht...

    Gruss Urs
     
  3. Tiffiklotz

    Tiffiklotz Byte

    zu 1)
    Wenn ich das so mache, wie du gesagt hast, erscheint beim Daraufhalten mit der Maus bei allen Variablen "=leer". Das erklärt, warum immer der Nachweis bestanden ist, aber das Programm gibt ja die richtigen Werte aus. Das verstehe ich nicht.

    zu 2)
    Ich habe nun einen einfachen "Beenden"-Button mit dem Befehl END hinbekommen. Ich habe das private_sub über das berechne_sub gesetzt. So klappt es. Das reicht mir eigentlich auch. Sollte sich aber herausstellen, dass das für einen/mehrere meiner bekannten Macken verantwortlich ist, werde ich es ersetzen!

    zu 3)
    Das mit dem Round habe ich alleine hinbekommen, Danke!

    zu 4)
    Das scheint mir die beste Alternative zu sein.
    Da es bei "unserer Aufgabenstellung" dann aber um die wirtschaftlichste Lösung geht, wird das min. erforderliche SigmaNull in jedem Fall und nicht nur bei nicht erfülltem Nachweis ausgerechnet. So hat der Benutzer die Möglichkeit, über das DropDown-Menü eine Alternative zu wählen. Finde ich sehr gut!

    Für min SigmaNull muss also gelten: vorh.Sigma = zul.Sigma (=k*SigmaNull)
    Insofern ist min.SigmaNull = vorhSigma/k

    Die Formel habe ich soweit erstmal eingegeben: Func, Round, Ausgabe, Lbl usw.

    Da spuckt er nun immer aus: "Mehrdeutiger Name". Ich habe aber keine Variable, die genau so heißt! Habe es auch schon mit absurden Namen wie "Test123" versucht. Ich habe da gerade den Kopf nicht für frei ... :aua:


    Zu den bekannten Macken)
    Diese - sind nicht mehr viele - habe ich in einem seperaten Tabellenblatt aufgelistet. Vllt. fällt dir ja etwas dazu ein - wäre sehr toll!
    Ich mache die Mail nun fertig!

    Schönen Abend noch,
    Matthias
     
  4. Urs2

    Urs2 Megabyte

    Hallo Matthias,

    Datei angekommen und geöffnet > OK
    Jetzt muss ich diese zuerst richtig verstehen und dann die Fehler suchen, heute wird das nichts mehr...
    ...Dienstag oder Mittwoch zum Frühstück... Du hast ja noch genügend andere Baustellen...


    1. ....."Mehrdeutiger Name". Ich habe aber keine Variable, die genau so heißt!....
    ...aber eine deklarierte Variable und eine Funktion, die beide MinSigma heissen...
    Das war jetzt eine Fehlersuche der leichteren Art...
    Für den Rest brauche ich dann schon die grosse Lupe !

    Nach meinem letzten Beitrag sind mir noch 2 Punkte eingefallen >

    2. Für das Auswählen der günstigsten Mörtel-/Steinkombination wäre es vielleicht gut, den DropDown nach SigmaNull zu sortieren.
    Dazu kannst Du dann die Tabelle in Blatt "TabelleStein" wie gewünscht nach Spalten A, B oder C sortieren.
    Der DropDown zeigt immer genau diese Sortierung an.


    3. Kleine optische Verbesserung, ohne Einfluss auf die Funktion >
    Im geöffneten DropDown werden Stein+Mörtel+SigmaNull angezeigt, wenn der DropDown geschlossen ist, nur noch SigmaNull.
    Nicht gerade praktisch... mit kleinen Aenderungen kann ich bewirken, dass geschlossen zB so angezeigt wird >
    MörtelGr= IIIa / SteinKl= 36 / SigmaNull= 4.0
    ...die Combo natürlich verlängern, um Platz zu schaffen...

    Gut? Soll ich das gleich einbauen?

    Gruss Urs
     
  5. Urs2

    Urs2 Megabyte

    Ueberprüfe das noch einmal genau.... ich lese die Vorgabe etwas anders... >

    Im UserForm, für die OptButtons, erklärst Du den Unterschied Wand<>Pfeiler so >
    Pfeiler = Wand mit <400 cm2 Querschnittsfläche
    ...wenn Pfeiler, bekommt Abminderung 0.8, sonst 1

    Aber... Seite1, unter der Tabelle >
    Gemauerte Wände mit Querschnittsfläche <=400 cm2 sind nach DIN 1053-1 als tragende Wände nicht zulässig.
    Da erübrigen sich doch für diesen Fall alle weiteren Berechnungen. Oder etwa nicht ?

    Und.... Seite2, Tabelle >
    Wände >=1000 cm2 und
    Pfeiler >=400 und <1000 cm2, aus ungetrennten Hochlochziegeln, ohne Schlitze oder Aussparungen
    ...haben Abminderung = 1

    Und... ebenso dort >
    alle anderen Pfeiler haben Abminderung = 0.8
    Da Pfeiler <400 cm2 schon prinzipiell eliminiert sind, kann sich die Kategorie "alle anderen" doch nur auf >
    "getrennte Ziegel" oder "mit Schlitzen/Aussparungen" beziehen, und nicht auf <400

    Nach meinem Verständnis müsste die Optionsfrage 4 Optionen anbieten >
    Opt1 >>> Wandquerschnitt < 400 cm2 ? .............................................................. = Ausschluss
    Opt2 >>> Wandquerschnitt 400-1000, ungeteilte Ziegel und ohne Schlitze ? ............ = 1
    Opt3 >>> Wandquerschnitt 400-1000, geteilte Ziegel oder mit Schlitzen ? ............... = 0.8
    Opt4 >>> Wandquerschnitt >1000......................................................................... = 1

    Genau deshalb wollte ich im Beitrag #16 auch die horizontale Wandlänge abfragen...
    ...dann erübrigen sich zwar Optionen, weil der Code die Fläche selbst ausrechnen kann...
    ...aber das "mit oder ohne Schlitze" bliebe dann ja immer noch.

    Mit der DIN selbst habe ich keine Erfahrung, ich lese nur was in den Vorgaben steht...
    ...und lese möglicherweise auch nicht richtig,,,

    Gruss Urs
     
    Last edited: Oct 19, 2009
  6. Tiffiklotz

    Tiffiklotz Byte

    zu #44 - 2)
    Das ist gut zu wissen. Das werde ich dann in meiner dritten Aufgabe, die "Programmbeschreibung und Bedienungsanleitung" in WORD verarbeiten.

    zu #44 - 3)
    Finde ich gut, ja. Mach dir blo&#223; keine Sorgen um die Optik. Die bastel ich mir am Ende wieder zurecht!

    zu #45)
    Du hast vollkommen Recht! Der Fehler von mir zieht sich von Anfang an durch. Ich hatte mit einer abgespeckten Excel-Version angefangen, wo ich vor&#252;bergehend auf die Frage "Pfeiler?" mit 1 oder 0 geantwortet habe, um einfach mal ein paar Ergebnisse zu bekommen.

    Ich rekapituliere das nun einmal 'laut':
    Der Benutzer gibt die horizontale Wandl&#228;nge ein?
    Da es aber um die Querschnittsfl&#228;che handelt, ben&#246;tigt man die H&#246;he, also die Lichte Geschossh&#246;he (siehe Beispielrechnung Seite 3).
    Also kann das Programm ohne weitere Benutzereingaben die Querschnittsfl&#228;che berechnen: A = d * hs
    Dann bleiben also zwei OptButtons?
    #1 [...] ungeteilte Ziegel und ohne Schlitze
    #2 [...] geteilte Ziegel oder mit Schlitzen
    Also sieht es dann etwa so aus:

    Code:
    If Flaeche <= 400 Then
    err Message "Gemauerte W&#228;nde mit Querschnittsfl&#228;chen <= 400 cm&#178; sind nach DIN 1053-1"  & vbCr & _
    "als tragende W&#228;nde nicht zul&#228;ssig"  & vbCr & _
    "Bitte &#252;berpr&#252;fen sie Ihre Eingaben"
    GoTo errMessage
    Else If  400 < Flaeche > 1000 And Opt1 = True Then
    Abminderung1 = 1
    Else If 400 < Fl&#228;che > 1000 And Opt2 = True Then
    Abminderung1 = 0.8
    Else [color=red]ist hier noch eine Bedingung n&#246;tig?[/color]
    Abminderung1 = 1
    
    Das letzte "rote else" sind alle W&#228;nde mit A >= 1000
    F&#252;r diesen Fall darf das Programm auch rechnen, wenn kein OptButton ausgew&#228;hlt wurde, weil es jann ja egal ist, wie es um die Ziegel steht.


    Habe ich das so richtig verstanden? Ich hoffe, ja.
    Finde ich gut so!
    Lieben Gru&#223;, und hetz' dich nicht!
    Matthias


    ___
    edit:
    Ich habe das mit der Querschnittsfl&#228;che nochmal nachgerechnet. Also ich bin von meiner Formel oben &#252;berzeugt. A=d*hs
    Das erk&#228;nnt man ja auch an der Skizze...
    Da aber die d&#252;nnst-zugelassene Wand 11,5cm stark ist, erg&#228;be sich daraus eine max. H&#246;he von 35 cm um die 400 cm&#178; zu unterbieten, hmm...

    Vllt. habe ich nur einen gewaltigen Denkfehler bezogen auf die Querschnittsfl&#228;che, oder es handelt sich tats&#228;chlich um den unwahrscheinlichen Fall einer sehr kleinen Wand.
     
    Last edited: Oct 19, 2009
  7. Tiffiklotz

    Tiffiklotz Byte


    Ohja, ich habe das Func. vergessen. In der gleichen Formel habe ich anstatt "Abminderungsfaktor" auch einfach nur "k" geschrieben. War wohl mit den Gedanken wo anders :rolleyes:

    So sieht es nun aus und l&#228;uft:
    (falls du das nicht schon selbst ge&#228;ndert hast)

    Code:
    Function FuncMinSigma()
        
        FuncMinSigma = FuncVorhSigma / Abminderungsfaktor
        'min erf. Sigma f&#252;r wirtschaftlichste M&#246;rtel/Stein-Kombination
        
    End Function
    Habe es auch getestet, und die Formel stimmt. Den Punkt kannst du also schonmal streichen!

    Und noch einen Programmierfehler habe ich entdeckt, falls du das f&#252;r deine Version &#252;bernehmen m&#246;chtest:
    Die Abfrage, ob der Nachweis geeignet ist, war fehlerhaft. Richtig lautet sie:
    Code:
        If Wanddicke >= 11.5 And Wanddicke < 24 And LichteGeschosshoehe <= 275 And Verkehrslast <= 5 And Gebaeudehoehe <= 2000 And Stuetzweite <= 600 Then
            errMessage = ""           'Verfahren geeignet?
        ElseIf Wanddicke >= 24 And Verkehrslast <= 5 And Gebaeudehoehe <= 2000 And Stuetzweite <= 600 Then
            errMessage = ""
        Else: errMessage = "Das vereinfachte Verfahren ist nicht geeignet!" & vbCr & _
                        "(nach DIN 1053-1)"
            GoTo errMessage
        End If
    Vorher wurde eine errMessage herausgegeben f&#252;r d=24.

    Noch 2 kleine &#196;nderungen, die eine betrifft die Abfrage der Wanddicke, die andere habe ich erg&#228;nzt, um negative Werte auszuschlie&#223;en:

    Code:
        If IsNumeric(Wanddicke) = False Then                             'wenn keine Zahl / Wanddicke
            errMessage = "Wanddicke ist keine Zahl"
            GoTo errMessage
        ElseIf Wanddicke < 1 Or Wanddicke > 200 Then               'extreme Werte
            errMessage = "Sie haben eine ung&#252;ltige Wanddicke eingegeben." & vbCr & _
                        "Bitte &#252;berpr&#252;fen sie Ihre Eingaben." & vbCr & _
                        "G&#252;ltig von 1 bis 200 cm"                         'vbCr ist Zeilenschaltung
            GoTo errMessage
        End If 
    Code:
        If Verkehrslast <= 0 Or Stuetzweite <= 0 Or LichteGeschosshoehe <= 0 Or Gebaeudehoehe <= 0 Or Belastung <= 0 Then
            errMessage = "Eine Ihrer Eingaben ist < 0 oder = 0" & vbCr & _
                         "Bitte korrigieren sie Ihre Eingaben"                ' Ausschluss negative Werte
            GoTo errMessage
        End If
    Der Laufzeitfehler wurde dadurch erzeugt, dass die Belastung = 0 war. Und bei der Berechnung von VorhSigma stand die Belastung im Z&#228;hler. Dort ist nat&#252;rlich keine Null zul&#228;ssig ;)

    Mit diesen &#196;nderungen hat sich der in meiner "Macken-Liste" unter Punkt 3) aufgelistete Fehler auch erledigt!
    Bleiben noch 1) und 5) und - was aber eher unwichtig ist - noch 2) :)

    So, mehr konnte ich nicht finden ...
     
    Last edited: Oct 19, 2009
  8. Urs2

    Urs2 Megabyte

    Das ergibt doch keinen Sinn... den vertikalen Querschnitt könnte man vielleicht für die Berechnung einer Keller-Innenwand verwenden, die den horizontalen Erddruck von der Aussenwand ableiten müsste...
    (Jene Beispielrechnung geht stillschweigend von einer Wand aus, nicht von einem Pfeiler...)

    Hier geht es aber um vertikalen Druck und vertikales Knicken.
    Da müsste doch der horizontale Querschnitt der Wand massgebend sein.
    Dieser würde für die Knickberechnung ja auch das Trägheitsmoment des Pfeilers bestimmen.

    Dieses Rechenbeispiel wird erst so sinnvoll. Bei einer 11.5cm dicken Wand >

    400cm2 / 11.5cm = 35cm horizontale Wandlänge... also ein Pfeiler von 11.5cm auf 35cm Querschnitt ist hier das Minimum
    1000cm2 / 11.5cm = 87cm Wandlänge als obere Grenze für die Berücksichtigung der Schlitze.

    Ueberdenke das noch einmal...


    Mögliche Ausführung so oder so >
    - neue Textbox für Wandlänge und 2 OptFelder für Schlitze
    - 4 OptFelder und sonst nichts (wie in meinem #45 beschrieben)

    Ich würde die 4 OptFelder vorziehen, sie sind User-freundlicher
    - Platz im Form ist genug vorhanden
    - der User muss nicht lange (sinnlos) heraussuchen, ob die Wand jetzt genau 303 oder doch 308cm lang ist...
    - ob er in der Nähe der 400er- oder 1000er-Grenze ist, sagt ihm schon das Gefühl... dann kann er immer noch genau rechnen...

    Und nun ?
    Ich mach mich jetzt mal an den Rest...

    Gruss Urs
     
    Last edited: Oct 20, 2009
  9. Tiffiklotz

    Tiffiklotz Byte

    Ja du hast (wieder) Recht :)
    Habe ich ein Glück, dass du Ahnung von Statik und VBA hast!!!
    Seit Heute habe ich wieder Vorlesungen an der Uni, vllt. komme ich dann nach der Sommerpause mal wieder ins statische Denken hinein...

    4 OptButtons finde ich auch benutzerfreundlicher.

    Wow, mehr habe ich mal nicht zu sagen. Ich setz mich nun mal an Mathe ...
     
  10. Urs2

    Urs2 Megabyte

    Statik... mehr als "ganz grosse Prinzipien" ist da nicht hängen geblieben...
    ...um Details werde ich mich dann im nächsten Leben wieder kümmern...

    Bis morgen... falls hier nicht noch ein Komet einschlagen sollte.

    Gruss Urs
     
  11. Urs2

    Urs2 Megabyte

    Hallo Matthias,

    Das Ding ist unterwegs, voller Bemerkungen...
    Deine geliebte MsgBox musste ich jetzt leider doch noch erschlagen :cool:

    Es läuft, aber zum richtig Testen fehlte mir die Energie dann doch.
    Teste es ausführlich unter allen möglichen Bedingungen. Es würde mich nicht wundern, wenn noch irgendwo ein Wurm drin wäre.

    Wenn Fehler drin sein sollten, oder Du etwas wissen oder verändern möchtest, melde Dich hier.

    Gruss Urs
     
  12. Tiffiklotz

    Tiffiklotz Byte

    Super klasse! :):):)

    Ich werde jetzt anfangen, das alles zu pr&#252;fen. Eine Kleinigkeit, die zur Verwirrung f&#252;hren kann, habe ich schon entfernt.
    Das betraf aber nur eine errMess.

    Ansonsten konnte ich auf dem ersten Blick nichts finden, aber ich werde mich da nun in Ruhe mit befassen.

    Eigentlich wollte ich eine Zeichnung mit AUTO-CAD digitalisieren, aber ich hatte in der Vorlesung "Einf&#252;hrung in die EDV und CAD" leider kein Auto-Cad, daf&#252;r aber 1,5 Semester lang Word und Excel- Rest VBA :mad:
    Deshalb muss ich mich da noch reinfinden, aber erstmal VBA beenden

    ____
    edit:

    Also bisher konnte ich nichts finden, deshalb stelle ich an dieser Stelle nun meine Fragen, um auf die Pr&#252;fung vorbereitet zu sein:

    1) Was f&#252;r eine Aufgabe genau hat die von dir eingef&#252;hrte Variable rngSigma?
    2) Wof&#252;r steht die Syntax "str"?
    Welche Aufgabe "strProof" in dem Sub hat, habe ich erkannt.
    3) Wieso schreibst du manchmal "With / End With"? Diesen Befehl kenne ich gar nicht - ergo auch nicht die Funktion des Befehls.
    4)
    Code:
    ElseIf CDbl(Gebaeudehoehe) < CDbl(LichteGeschosshoehe) Then
    ...funktioniert super, aber welche Funktion erf&#252;llt dabei "CDbl"?
    5) Worin liegt der Vorteil, die Berechnungen in seperaten Functions auszuf&#252;hren?

    Ansonsten konnte ich alles nachvollziehen und kann es, denke ich mal, auf Nachfrage auch erkl&#228;ren! DANKE

    _____
    edit2:

    Der Excel-Vergleich ist eine der 4 Aufgaben der gesamten Arbeit, wird daher nicht entfernt. =)
     
    Last edited: Oct 21, 2009
  13. Urs2

    Urs2 Megabyte

    Hallo Matthias,

    0. Autocad.... = für mich Böhmische Dörfer....

    1. "Dim rngSigma As Range" ist ein Range (= ein ZellenBereich) in einem Arbeitsblatt
    Das ist ein Spezialfall, die Variable, in sich, kann kein solchen Bereich enthalten...
    ... dazu gehört der nachfolgende Befehl "Set rngSigma = <ZellenBereich>'"
    ... jetzt ist der Zellenbereich als Object gespeichert.


    2. Die Syntax "str" steht zuerst einmal für gar nichts...
    ...sie ist nur ein freiwillig gewählter Teil des Variablen-Namens.
    Um die Variablen lesbarer zu machen, setzt man oft dem eigentlichen Namen ein "str" (=String) oder sonst was davor...
    ...in diesem Fall enthält strProof ja die den String (= Text) des Prüfungsresultates.


    3. With/End ist eine Abkürzung des Codes.
    Anstatt zu schreiben >

    ActiveWorkbook.Sheets("DingsBums").Cells(a,b) = xxx
    ActiveWorkbook.Sheets("DingsBums").Cells(a,c) = yyy
    ActiveWorkbook.Sheets("DingsBums").Cells(a,d) = zzz
    ...usw.

    .........kann man schreiben

    With ActiveWorkbook..Sheets("DingsBums")
    .Cells(a,b) = xxx
    .Cells(a,c) = yyy
    .Cells(a,d) = zzz
    ...usw
    End With


    4. Aus unerfindlichen Gründen erkennt VBA zuerst "GebaeudeHoehe" als Numeric...
    ...kann aber nachher, im Vergleich, das nicht mehr so erkennen...
    CDbl(GebaeudeHoehe) zwingt VBA dazu, die ursprünglichen Strings in Double umzuwandeln und sie als Double zu vergleichen...
    ...das tut es dann auch klag los...


    5. Separate Functions sind nicht zwingend, sie dienen aber der Uebersichtlichkeit beim Verstehen, aber vor allem beim Schreiben des Codes. Du hattest ja schon reichlich Mühe, die Befehle in die richtige Reihenfolge zu schreiben.
    Mit den Functions wurde meine Kontrolle erleichtert, jene Befehle zu erkennen, die Variablen verwenden sollten, die zu dem Zeitpunkt noch gar nicht berechnet wurden...
    In einem riesigen Sub, mit Verweisen hin und her, wird das langwierig...


    Tatsache >
    Man kann und sollte jeden Code vereinfachen, Voraussetzung ist aber immer, dass der EntwurfsCode richtig funktioniert...

    Ratschlag >
    Speichere meine Datei ab, und entferne meine Bemerkungen in einer Kopie, dann könnten wir...
    ...im gleichen Code allfällige Fehler suchen...
    Oder besser, sende mir eine Kopie des entschlackten Codes...

    Gruss Urs
     
    Last edited: Oct 21, 2009
  14. Urs2

    Urs2 Megabyte

    Hallo Matthias,

    Gut, dass das Ding jetzt doch noch wirklich tut, was es soll. Auch mich freut das.
    Deine neueste Datei brauche ich so nicht mehr. Falls doch noch Probleme auftauchen sollten, bin ich hier immer zu erreichen.

    Kannst ja im Januar hier posten, ob SEINE Vorgaben auch richtig umgesetzt wurden, und wie es Dir dort insgesamt ergangen ist...

    Viel Glück
    Urs
     
Thread Status:
Not open for further replies.

Share This Page