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.

For-Next Schleife
#11
Hallo Helmut,

im Prinzip so. Ich gehe dabei davon aus, dass Du das Makro von dem Blatt aus startest, wo Du gerade in E5 etwas eingetragen hast. Dadurch kannst Du auch mal ein anderes Blatt nehmen, ohne den code zu ändern. Ansonsten müsste man dem Makro den Blattnamen April mitgeben.

Code:
Sub Machs()
Dim ws As Worksheet
Dim strE5 As String
For Each ws In ThisWorkbook.Worksheets
   If Not IsNumeric(Right(ws.Name, 1)) * 1 Then
      If ws.Name = ActiveSheet.Name Then strE5 = ws.Range("E5").Value
      If Len(strE5) > 0 And ws.Name <> ActiveSheet.Name Then
        ws.Range("E5") = strE5
      End If
      'MsgBox ws.Name 'bzw. Dein Code
   End If
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • heli
Antworten Top
#12
Hallo André !

Vielen herzlichen Dank, das ist die Lösung auf die ich selbst nie gekommen wäre. Super.
Danke und liebe Grüße
Helmut
Antworten Top
#13
Lieber André !

Es tut mir leid, aber ich muss noch einmal lästig sein.
Ich dachte ich könnte Deinen Code für eine andere Anwendung abwandeln, aber trotz langem Bemühen ist es mir nicht gelungen.
Kurz geschildert:
In der Jahresdatei mit 12 oder mehr Blättern (Jänner bis Dezember +...) wird der Wert von Zelle M49 in die Zelle M5 des nächsten Monats eingetragen.
Dabei sollen aber die vorhergehenden Monatsblätter in Zelle M49 unverändert bleiben und ab dem aktiven Monat mit einem geänderten Wert in Zelle M49, soll dieser Wert in die restlichen Monatsblätter in die Zelle M5 übernommen werden.
Ich hatte zuvor eine Lösung mit einem Code der mit "Private Sub Worksheet_Activate()" aktiv wurde und auch funktionierte, aber seit ein kopiertes Blatt dazu kam funktioniert das nicht mehr und es lässt sich auch ein kopiertes TB-Blatt nicht mehr umbenennen.

Darf ich Dich noch einmal um Deine geschätzte Hilfe bitten?
Liebe Grüße
Helmut
Antworten Top
#14
Hi Helmut,

(04.02.2015, 22:50)heli schrieb: Dabei sollen aber die vorhergehenden Monatsblätter in Zelle M49 unverändert bleiben und ab dem aktiven Monat mit einem geänderten Wert in Zelle M49, soll dieser Wert in die restlichen Monatsblätter in die Zelle M5 übernommen werden.

ich habe bei mir in meiner Datei mit mehreren Monatstabellen folgende Formel in M5 stehen:
=INDIREKT(Reiterlinks&"!M49")

Dabei wird immer der Wert aus M49 des Tabellenblattes eins nach links in M5 übernommen.
Das Reiterlinks ist wohl ein Excel 4 Makro oder eine selbstdefinierte Funktion, die finde ich aber grad in meiner Datei nicht.
Vielleicht weiß jemand anders mehr?
Antworten Top
#15
Hi, Folks;
ich setze das Folgende jetzt mal hierher, weil das unten angezeigte verwandte Thema (wohl etwas voreilig!) bereits geschlossen ist:
For Each Schleife rückwärts - Genie gegen Compiler
Es geht da um das Rückwärtslaufenlassen einer For Each-Schleife, was ja bekanntlich definitiv nicht möglich ist. Man kann aber (bei einem Vektor) die Indizes des ursprünglich zu durchlaufenden Bereichs rückwärts in einem eigenen Array anordnen und dieses dann ersatzweise durchlaufen. Da muss dann auch nicht mit .Offset u.ä. verlangsamenden Operationen (wie in den gegebenen Antworten) herumgeknödelt wdn:
Code:
Sub EachBack()
    Const adRelBer$ = "A2:A6", fmBerIdx$ = "6-row(1:5)"
    Dim berIdx, relBer, x
    relBer = WorksheetFunction.Transpose(Range(adRelBer))
    berIdx = Evaluate(fmBerIdx)
    For Each x In berIdx
        MsgBox relBer(x)
    Next x
End Sub
Auch das ggw Problem lässt sich ähnlich, vorwärts oder gar rückwärts lösen, indem man ein Array aller relevanten Blattnamen anlegt:
Code:
Sub EachText()
    Const fmMoNam$ = "--(""2015-""&row(1:12)&""-1"")"
    Dim naMoBl, x
    naMoBl = Evaluate(fmMoNam)
    For Each x In naMoBl
        Debug.Print Sheets(Format(x, "mmmm")).Name
    Next x
End Sub
Gruß, Castor
Antworten Top
#16
Hallo Helmut,


Geht es nur darum, dass bei Änderung der Zelle M49 in einer der Monatsblätter, der Wert von Zelle M5
der aktiven Tabelle in die Zelle M5 der Tabelle des Folgemonats eingetragen wird? (Außer wenn die aktive Tabelle Dezember ist)

Wenn ja, und wenn die Zelle M49 nicht eine Formel enthält, dann würde ich folgendermaßen vorgehen:

Du löschst hinter Den Monatsblättern das Private Sub Worksheet_Activate Ereignis.
Dann fügst Du unten stehenden Code in das Code Modul von DieseArbeitsmappe

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   Dim i As Long
   Dim lngAktiveTabelle As Long
   Dim folgeTabelle As Long
   Dim strgTabellen As String
   Dim arrTabellen
  
   If Target.Address(0, 0) = "M49" Then
      If Target.Text <> "" Then
         strgTabellen = "Januar; Februar; März; April; Mai; Juni; Juli; August; September; Oktober; November; Dezember"
         arrTabellen = Split(strgTabellen, "; ")
         If InStr(strgTabellen, ActiveSheet.Name) And ActiveSheet.Name <> arrTabellen(11) Then
            For i = 0 To 10
               If arrTabellen(i) = ActiveSheet.Name Then
                     Application.EnableEvents = False
                     Sheets(arrTabellen(i + 1)).Range("M5") = Target
                     Application.EnableEvents = True
                     Exit For
               End If
            Next i
         End If
      End If
   End If
End Sub

Im Code sind die Namen der in Frage kommenden Monatsblätter aufgeführt. Wenn sie anders heißen, dann muss das im Code angepasst werden.

Der Code reagiert automatisch auf Eingaben in Zelle M49 der aufgeführten Blätter.
Sobald in diesen Blättern der Wert geändert wird und die Zelle nicht leer ist, wird der Wert aus diesem Blatt in die Zelle M5 des Folgemonats übernommen.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • heli
Antworten Top
#17
Hallo Helmut,

hier auch noch meine abgewandelte Version von M49 auf folgende M5.
Der Code gehört in das schon vorhandene VBA-Modul DieseArbeitsmappe:

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim i As Long, j As Long
  If Target.Address = "$M$49" Then
    On Error Resume Next
    Application.EnableEvents = False
    j = Month(DateValue("1/" & Sh.Name & "/1"))
    If j > 0 Then
      For i = j + 1 To 12
        Worksheets(Format(DateSerial(1, i, 1), "mmmm")).Range("M5").Value = Target.Value
      Next i
    End If
    Application.EnableEvents = True
    On Error GoTo 0
  End If
End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • heli
Antworten Top
#18
Hallo Uwe,

die Lösung ist auch nicht von schlechten Eltern.

Aber das :

Zitat:.....wird der Wert von Zelle M49 in die Zelle M5 des nächsten Monats eingetragen

verstehe ich anders als Du. Das hatte Helmut anfangs anders beschrieben, als es wie oben zu verstehen ist.

Das ist in Deinem Code aber auch noch leicht einzuarbeiten.
Gruß Atilla
Antworten Top
#19
Hi,

fällt irgendjemand etwas zu der Funktion "Reiterlinks" aus meinem Beitrag ein?

Den Ursprungs-Beitrag im anderen Forum kann ich ja nicht mehr suchen.
Antworten Top
#20
Hi Ralf,

Zitat:Den Ursprungs-Beitrag im anderen Forum kann ich ja nicht mehr suchen.
wieso nicht? Wink

http://clever-forum.eu/read.php?11,26251...msg-262511
http://clever-forum.eu/read.php?11,26022...msg-260225

Gruß Uwe
Antworten Top


Gehe zu:


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