von F3K Total » Mi, 27.04.2016 22:19
Hi,
anbei eine Datei mit Makros, die du natürlich zulassen musst, die immer dann, wenn sich in der DDE-Quelle etwas tut, nach der Uhrzeit schaut. Ist es 23:59 Uhr, wird der Wert aus der DDE-Zelle A1 in B1 geschrieben, in C1 der dazugehörige Zeitstempel. Die bereits gefüllten Zellen in den Spalten B und C werden nach unten geschoben, so dass der neueste Wert immer oben steht.
Du musst nur deinen DDE-Link in A1 schreiben, die Datei speichern, schliessen und wieder öffnen.
Code: Alles auswählen
global oListener
Sub S_add_DDE_Link_RefreshListener
on error goto errorhandler
oddelink = thiscomponent.ddelinks(0)
oListener = CreateUnoListener( "RefreshListener_", "com.sun.star.util.XRefreshListener" )
oddelink.addRefreshListener(oListener)
errorhandler:
End Sub
Sub S_remove_DDE_Link_RefreshListener
on error goto errorhandler
oddelink = thiscomponent.ddelinks(0)
oddelink.removeRefreshListener(oListener)
errorhandler:
End Sub
sub RefreshListener_refreshed
if hour(now()) = 23 AND minute(now()) = 59 Then
osheet = thiscomponent.sheets(0)
osourcecell = osheet.getcellbyposition(0,0)'A1
otargetcells = osheet.getcellrangebyposition(1,0,2,0)
acelladdress = otargetcells.rangeaddress
osheet.insertCells(acelladdress,com.sun.star.sheet.CellInsertMode.DOWN)
onewtargetcell1 = osheet.getcellbyposition(1,0)
onewtargetcell1.value = osourcecell.value
onewtargetcell2 = osheet.getcellbyposition(2,0)
onewtargetcell2.value = now()
endif
end sub
sub RefreshListener_disposing
end sub
Wenn du zum Testen, diese zwei Zeilen
Code: Alles auswählen
'if hour(now()) = 23 AND minute(now()) = 59 Then
.
.
.
'endif
mit einem Hochkomma versiehst (auskommentierst) wird etwa alle 4 Sekunden geschaut, und wenn sich etwas geändert hat, eine neue Zeile eingefügt.
Gruß R
- Dateianhänge
-
- DDE_target_add_Cells.ods
- (11.04 KiB) 75-mal heruntergeladen
Hi,
anbei eine Datei mit Makros, die du natürlich zulassen musst, die immer dann, wenn sich in der DDE-Quelle etwas tut, nach der Uhrzeit schaut. Ist es 23:59 Uhr, wird der Wert aus der DDE-Zelle A1 in B1 geschrieben, in C1 der dazugehörige Zeitstempel. Die bereits gefüllten Zellen in den Spalten B und C werden nach unten geschoben, so dass der neueste Wert immer oben steht.
Du musst nur deinen DDE-Link in A1 schreiben, die Datei speichern, schliessen und wieder öffnen.
[code]global oListener
Sub S_add_DDE_Link_RefreshListener
on error goto errorhandler
oddelink = thiscomponent.ddelinks(0)
oListener = CreateUnoListener( "RefreshListener_", "com.sun.star.util.XRefreshListener" )
oddelink.addRefreshListener(oListener)
errorhandler:
End Sub
Sub S_remove_DDE_Link_RefreshListener
on error goto errorhandler
oddelink = thiscomponent.ddelinks(0)
oddelink.removeRefreshListener(oListener)
errorhandler:
End Sub
sub RefreshListener_refreshed
if hour(now()) = 23 AND minute(now()) = 59 Then
osheet = thiscomponent.sheets(0)
osourcecell = osheet.getcellbyposition(0,0)'A1
otargetcells = osheet.getcellrangebyposition(1,0,2,0)
acelladdress = otargetcells.rangeaddress
osheet.insertCells(acelladdress,com.sun.star.sheet.CellInsertMode.DOWN)
onewtargetcell1 = osheet.getcellbyposition(1,0)
onewtargetcell1.value = osourcecell.value
onewtargetcell2 = osheet.getcellbyposition(2,0)
onewtargetcell2.value = now()
endif
end sub
sub RefreshListener_disposing
end sub[/code]
Wenn du zum Testen, diese zwei Zeilen [code] 'if hour(now()) = 23 AND minute(now()) = 59 Then
.
.
.
'endif [/code]mit einem Hochkomma versiehst (auskommentierst) wird etwa alle 4 Sekunden geschaut, und wenn sich etwas geändert hat, eine neue Zeile eingefügt.
Gruß R