Jump to content

Recommended Posts

Hallo David,

die Frage ist, wo das Makro "Endsaldo" steht? Wenn es in einer anderen Arbeitsmappe steht oder an ein anderes Tabellenblatt gebunden ist, gibt es Schwierigkeiten. Also stelle mal die Arbeitsmappe zum Download ein, ich werde dann den Fehler schnell beheben. So eine Fernanalyse ist immer schwierig, schneller geht es, wenn ich die Arbeitsmappe vorliegen haben.

Alternativ kannst du auch eine Schaltfläche aus der "Formular"-Symbolleiste verwenden. Hierzu über den Menüpunkt "Ansicht -> Symbolleisten" den Punkt "Formular" aktivieren". Dann aus dieser Symbolleiste eine Schaltfläche auswählen und auf deine Tabelle zeichnen. Dann geht automatisch ein Fenster zum Zuweisen des Makros auf. Wenn dort dein Makro "Endsaldo" nicht erscheint, dann steht es in einer anderen Arbeitsmappe!

Danke

bearbeitet von Chi Lu Jung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Alternativ kannst du auch eine Schaltfläche aus der "Formular"-Symbolleiste verwenden. Hierzu über den Menüpunkt "Ansicht -> Symbolleisten" den Punkt "Formular" aktivieren". Dann aus dieser Symbolleiste eine Schaltfläche auswählen und auf deine Tabelle zeichnen. Dann geht automatisch ein Fenster zum Zuweisen des Makros auf. Wenn dort dein Makro "Endsaldo" nicht erscheint, dann steht es in einer anderen Arbeitsmappe!

Toller Tipp Chin,

jetzt funtktioniert alles perfekt!

Gruß

DC

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 months later...

@Chin

Einbau der Hamburger-Permanenzen

Wie mir schon häufig aufgefallen ist findet sich in deinen Programmen häufiger die Möglichkeit Permanzen der Spielbank Hamburg direkt in die Spalte einzufügen. Kannst du mir die Rohfassung dafür geben? (wenn ich versuche eine bestehende Tabelle von dir umzuformen funktioniert das irgendwie nicht).

Gruß // DC

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo David,

es gibt keine "Rohfassung". In diesem Posting findest du die ursprünglich Lösung. In der Tabelle "Permanenz" wird die aufbereitete Permanenz aus Hamburg angezeigt. Der Download erfolgt über die Tabelle "Download". Du kannst diese Datei als Vorlage verwende und in der Tabelle "Permanenz" ab Spalte B deine Formeln einfügen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke Chin, so etwas war genau das, was ich gesucht habe, aber irgendwie habe ich es in den ganzen Postings nicht mehr gefunden. Irgendwie ist das schon komisch, immer mehr Kunden (wenn man sie denn so nennen kann) wollen Hamburger Permanenzen haben, obwohl die Zufallspermanenzen gleichwohl Minus bringen - i.d.R. teste ich erst mir richtigen Permanzen, wenn die Zufallspermanenzen dauerhaft Plus ergeben.

Gruß // DC

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo David Cooper

Der gewünschte Link:

http://www.roulette-forum.de/index.php?showtopic=1704&st=30

Benutze bitte den Download vom "May 16 2004, 01:03"

Wenn du den Fehler nur umgehen willst, das das Blatt nicht verändert wird:

Datei speichern- die Abfrage Datei speichern einfach nur mit "Nein" beantworten und alles wird gut!

Viel Spass damit

Wenke

der nur Sonntags schreibt

bearbeitet von Wenke
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 month later...

@all!

ich habe in einer tabelle einen zellenbezug für den mir überhaupt keine lösung einfällt. wahrscheinlich muß ich die ganze programmierung fast von anfang umschreiben.

eine idee hab ich noch, benötige jedoch eure antwort dazu.

kann ich diesen zellbezug mit einem macro umgehen, indem das macro die aufgabe löst statt das tabellenblatt? ich vermute ja nein.

wenn doch, dann soll folgende aufgabe gelöst werden:

=wenn(D11<>0;[laufe in Spalte E von E11 an nach unten bis die fehlermeldung "#NAME" erscheint, gehe wieder eine Zeile höher, und kopiere den Wert von dieser Zelle [E'xx'] in C11];ansonsten nichts machen)

und wenn diese aufgabe erledigt ist soll das gleiche in einer zeile tiefer [D12] überprüft und ev ausgeführt werden, insgesamt über ca 1000 zeilen.

als weitere schwierigkeit kommt hinzu, das in dem moment wo in C11 ein wert ungleich null eingefügt wird, in D11 der wert automatisch auf null gesetzt wird. ich weiß nicht ob es das noch unmöglicher macht.

das macro sollte erst nach aufruf laufen, also nicht automatisch mit öffnen der tabelle.

wenn diese "manipulation" möglich ist, würde ich mich sehr freuen wenn mir jemand den code für dieses macro schreiben könnte. das umschreiben des tabellenprogramms würde wieder ca zwei tage brauchen, und ich wüsste nicht ob ich nicht wieder einen zellbezug produzieren würde, ist nämlich schon der drtte anlauf.

grüße, matthias s,

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

soweit ich das verstehe, ist das Problem auf jeden Fall mit einem Makro zu lösen. Aber sinnvoller ist es, das Problem so zu lösen, dass es ohne Zellbezüge auskommt. Wenn du willst, dann stelle mal deine Excel-Datei ein oder sende mir diese per EMail. Ich schaue dann mal, ob ich was machen kann.

EMail-Adresse per PM.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo Chi!

dank für deine prompte reaktion. die datei kann ich dir leider nicht schicken, weil sie mir nicht allein gehört. den zellbezug werde ich in der bestehenden form nicht wegbekommen können, weil die eine zelle schon von vornherein von der anderen abhängig ist. das war eine tabelle für ein handspiel, die ich mal wieder umschreibe für langzeittests um jedes einzelne element untersuchen zu können in der hoffnung auf optimierung.

das es anscheinend grundsätzlich erstmal möglich ist mit einem macro den bezug zu umgehen finde ich schonmal sehhhhr erfreulich :smilie2:

was ich dabei nur garnicht weiß ist wie ich nach der zelle suchen soll abwärts in "E" die den fehler enthält (der ist notwendig), und wie ich dem macro sage: der fehlerwert heist '#NAME'. und den rest bekomme ich auch nur bruchstückhaft zusammen, VBA ist einfach zu komplex um mit büchern richtig einsteigen zu können.

grüße, matthias s. :topp:

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ matthias s.

Du könntest folgendes Probieren:

Oben in der Menüleiste auf

Optionen

Berechnung

bei Iteration ein Häkchen setzen.

bei maximale Iterationszahl: eine Zahl einsetzen, welche ausprobieren

Vielleicht hast du Glück und musst nicht noch mal von vorn beginnen.

Ich drück dir mal die Daumen :smilie2:

Beste Grüße

Wenke

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo wenke!

... [der nur sonntags schreibt?]

danke für deinen tip! ist die iterationszahl eine größe, in der die schrittweise berechnung der zellen eine nach der anderen, in der soetwas wie die geschwindigkeit der berechnungen oder besser der pausen dazwischen angegeben wird?

dann könnte es vielleicht sinn machen, denn ich habe die möglichkeit den zellbezug auf einen längeren weg zu legen. so das bevor sich der kreis schließt, immer eine große runde gedreht werden muß.

schöne grüße, matthias s.

:smilie2:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

ich fürchte, mit Iterationen wirst du auch nicht weitergekommen. Der Zähler besimmt, wie oft eine Iteration ausgeführt wird. Das Problem dabei ist, dass diese immer n-Mal ausgeführt wird. Führt in den meisten Fällen zu überraschenden Ergebnissen.

Iterationen eigenen sich eigentlich nur für Zähler bzw. für die ständige Erweiterung einer Zelle.

Ich würde vorschlagen, du beschreibst mal dein Problem mit Worten bzw. stellst eine abgespeckte Tabelle rein. Du sollst ja nicht das System verraten, sondern nur das Detailproblem darstellen.

Bevor wir für dich arbeiten, mußt du schon eine Vorleistung bringen :smilie2:

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ matthias s.

ist die iterationszahl eine größe, in der die schrittweise berechnung der zellen eine nach der anderen.....

Da musste ich glatt noch mal überlegen und nachschlagen. :topp:

Iterative Berechnungen sind wiederholte Berechnungen, die mit Zirkelbezügen arbeiten. Von Zirkelzügen wird gesprochen wenn z.B

in einer Formel in der Zelle B7,

ein Operand oder ein Teilergebnis, das sich auf B7 bezieht auftaucht. Die Formel bezieht sich dann auf sich selbst.

Das kann irrtümlich oder bewusst entstehen, beispielsweise bei Nährungsberechungen.

Die Iterationszahl gib an wie oft die Berechnung durchgeführt werden soll.

Wenn du natürliche Zahlen oder eindeutige Brüche verwendest, spielt die Größe kaum eine Rolle. wenn die erforderliche Mindestanzahl erreicht ist.

Chi Lu Jung

hat natürlich Recht, es können dabei sehr, sehr eigenartige Ergebnisse entstehen.

Ich vermute mal, das in deinen Berechnungen ganze natürliche Zahlen oder Brüche

verwendet werden. Bei 1/3, 22/7 und ähnlichen würde (könnte) es die von chi beschriebenen Probleme geben.

Prinzipell ist es natürlich bedeutend besser diese Bezüge zu entfernen.

Aber bei ganz vielen, komplizierten von einander abhängigen Formeln....,

darf man auch mal schwach werden.

Beste Grüße

Wenke :smilie2:

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo wenke und chi!

ich arbeite in dieser Tabelle ausschließlich mit ganzzahlen. also gibt die iteration soetwas wie die genauigkeit der berechnungen an anstatt der verzögerung zwischen den berechnungen an. der bestehende zirkelbezug ist ein handfester, lasse ich ihn drin und speicher die tabelle so ab, dann werden beim neu-öffnen in den betreffenden zellen keine werte mehr angezeigt.

ich denke ich werde mal versuchen eine abgespeckte version schreiben.

ich hatte jetzt hier nocheinmal versucht das problem zu beschreiben, aber das wurde ein roman und den möchte ich euch ersparen.

eine gleichwertiges "progrämmchen" werde ich schreiben und dann hier reinstellen, dann haben alle was davon, dauert aber.

ich hab noch eine grundsatzMACROfrage, um macros aufzunehmen hab ich ja den recorder. wenn ich den starte, dann werde ich nach ner neuinstallation von office immer gefragt ob ich direkte verweise aufnehmen möchte oder relative. diese abfrage erscheint nicht mehr, wie kann ich diese abfrage hochholen? denn ich verwende ja nicht immer die selbe art.

dankeschöööön und grüße, matthias s.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo chin!

dieser satz ist mir eben aufgestoßen:

Ich würde vorschlagen, du beschreibst mal dein Problem mit Worten bzw. stellst eine abgespeckte Tabelle rein. Du sollst ja nicht das System verraten, sondern nur das Detailproblem darstellen.

Bevor wir für dich arbeiten, mußt du schon eine Vorleistung bringen  :rolleyes:

fünf postings darüber dachte ich das problem konkret beschrieben zu haben, halt in excelsprache, lässt sich das so nicht übertragen?

wenn doch, dann soll folgende aufgabe gelöst werden:

=wenn(D11<>0;[laufe in Spalte E von E11 an nach unten bis die fehlermeldung "#NAME" erscheint, gehe wieder eine Zeile höher, und kopiere den Wert von dieser Zelle [E'xx'] in C11];ansonsten nichts machen)

und wenn diese aufgabe erledigt ist soll das gleiche in einer zeile tiefer [D12] überprüft und ev ausgeführt werden, insgesamt über ca 1000 zeilen.

in excel kann ich es ja nicht rechnen lassen, weil dadurch der zirkelbezug vorhanden ist. ich hab die formel in excelsprache geschrieben, weil ich hoffe das sich das so umsetzen lässt in ein macro.

ich denke das ich durch meine mitarbeit hier auch eine gewisse vorleistung erbringe, falls du noch etwas anderes meinst. :respect:

viele grüße, matthias s.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

bitte nicht böse sein. Ich meinte mit Vorleistung nur die vollständige Beschreibung des Problems. Mein Gedanke dabei war, dass wir versuchen sollten, den Zirkelbezug zu vermeiden. Damit hättest du dir das Makro erspart. Deswegen habe ich um eine Beschreibung des Problems bzw. eine Beispieltabelle gebeten.

Ich habe kapiert, dass du der Meinung bist, der Zirkelbezug läßt sich nicht vermeiden und du deshalb ein Makro hierfür willst. Für die Erstellung eines Makros ist deine Beschreibung ausreichend.

Chin :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo chin!

den zirkelbezug zu umgehen habe ich die letzten tage versucht, dabei wurde die tabelle schon um das 10fache größer, aber dieses eine detail, das habe ich echt nicht hinbekommen, und auch in gedanken ist es bisher nicht möglich, weil dadurch die struktur nicht gehalten werden kann.

ich lese zum beispiel alle letzten gefallenen 30 coups aus, um 10 bis 30 coups vor dem letzten ein signal zu erzeugen, welches dann unten im aktuellen coup etwas ausführt. wenn diese ausführung meinetwegen plus brachte, dann muss oben (10 bis 30 coups zurück) neben das signal eine markierung, damit der angriff nicht weiterrechnet . von hand kann ich das eintragen, aber nicht mit ner formel=zirkelbezug.

ich habe auch versucht das problem in einer anderen tabelle zu erzeugen um ein beispiel bieten zu können, aber schon an der bestehenden hab ich drei monate gearbeitet (kennst ja meine langen formeln) :rolleyes:

ich glaube ich hatte etwas missverstanden, nimms mir bitte nicht krumm. das ist wohl nicht ganz mein tag heute, das liegt nicht an dir, -sorry. :respect:

viele grüße, matthias s.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

hier mal ein Lösungsvorschlag von mir. Wie du das Makro einkopieren und testen kannst, habe ich ja am Anfang dieses Threads schon beschrieben.

Makro

Option Explicit

Private Const VerglZelleStart = "D11"
Private Const ZielZelleStart = "C11"
Private Const ErgebnisZelleStart = "E11"


Public Sub ErgebnisKopieren()


   Dim lastCpRow       As Long
   Dim lastRltRow      As Long
   Dim compRow         As Long
   Dim resultRow       As Long
   Dim resultCol       As Long
   Dim targetCol       As Long
   Dim compCol         As Long
   
   With ActiveSheet
       
   resultCol = .Range(ErgebnisZelleStart).Column
   targetCol = .Range(ZielZelleStart).Column
   compCol = .Range(VerglZelleStart).Column
   
   'wenn die Berechnung immer eine bestimmte Anzahl
   'von Zeilen durchlaufen soll, dann hier den Wert eintragen
   'lastCpRow = 1000
   'lastRltRow = 1000
       
   'Alternativ wird hier die letzte, gefüllte Zeile in
   'Spalte "VerglZelleStart" ermittel
   lastCpRow = .Cells(.Rows.Count, compCol).End(xlUp).row
   lastRltRow = .Cells(.Rows.Count, resultCol).End(xlUp).row




   
   For compRow = .Range(VerglZelleStart).row To lastCpRow
   
       If Val(.Cells(compRow, compCol).Value) <> 0 Then
       
           For resultRow = compRow To lastRltRow
               
               If .Cells(resultRow, resultCol).Text = "#NAME?" Then
                   .Cells(compRow, targetCol).Value = .Cells(resultRow - 1, resultCol)
                   Exit For
               End If
           
           Next resultRow
     
      End If
       
   Next compRow
   


   End With
End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo chin!

ich bin ganz schön begeistert! es wirkt hier so als schüttelst du das aus dem ärmel, aber ich glaube das hat auch einiges an zeit und nachdenken beansprucht. :respect::rolleyes::respect:

ich hab das macro einkopiert und es läuft so wie es laufen soll, mega>>> :respect:

inclusive eines von mir gemachten fehlers bei meinen angaben. wahrscheinlich hast du es beim schreiben des macros bemerkt das da etwas fehlen müsste.

die bedingung> =wenn(D11<>0) reicht nicht aus, er prüft anschließend logischerweise gleich wieder in D11, weil der wert in D11 stehenbleibt. komplett müsste es heißen> =wenn(und(D11<>0;C11<>istzahl);...

ich kann jetzt nicht einschätzen ob diese veränderung eine kleine oder eine aufwändige ist. wäre es eine kleine, dann möchte ich dich gerne um die änderung bitte. ist es eine äufwendigere, dann muss es nicht sein das du dich nochmal dransetzt, weil ich D11 nach dem erhalt des ergebnisses in C11 ohne zirkelbezug auf null setzen kann und dann läuft´s auch, aber eleganter wäre es schon mittels macro.

auf jeden fall hast du jetzt richtig einen bei mir gut, vielleicht musst du ja irgendwann mal lästige aufgaben verteilen. :deer:

viele grüße, matthias s. :respect:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo matthias,

das Makro zu erstellen ist gleich gemacht. Nur genau zu wissen, was du willst, dass ist die Schwierigkeit dabei. Wenn man nicht das gesamte Problem vorliegen hat, sondern nur ein Teil programmieren soll, kommt es zwangsläufig zu Abstimmungsschwierigkeiten.

Das Makro prüft D11 nur einmal, wenn ein Wert für C11 kopiert wurde. D.h. es wird aus Spalte E der Wert in Spalte C11 kopiert und dann mit der Zeile D12 fortgefahren. Deswegen weiß ich nicht, was du meinst mit

die bedingung> =wenn(D11<>0) reicht nicht aus, er prüft anschließend logischerweise gleich wieder in D11, weil der wert in D11 stehenbleibt.

Es sei denn, du meinst das mehrmalige Aufrufen des Makros. Dann wird immer wieder bei D11 begonnen und somit D11 bei jedem Makroaufruf getestet.

Also hier die gewünschte Verbesserung.

Ersetze die Zeile

If Val(.Cells(compRow, compCol).Value) <> 0 Then

durch

If Val(.Cells(compRow, compCol).Value) <> 0 And Not IsNumeric(.cells(compRow, targetCol).Text) Then 

Da ich immer noch nicht ganz dahinter gekommen bin, was genau du willst, wird dies leider ein Stückwerk bleiben. Diese Änderung bewirkt nämlich, dass bei einem Zahlenwert in C11 (bzw. Cxx) KEIN Wert in C11 eingetragen wird.

Ich beschreibe einmal, was das Makro macht und du kannst dann überprüfen, ob dies richtig ist.

1) Durchlaufe die Spalte D11 bis letzte, gefüllte Zeile in D

2) In jeder Spalte (also D11, D12, D13 etc.) überprüfe, ob Dxx <> 0 ist und in Cxx keine Zahl steht.

3) Wenn ja, dann durchlaufe die Spalte Eyy (also E11, E12 etc.) bis zur letzten gefüllten Zelle in Spalte E.

4a) Wenn die Zelle Eyy den Fehler "#Name?" enthält, dann schreibe den Wert von E(yy - 1) in Zelle Cxx (also für D11 in C11, für D12 in C12 etc.) und verlasse diese Schleife.

4b) Falls in Spalte E kein Fehlerwert steht, erfolgt keine Aktion

5) Fahre bei Punkt 1 mit der nächsten Zeile aus D fort

Link zu diesem Kommentar
Auf anderen Seiten teilen

die bedingung> =wenn(D11<>0) reicht nicht aus, er prüft anschließend logischerweise gleich wieder in D11, weil der wert in D11 stehenbleibt.

Es sei denn, du meinst das mehrmalige Aufrufen des Makros. Dann wird immer wieder bei D11 begonnen und somit D11 bei jedem Makroaufruf getestet.

hallo chin!

damit habe ich nur verwirrung gestiftet. das macro hackte an einer stelle wo ein fehler im programm war. es rechnete nur bis zu dieser zeile, bei nochmaligem anklicken begann es natürlich von oben, wie du schreibst hat er nur deßhalb noch mal in D11 neu getartet.

dein macro ist haargenau richtig für das was ich wollte, es läuft 1A. auch die einschränkung das in C11 nur ein wert einkopiert wird wenn C11 keinen zahlenwert enthält passt zufällig richtig. insofern ist es in kein stückwerk, es ist vollwertig.

das es so eine sache ist mit den wenigen angaben von mir ist mir klar. auch die abstimmungsschwierigkeiten die auftreten wenn man nur einen anteil vom ganzen hat kenne ich ebenso. manchmal wenn ich nach ner auswertung gefragt werde und sich hinterher rausstellt das doch etwas leicht anderes gemeint war ist das teilweise auch schon mal anstrengend, aber ich geb mein wissen auch gerne weiter.

wie gesagt, das macro läuft wie der teufel. deine beschreibung in worten (punkt 1 bis 5) ist auch noch einmal eine gute idee gewesen die schritte zu vergleichen und sicher gehen zu können, in den macrozeilen hätte ich es so lange nicht herauslesen können, das passt alles.

vielen dank nocheinmal für deine prompte unterstützung :rolleyes:

grüße, matthias s.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie ist deine Meinung dazu?

Du kannst jetzt schreiben und dich später registrieren. Bereits registrierter Teilnehmer? Dann melde dich jetzt an, um einen Kommentar zu schreiben.
Hinweis: Dein Beitrag wird nicht sofort sichtbar sein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Neu erstellen...