VBA-Code aus Makro in Reinschrift bringen
#1
Hallo

Ich bin froh, dass man "hier" wieder auf Antworten hoffen kann. Im guten Alten kam kurz vor Schluss nichts mehr. Ich arbeite immer noch an meinem größer werdenden Projekt. Mit eurer Hilfe und eigenem Experimentieren bin ich recht weit gekommen, doch nun stehen wieder ein paar Fragen an. - Excel 2003. -

Ich habe folgenden Code, z. T. mit Makro-Rec aufgezeichnet. Das hat nur den Nachteil, dass es sich auf diese nicht eindeutig beschriebene Zelle bezieht. Alle anderen Versuche dies zu ändern, haben im Einzelnen nicht funktioniert. Mir fehlt einfach der Überblick über die genauen Befehle und "Zusätze".

Code:
Sub AbrechnungOrte()
Range("C6:C36").ClearContents

For i = 6 To 36

    Range("C" & i).Select

    A = ActiveCell.FormulaR1C1 = _
        "=IF(ISERROR(MATCH(DAY(RC[-2]),Woche_A_A,0)),0,MATCH(DAY(RC[-2]),Woche_A_A,0))"
    'Erste Zeile
    'kommt "Falsch"!? Hätte evtl. "0" kommen sollen oder halt Zeilennummer, ODER?

    If A > 0 Then
        B = ActiveCell.FormulaR1C1 = _
        "=IF(ISERROR(MATCH(DAY(RC[-2])+1,Woche_A_A,0)),COUNTA(Woche_F_F)+3,MATCH(DAY(RC[-2])+1,Woche_A_A,0)-1)"
        'Letzte Zeile
        'B = Application.If(IsError(Match(Day(Cells(i, 1)).Value + 1, Woche_A_A, 0)), CountA(Woche_F_F) + 3, Match(Day(Cells(i, 1)) + 1, Woche_A_A, 0) - 1)
        'Test, um Select+ActiceCell weg zubekommen, geht aber nicht.
        
        For k = A To B

        'Noch nicht erforscht: Es sollen nur Einträge bei Index(Woche_A_K, k, 2) genommen werden, _
        wenn Index(Woche_A_K, k, 9) nicht die Begriffe WkSt. oder Büro enthält. Diese können an beliebiger Stelle der Zelle stehen.

        Range("C" & i) = Range("C" & i).Text + ActiveCell.FormulaR1C1 = Index(Woche_A_K, k, 2) + ";"
        '"Range("C" & i) =" ändern in Variable und diese am Ende in diese Range eintragen lassen

        Next
        End If
Next
End Sub

Die Variablen "Woche_A_.." sind definierte Namen, die auf ein bestimmtes Arbeitsblatt verweisen. In diesem dann auf A:A oder A:K...

Ich würde nun gern mal wissen, wie man das umstellen muss, damit der rechnet und nicht einfach die Formel in die Zelle einträgt?
Ziel ist: Er soll im Blatt "Druck Reisekosten" S2;Zeile 6 bis 36 (Spalte A enthält das Datum) einzeln füllen, mit dem was im jeweiligen Blatt (über Woche... gefunden) in Spalte B untereinander zum jeweiligen Datum steht. Das Datum steht dort immer nur in der ersten Zeile des Tages. Deshalb Variable A und B zum Festlegen der ersten und letzten Zeile.
Was ich dann noch als Text im Code stehen habe ist Zusatz, der irgendwann noch mit rein muss. Soweit bin ich nu aber noch nicht gekommen.

Danke schon mal.
Hardilein
(Wo kann ich hier die Sig. festlegen?)
Top
#2
Hallo,

Zitat:(Wo kann ich hier die Sig. festlegen?)

in deinem Benutzer Control-Panel siehst du auf der linken Seite das Menü und dort findest du im Abschnitt 'Dein Profil' den Punkt Signatur ändern.
Gruß
Peter
Top
#3
Hallo Hardilein,

im code hast Du ein paar logische Fehler, daher bekommst Du WAHR oder FALSCH als Ergebnis. Ob noch mehr zu korrigieren wäre, hab ich noch nicht geschaut.

Beispiel:
A = ActiveCell.FormulaR1C1 = _ ...
Damit bekommst Du WAHR, wenn in der betreffenden Zelle die in Deinem code nach dm Underline folgende Formel steht.

So geht's im Prinzip mit Match:
A = Application.Match("B", Range("A1:A10"))

Ergebnis: 4
bei folgenden Daten ab A1:
C
AB
A
B
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
(01.05.2014, 14:44)Peter schrieb: in deinem Benutzer Control-Panel siehst du auf der linken Seite das Menü und dort findest du im Abschnitt 'Dein Profil' den Punkt Signatur ändern.

Danke, das habe ich ja gar nicht ernst genommen ("CP").

Neue Feststellung: Warum bekomme ich keine Mails bei Antworten? Hat das Abo damit gar nichts zu tun?
Top
#5
(01.05.2014, 15:00)schauan schrieb: Beispiel:
A = ActiveCell.FormulaR1C1 = _ ...
Damit bekommst Du WAHR, wenn in der betreffenden Zelle die in Deinem code nach dm Underline folgende Formel steht.

So geht's im Prinzip mit Match:
A = Application.Match("B", Range("A1:A10"))

Ergebnis: 4
bei folgenden Daten ab A1:
C
AB
A
B

Ähh. Mit Application habe ich es auch schon versucht, da kommt dann aber richtig ein Fehler.
Wenn ich folgendes als Bsp. nehme, ging es nicht.
B = Application.If(IsError(Match(Day(Cells(i, 1)).Value + 1, Woche_A_A, 0)), CountA(Woche_F_F) + 3, Match(Day(Cells(i, 1)) + 1, Woche_A_A, 0) - 1)
Hatte auch das Application öfter drin, aber immer mit Fehlern. Genau das ist der Punkt, in dem ich noch nicht klar komme. Was muss ich wie schreiben, wenn ich verschachtelte Funktionen habe. Ich kann es auch getrennt schreiben, so hatte ich aber den Anhaltspunkt über das Makro.

Kannst du nur mal am Bsp. einer Codezeile mir das übersetzen, sodass ich das Prinzip erkenne.

Danke
Top
#6
(01.05.2014, 22:41)Hardilein schrieb: Neue Feststellung: Warum bekomme ich keine Mails bei Antworten? Hat das Abo damit gar nichts zu tun?

in Deinem Benutzer-CP kannst Du bei "Optionen ändern" für das Abo einstellen, ob Du keine Mail oder sofort eine Mail haben willst.

siehe:
   
Top
#7
Hallo Hardilein,

im Prinzip so:

Code:
Sub test()
'Schleife über Zeilen
For i = 1 To 3
    'Wenn der Suchbegriff mindestens 1x im Bereich steht, dann
    If WorksheetFunction.CountIf(Range("B1:B10"), Cells(i, 1)) > 0 Then
        'Zeile feststellen
        a = WorksheetFunction.Match(Cells(i, 1), Range("B1:B10"))
        'Meldung der Zeilennummer
        MsgBox a
    'Ende Wenn der Suchbegriff mindestens 1x im Bereich steht, dann
    End If
'Ende Schleife über Zeilen
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#8
Hallo

Habe getestet. Wenn ich das richtig verstanden habe, nimmst du Zählenwenn statt bei mir mit IsError(match... zu arbeiten?

Da ich ja den Suchbereich bei mir mit einem "Namen" finde:
="'"&WENN(TAG('Druck Reisekosten'!$A6)-WOCHENTAG('Druck Reisekosten'!$A6;3)<1;"01";TEXT('Druck Reisekosten'!$A6-WOCHENTAG('Druck Reisekosten'!$A6;3);"TT"))&"."&TEXT('Druck Reisekosten'!$G$1;"MM")&"."&TEXT('Druck Reisekosten'!$G$1;"JJ")&"'!A:A"

habe ich hier den Namen eingegeben. Dort findet er in Spalte A nur reine Zahlen, also nur den Tag vom Datum im aktuellen Blatt. Deshalb Day(). Habe zum Test erstmal Zeile 18 angegeben.
If WorksheetFunction.CountIf(Range(Woche_A_A), Day(Cells(18, 1))) > 0 Then

Kommt aber Die Methode Range für das Objekt _Global ist fehlgeschlagen.

Danke
Top
#9
Noch was dazu:
Ich habe jetzt etwas experimentiert, keine Ahnung ob der den Namen "Woche_A_A" nicht erst auslesen kann? Für die eindeutige Bestimmung in Woche_A_A könnte es ja noch sein, dass er eine Zelle benötigt, da ja $A6 Ausgangspunkt, also die Zeile 6 variabel ist. Aber trotzdem müsste er doch wenigstens den textlichen Inhalt des Namens anzeigen, oder? Oder muss ich den Namen irgendwie anders festlegen? Ich hatte mal was gelesen von nur für das Blatt oder für die ganze Mappe.
Muss man dem festlegen, dass mein Name ein solcher ist?
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste