Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Formel per VBA einfügen
#1
Hallo liebes Forum !

Ich habe leider wieder ein außergewöhnliches Anliegen:
Ich muss eine Anzahl von xlsx-Dateien mit je 12 Monatsblättern die mit Datumszeilen und deren Wochentage versehen sind
mit einer Datei mit VBA (xlsm) einen Jahreswechsel durchführen. Das habe ich bereits erledigt, aber ich habe jeweils in der Spalte I am Sonntag der Woche eine Summe für die Zellen Montag bis Sonntag in Spalte H zu bilden.
Das wäre kein Problem, wenn die Datei nicht eine xlsx-Datei wäre und auch bleiben soll und die Summenformel natürlich im neuen Jahr wo anders stehen muss und das ändert sich auch für jeden Monat.
Ich könnte es natürlich mit dem Makro-Generator manuell durchführen, aber das ist ein ziemlicher Zeitaufwand.
Nun dachte ich die Formel jeweils anpassen zu können, aber das funktioniert leider nicht.
Ich bin sicher, dass Ihr dafür eine Lösung finden werdet und bitte um Eure geschätzte Hilfe.
Wenn ein entsprechendes Monats-Tabellenblatt gewünscht wird, kann ich gerne eines per Mail zusenden.
Vielen Dank.
Code:
Sub Formeln_SpalteI()

   Dim i, z, datum
   Dim loLetzte, So1, So2, So3, So4, So5, H11, Mo1, Mo2, Mo3, Mo4, Mo5, lole As Integer
   loLetzte = Range("A46").End(xlUp).Offset(-2, 0).Row
     
   Range("I11:I" & loLetzte).ClearContents
   
For i = 11 To loLetzte
   
   datum = Cells(i, 3).Value
   
   If Weekday(datum) <> 1 Then  '1 = Sonntag
GoTo Ende
   Else
   Cells(i, 2).Select
   
   z = z + 1
   End If

   If z = 1 Then
   So1 = Cells(i, 2).Row       '1.Sonntag bestimmt (Zeile13)
   ElseIf z = 2 Then
   So2 = Cells(i, 2).Row       '2.Sonntag bestimmt (Zeile 20)
   ElseIf z = 3 Then
   So3 = Cells(i, 2).Row       '3.Sonntag bestimmt (Zeile 27)
   ElseIf z = 4 Then
   So4 = Cells(i, 2).Row       '4.Sonntag bestimmt (Zeile 34)
   ElseIf z = 5 Then
   So5 = Cells(i, 2).Row       '5.Sonntag bestimmt (letzte Zeile 41)
   ElseIf z = 6 Then
   lole = Cells(loLetzte, 2).Row
   
   ElseIf Cells(loLetzte, 3).Row < So5 Then
   So5 = Cells(loLetzte, 2).Row
   
Ende:
   End If
Next i
   
   Cells(So1, 9).Select
   ActiveCell.Formula = "=SUMME(H11:H & So1)" 'Hier wird in die Zelle (So1,9) "NAME?" geschrieben
   Mo1 = So1 + 1
   
   Cells(So2, 9).Select
   ActiveCell.Formula = "=SUMME(H & Mo1: H & So2)"
   Mo2 = So2 + 1
   
   Cells(So3, 9).Select
   ActiveCell.Formula = "=SUMME(H & Mo2 : H & So3)"
   Mo3 = So3 + 1
   
   Cells(So4, 9).Select
   ActiveCell.Formula = "=SUMME(H & Mo3 : H & So4)"
   Mo4 = So4 + 1
   
   Cells(So5, 9).Select
   ActiveCell.Formula = "=SUMME(H & Mo4 : H & So5)"

End Sub

Liebe Grüße aus Innsbruck
Helmut
Antworten Top
#2
Guten Morgen Helmut!
Zitat:Das wäre kein Problem, wenn die Datei nicht eine xlsx-Datei wäre und auch bleiben soll
Lagere Dein Makro in ein Addin aus.

Zitat:ActiveCell.Formula = "=SUM(H11:H & So1)" 'Hier wird in die Zelle (So1,9) "NAME?" geschrieben
Wenn Du eine Variable in einen String integrieren willst, musst Du es so machen:
Zitat:ActiveCell.Formula = "=SUM(H11:H" & So1 & ")" 'Hier wird in die Zelle (So1,9) "NAME?" geschrieben

Im Übrigen ist Dein Makro eher Rekorder-Code, die ganzen .Select und .Activate sind nicht nur überflüssig, sondern verlangsamen den Ablauf sehr.
Schau mal hier:
http://www.online-excel.de/excel/singsel_vba.php?f=78

Diese Grundlage ist übrigens Voraussetzung, dass ein AddIn funktionieren kann.

Zitat:Wenn ein entsprechendes Monats-Tabellenblatt gewünscht wird, kann ich gerne eines per Mail zusenden.
Nicht nur besser, sondern notwendig ist, die Datei anonymisiert hier hochzuladen.
Dies aus zwei Gründen:
Erstens können sich mehrere Leute damit befassen, zweitens kann ein Interessent auch später Dein Problem nachvollziehen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • heli
Antworten Top
#3
Hallo Helmut,


wenn Du Activecell.Formula nutzt, dann muss die Formel in englischer Schreibweise stehen:

ActiveCell.Formula = "=Sum(A1:A2)"


oder Du nutzt Activecell.FormulaLocal dann so:

ActiveCell.FormulaLocal = "=Summe(A1:A2)"
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • heli
Antworten Top
#4
Hallo Helmut,

VBA spricht Englisch ergo wird bei der Formula-Eigenschaft die englische Schreibweise verlangt. Es gibt aber noch die andere Möglichkeit: Verwende die lokale Eigenschaft (auch die Formel angepaßt).

Code:
ActiveCell.FormulaLocal = "=SUMME(H11:H" & So1 & ")"
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • heli
Antworten Top
#5
Hallo Stefan,


Aller guten Dinge sind Drei Blush

In Deiner Antwort Kurz und knapp Ralfs und meine enthalten.

bei Dir eine Kleinigkeit noch: ein Leerzeichen hier:  &")"
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • heli
Antworten Top
#6
Hallo Ralf, hallo Atilla, hallo Stefan !

Vielen Dank für Eure Hilfe, ohne der ich nie auf die Lösung gekommen wäre.
Wo nehmt Ihr bloß Euer Wissen her ?

Liebe Grüße
Helmut
Antworten Top
#7
Hallo Ralf, hallo Atilla, hallo Stefan !

Entschuldigt bitte die Doppelsendung der Antwort.
Vielen Dank für Eure Hilfe, ohne der ich nie auf die Lösung gekommen wäre.
Wo nehmt Ihr bloß Euer Wissen her ?

Liebe Grüße
Helmut
Antworten Top


Gehe zu:


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