Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
04.02.2015, 04:28
(Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2015, 04: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
04.02.2015, 23:26
(Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2015, 12:45 von Rabe.)
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?
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 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: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)
Hi Ralf,
Zitat:Den Ursprungs-Beitrag im anderen Forum kann ich ja nicht mehr suchen.
wieso nicht?
http://clever-forum.eu/read.php?11,26251...msg-262511
http://clever-forum.eu/read.php?11,26022...msg-260225
Gruß Uwe
|