Autor
|
Thema: sheetoffset und Datum (1102 mal gelesen)
|
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 08. Nov. 2012 13:36 <-- editieren / zitieren --> Unities abgeben:
Hi, ich verwende schon länger die Funktion Sheetoffset von hier: http://j-walk.com/ss/excel/tips/tip63.htm Code: Function SHEETOFFSET(offset, Ref) ' Returns cell contents at Ref, in sheet offset Application.Volatile With Application.Caller.Parent SHEETOFFSET = .Parent.Sheets(.Index + offset) _ .Range(Ref.Address).Value End With End Function
Bisher hat das immer gut geklappt, aber jetzt möchte ich gerne ein Datum von einer Seite zur anderen bringen. 1904 ist eingeschaltet, aber auf dem Folgeblatt landet das Datum trotzdem falsch. Aus 1.1.2013 wird 2.1.2017 Wie könnte ich das ändern, so dass der richtige Wert raus kommt? Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 08. Nov. 2012 14:08 <-- editieren / zitieren --> Unities abgeben:
Hi, hab das jetzt Mal so umgestrickt, betrachte es aber als Workaround: Code: Function SHEETOFFSET(offset, Ref) ' Returns cell contents at Ref, in sheet offset Application.Volatile With Application.Caller.Parent Add = 0 If (IsDate(.Parent.Sheets(.Index + offset) _ .Range(Ref.Address))) Then Add = -1462 End If SHEETOFFSET = .Parent.Sheets(.Index + offset) _ .Range(Ref.Address).Value + Add End With End Function
Gruß Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 09. Nov. 2012 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für daniu
Moin Daniel, Ja ja Excel und die Datumswerte, eine unendliche Geschichte Also ohne viel labern: 1. Du kannst Value2 nutzen
Code: Function SHEETOFFSET(offset, Ref) ' Returns cell contents at Ref, in sheet offset Application.Volatile With Application.Caller.Parent SHEETOFFSET = .Parent.Sheets(.Index + offset) _ .Range(Ref.Address).Value2 End With End Function
kugst du hier http://support.microsoft.com/kb/182812/de2. Dein Workflow müste korrekterweise um eine Abfrage ob überhaupt '1904' genutzt wird ergänzt werden Code: Function SHEETOFFSET(offset, Ref) ' Returns cell contents at Ref, in sheet offset Application.Volatile With Application.Caller.Parent Add = 0 If (IsDate(.Parent.Sheets(.Index + offset) _ .Range(Ref.Address))) And ActiveWorkbook.Date1904 Then Add = -1462 End If SHEETOFFSET = .Parent.Sheets(.Index + offset) _ .Range(Ref.Address).Value + Add End With End Function
3. wenn irgent möglich würde ich auf "Date1904" verzichten. Hilfreicher Tip solche Leute müßte man prügeln, diesen hilfreichen Tip ohne Erwähnung der "Nebeneffekte" zu propagieren. besser ist da schon anderer Tip Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 09. Nov. 2012 12:43 <-- editieren / zitieren --> Unities abgeben:
Hi, super, vielen Dank. Ohne 1904 einzustellen hatte ich probiert, dann müsste ich aber nen Workaround für negative Zeiten suchen (ich weiß, das gibt's) außerdem müsste ich sehr viele Tabellenblätter korrigieren. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 12. Nov. 2012 08:42 <-- editieren / zitieren --> Unities abgeben:
Hi, nur zur Info: hab das jetzt auch für Range Objekte erweitert: Code:
Function SHEETOFFSET(offset, Ref) As Variant Application.Volatile If (Ref.Cells.Count > 1) Then With Application.Caller.Parent Set SHEETOFFSET = .Parent.Sheets(.Index + offset).Range(Ref.Address) End With Else With Application.Caller.Parent SHEETOFFSET = .Parent.Sheets(.Index + offset).Range(Ref.Address).Value2 End With End If End Function
Grüße Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 12. Nov. 2012 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für daniu
Hi, nur mal aus interesse. Welchen Sinn macht eine Funktion, welche mal einen Wert und mal einen Bereich liefert. Wo bzw wie kann man soetwas benutzen? Eine Funktion für Werte und eine für Bereiche kann ich mir noch vorstellen, oder auch die Steuerung (des Rückgabetyps) über einen weiteren (optionalen) Parameter. Aber ich lerne ach gern noch dazu. Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 12. Nov. 2012 12:41 <-- editieren / zitieren --> Unities abgeben:
Hi, hmmm - ist nur Faulheit. Vorher hatte ich 2 Funktionen, wie von Dir geschrieben. So muss ich mir nur eine Bezeichnung merken. Ist mir schon klar, dass das so weniger performant ist, aber darauf ist ja eh nicht der Fokus Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |