Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
04.02.2015, 05:28
(Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2015, 05:30 von schauan.)
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:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• heli
Registriert seit: 20.06.2014
Version(en): 2013
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
Registriert seit: 20.06.2014
Version(en): 2013
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
Registriert seit: 10.04.2014
Version(en): 2016 + 365
05.02.2015, 00:26
(Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2015, 13:45 von Rabe.)
Hi Helmut, (04.02.2015, 23: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?
Registriert seit: 11.10.2014
Version(en): 12/2007&14/2010
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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 DieseArbeitsmappeCode: 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:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• heli
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• heli
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 10.04.2014
Version(en): 2016 + 365
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.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
|