asta311
Goto Top

Aufgezeichnetes Makro, formel gibt laufzeitfehler 1004

Hallo liebe Leute,

ich bin sowas von Anfänger mit Makros für Excel, also bitte nachfragen, wenn ich mich nicht klar genug ausdrücke.

Ich möchte von einer (beliebigen) aktiven Zelle(hier a1) ausgehend mittels Button folgendes erreichen

füge unter dieser Zelle drei leere Zeilen ein
Schreibe in Zelle (h3) das Wort Summe
kopiere in die nächstfolgende Spalte(i3) die anfangs aktivierte Zelle(a1)
Schreibe in die nächste Spalte(j3) die Summe von den zwei direkt darüber liegenden Zeilen(j1:j2) bis maximal zum Anfang (j1).........hier will ich später Zeilen einfügen
verschiebe die Zellen L1 und M1 zwei Zeilen nach unten
rechne in n3 = k3*m3
füge Unterstreichungen hinzu.

Aufgezeichnet habe ich erstmal...........
Sub Positionssumme()
'
' Positionssumme Makro
'

'
ActiveCell.Offset(1, 0).Rows("1:3").EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(-1, 11).Range("A1:B1").Select
Selection.Cut Destination:=ActiveCell.Offset(2, 0).Range("A1:B1")
ActiveCell.Offset(2, -4).Range("A1").Select
ActiveCell.FormulaR1C1 = "Summe Pos."
ActiveCell.Offset(-2, -6).Range("A1").Select
Selection.Copy
ActiveCell.Offset(2, 8).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Range("A1").Select
Range("A1").FormulaR1C1 = "=SUM(R[-1]C:R[-2]C)"
ActiveCell.Offset(0, 3).Range("A1").Select
Range("A1").FormulaR1C1 = "=RC[-3]*RC[-1]"
Range("B50:N50").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub

nicht ganz bis zum Ende, weil ich neugierig war, und siehe da........beide Formeln führen zu Laufzeitfehler 1004. Ich suche jetzt seit zwei Tagen den Fehler,
1.1 Baustelle einrichten
Summe Pos1.1 0,000 psch 10.000,00 0,00
so ungefähr solls aussehen.

Helft mir bitte weiter.

Gruß Asta

Content-Key: 255025

Url: https://administrator.de/contentid/255025

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: Roadrunner0815
Roadrunner0815 18.11.2014 um 07:08:33 Uhr
Goto Top
Hast du den ganzen Teil aufgezeichnet oder sind da auch ein paar Ergänzungen von dir drin? Wenn ja, wo?
Mitglied: 116301
116301 18.11.2014 aktualisiert um 10:36:24 Uhr
Goto Top
Hallo Roadrunner0815!

Hast du den ganzen Teil aufgezeichnet oder sind da auch ein paar Ergänzungen von dir drin? Wenn ja, wo?
In allem, was mit Offsets und Range zu tun hat und dadurch völlig sinnfrei geworden ist. Auch die Formeln ergeben keinen Sinn, da sie in A1 (Zeile 1/Spalte 1) mit negativen Werten (z.B. R[-1], C[-3]) keine vernünftigen Zellbereiche definieren:
=SUM(R[-1]C:R[-2]C) steht für =SUMME(A1048575:A1048576)
=RC[-3]*RC[-1] steht für =XFB1*XFD1
Und da er/sie die Formeln in die gleiche Zelle in A1 einfügt, steht logischerweise auch nur die letzte drin (=XFB1*XFD1), sofern der Debugger nicht rebelliert...face-wink

Grüße Dieter
Mitglied: 116301
116301 18.11.2014, aktualisiert am 19.11.2014 um 09:22:57 Uhr
Goto Top
Hallo Asta!

Bezugnehmend auf Deine PNface-wink

Soweit ich das Ganze verstanden habe, in etwa so:
Sub MachWas()
    If ActiveCell.Column = 1 Then   'Nur Spalte A akzeptieren  
        With ActiveCell
            .Offset(1, 0).Resize(3).EntireRow.Insert Shift:=xlDown  '3 Zeilen einfügen  
            .Offset(2, 7).Value = "Summe:"                          'H3 = Wort Summe  
            .Copy .Offset(2, 8)                                     'A1 -> I3 (Copy)  
            .Offset(2, 9).FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"       'J3 = Summe J1:J2  
            .Offset(0, 11).Resize(1, 2).Cut .Offset(2, 11)          'L1:M1 -> L3:M3 (Cut)  
            .Offset(2, 13).FormulaR1C1 = "=RC[-3]*RC[-1]"           'N3 = K3*M3  
        End With
        
        With Range("B50:N50").Borders(xlEdgeBottom)  
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
    End If
End Sub

Grüße Dieter
Mitglied: asta311
asta311 20.11.2014 um 12:21:05 Uhr
Goto Top
Danke Dieter

Das sieht natürlich bedeutend professioneller aus, als mein Geschriebsel. Meine "Mach was" heißt "Positionssumme" und geht erst in Spalte B los, aber das kann ich ( auch mal was *g). Leider auch hier in Zeile 7 Laufzeitfehler 1004. Und nun???
Vielleicht eine Einstellung, oder Excel 2013, oder, oder..........
Immer noch HILFE

lg Asta
Mitglied: Roadrunner0815
Roadrunner0815 20.11.2014 um 15:31:05 Uhr
Goto Top
Wenn du auf deinem Excel-Blatt in die Zelle J3 (da müsste ja wenn du darauf klickst die Formel oben angezeigt werden) schaust steht da ein sinnvoller Wert?

Eine andere Idee wäre noch, kann es sein das du versuchst eine Division durch 0 zu machen bzw. etwas anderes als eine Zahl den den Zellen J1 und J2 steht?

Wenn du von der ersten bis zur letzten Zeile Daten adressieren möchtest, dann veruch es mal mit z.B. "!$A8".
Mitglied: asta311
asta311 20.11.2014 um 16:33:52 Uhr
Goto Top
Hallo roadrunner,

da steht Garnichts, denn da bricht das Makro ab........mit o.g. Fehler. Da ich nur addiere ( und wenns geht später dann mal multipliziere), ist rechnerisch höchstens "null" möglich. Formatiert sind die Zellen auf Standard, dürfte also auch nicht schädlich sein. Fest adressieren kann ich nicht, ich hab immer so an die 200 Positionen, die nach und nach gefüllt werden. Ich kann die Excel-Datei gern mal posten zum Ausprobieren, hab nur wieder mal null Ahnung wie das hier im Forum geht.

Danke für die Hinweise, ich hoffe, ihr bleibt mit mir dran
Mitglied: 116301
116301 20.11.2014 aktualisiert um 19:20:11 Uhr
Goto Top
Hallo Asta!

Meine "Mach was" heißt "Positionssumme" und geht erst in Spalte B los,
Soll heißen, dass sich die ActiveCells in Spalte B anstatt in Spalte A befinden?

Leider auch hier in Zeile 7 Laufzeitfehler 1004. Und nun???
Vielleicht eine Einstellung, oder Excel 2013, oder, oder.......
Sorry, den Laufzeitfehler in Zeile 7 kann ich beim besten Willen nicht nachvollziehen. Sollte eigentlich in allen Excel-Versionen problemlos funktionieren...

Was passiert, wenn Du mal manuell 3 Zeilen einfügst und in die Zelle J3 die Formel "=Summe(J1:J2)" schreibst?

Grüße Dieter
Mitglied: asta311
asta311 21.11.2014 um 09:02:56 Uhr
Goto Top
Hallo Dieter,

die Änderungen für die aktuelle Zelle hab ich gemacht, ich verstehe auch den Code gut, was in den einzelnen Zeilen deines Makros passieren soll (auch ohne Kommentar). Zur Probe habe ich in der Tabelle mal die Spalte A gelöscht(ist ein Platzhalter) und mit "Machwas" probiert, also im Original, auch da derselbe Fehler.

Wenn ich das manuell mache, habe ich in j3 eine 0,00 stehen.

Ich hab mal mein Informatiktöchterlein befragt, und in ihrer Firma hat keiner einen Plan, weil hier wohl absolute und relative Bezüge gemischt sind. Das nur so nebenbei.

Wenns hart kommt, werde ich die komplette Zeile irgendwo im Tabellenblatt hinschreiben, inkl. Formeln und dann per Makro nur noch kopieren. Unelegant, unbefriedigend, aber naja..........

Gruß Asta
Mitglied: Roadrunner0815
Roadrunner0815 21.11.2014 um 09:58:08 Uhr
Goto Top
Hallo Asta,

wär ne gute Sache, wenn du den Tabelleninhalt mal posten könntest. Wie das geht kann ich dir leider auch nicht sagen, bin hier auch Frischling...
Mitglied: 116301
116301 21.11.2014 aktualisiert um 10:09:44 Uhr
Goto Top
Hallo Asta!

Ich hab mal mein Informatiktöchterlein befragt, und in ihrer Firma hat keiner einen Plan, weil hier wohl absolute und relative Bezüge gemischt sind. Das nur so nebenbei.
Gemischt ist da nichts. Formeln können entweder mit relativen oder absoluten Zellbezügen angegeben werden und in Deinem Fall sind in Abhängigkeit von ActiveCell eigentlich relative Zellbezüge erforderlich. Desweiteren besteht die Wahl, die Formel in der internen (VBA-englisch) Sprache oder der installierten Sprachversion anzugeben. Hier mal ein paar Beispiele:
Absolute Zellbezüge:
.Formula = "SUM(J1:J2)"                     'englisch (VBA)  
.FormulaLocal = "SUMME(J1:J2)"              'deutsch (Sprachpaket)  

Relative Zellbezüge:
.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"        'englisch (VBA)  
.FormulaR1C1Local = "=SUMME(Z[-2]S:Z[-1]S)" 'deutsch (Sprachpaket)  
Wobei die restlichen Formulas entsprechend einer Eingabe automatisch angepasst werden und in der Excel-Oberfläche die Formel steht, die in .FormulaLocal (absoluter Zellbezug) hinterlegt ist...

Wenn Du eine deutschsprachige Excelversion hast, dann probier mal folgendes:
'Active Cell in Spalte B (J3 = Summe J1:J2)  
.Offset(2, 8).FormulaR1C1Local = "=SUMME(Z[-2]S:Z[-1]S)"  

Und wenn das auch nicht funktioniert, dann eben mit absoluten Zellbezügen:
'Active Cell in Spalte B  
.Offset(2, 8).Formula = "=SUM(" & .Offset(0, 8).Resize(2, 1).Address & ")"  

Grüße Dieter
Mitglied: asta311
asta311 21.11.2014 um 10:10:42 Uhr
Goto Top
Danke Dir Dieter, naja, Kinder werden überbewertet...*fg
Ich hab die engl. Version..........die Formeln sind mir bekannt und ich probier jetzt mal mit deinen Anregungen
Mitglied: 116301
116301 21.11.2014 um 10:25:39 Uhr
Goto Top
Hallo Asta!

Wenn Du eine englische Version benutzt, dann könnte es auch so gehen:
.FormulaR1C1Local = "=SUM(R[-2]C:R[-1]C)"   'englisch (Sprachpaket)  

Grüße Dieter
Mitglied: asta311
asta311 21.11.2014 um 10:55:36 Uhr
Goto Top
Nochmal an meine beiden Helfer:

ich würde euch die Datei gern schicken..........

so und jetzt Ergebnis:

absolute Bezüge für die Berechnungsformeln funktionieren, sind aber im Ergebnis falsch (logisch, da die Preise pro Pos. unterschiedlich sind und auch die Summen lokal sind), relative Bezüge in den Formeln ergeben Fehler und Abbruch.

Was habe ich da nur losgetreten..........face-sad
Mitglied: 116301
116301 21.11.2014, aktualisiert am 24.11.2014 um 10:08:37 Uhr
Goto Top
Hallo Asta!

Verstehe ich jetzt nicht so ganz, aber wenn dies darauf zurückzuführen ist, dass die Formel ($)-Zeichen enthält, dann läßt sich das auch noch ändern:
.Offset(2, 8).Formula = "=SUM(" & Replace(.Offset(0, 8).Resize(2, 1).Address,"$","") & ")"  
Ansonsten bin ich jetzt erst mal weg und erst heute Abend wieder zugegenface-wink

Grüße Dieter
Mitglied: asta311
asta311 24.11.2014 um 09:21:00 Uhr
Goto Top
Guten Morgen,

funktioniert soweit, Laufzeitfehler ist weg, richtiger Bereich ist für die summe markiert, aber............mein Excel kennt kein SUM und gibt mir #Name? zurück.

Ich hab zuhause kein Excel, deswegen kann ich immer nur probieren wenn ich arbeite...........ist ja auch nur für die Arbeit

Gruß Asta
Mitglied: 116301
116301 24.11.2014 um 14:38:34 Uhr
Goto Top
Hallo Asta!

............mein Excel kennt kein SUM und gibt mir #Name? zurück.
Das soll wohl ein Scherz seinface-wink

Die interne (VBA)-Sprache ist englisch und Du hast eine englische Version *kopfschüttel*face-smile

Schau mal in diesen Kommentar zwecks Einträge im Objectkatalog. Ansonsten fällt mir dazu leider nix mehr ein..

Grüße Dieter
Mitglied: asta311
asta311 24.11.2014 um 15:42:31 Uhr
Goto Top
Nein, kein Scherz, ich weiß, dass VBA Sprache englisch ist, habe aber gelesen, dass die Befehle automatisch verstanden werden, sorry, aber du machst mir nicht viel Mut, ich hab doch geschrieben: blutiger Anfänger,.....und jetzt auch noch mit blutiger Nase

alle beschriebenen Häkchen sind an, meine Objektbibliothek ist 12.0, sonst alles

ich hatte da auch schon nachgeschaut.........und Google bis ins Unendliche befragt