2016-03-21 76 views
0

我正在使用Calc(来自OpenOffice)进行工作。在OpenOffice中这个“时间更新功能”有什么问题?


我有一个电子表格,就像这样:

The first image

如果F列更新时,E列将与当前编辑时间打印。

我写这个宏对我的工作:

Option VBASupport 1 
Global oListener As Object 
Global oScalcDocument As Object 
Global oGroup6 as Object 
Global CurRow as integer 
Global GnameCO as String 
Global Gcheck_name as Boolean 



Sub RangeEventlistenerOn 

CurRow = 0 

oScalcDocument=ThisComponent 
'---installation of an event listenr 
oListener = createUnoListener("OOO_","com.sun.star.chart.XChartDataChangeEventListener") 
oSheet = oScalcDocument.Sheets(0) 
oSheet.Protect("") 
oGroup6=oSheet.getColumns.getByIndex(5) 
oGroup6.addChartDataChangeEventListener(oListener) 

End Sub 


Sub RangeEventlistenerOff 
oGroup6.removeChartDataChangeEventListener(oListener) 
End Sub 


Sub OOO_chartDataChanged 
    CurRow = 2 
'print(CurRow) 
oScalcDocument=ThisComponent 
oSheet = oScalcDocumet.Sheets(0) 
'Get cell address 
oSelection = oScalcDocument.getCurrentSelection 
oRangeAddress = oSelection.getRangeAddress 
CurRow = oRangeAddress.StartRow 
oCell = oSheet.getCellByPosition(4,CurRow) 
oCell.SetString(Format(Now,""DD.MM.YYYY hh:mm:ss")) 
End Sub 


Sub Refresh() 
Refresh_data (Format(Date, "DD.MM.YYYY")) 
MsgBox("Work finished") 
Exit Sub 
Exit Sub 
End Sub 


Sub Save() 
Save_data(Format(Date, "DD.MM.YYYY")) 
Exit Sub 
End Sub 

现在,我想这个电子表格更改为其他布局,像这样:

The second image

如果第2行已更新,第3行将与当前的editin打印在一起G-时间。

所以,我已经改变了这个宏对我的工作:

Option VBASupport 1 
Global oListener As Object 
Global oScalcDocument As Object 
Global oGroup6 as Object 
Global CurCol as integer 
Global GnameCO as String 
Global Gcheck_name as Boolean 



Sub RangeEventlistenerOn 

CurCol = 0 

oScalcDocument=ThisComponent 
'---installation of an event listenr 
oListener = createUnoListener("OOO_","com.sun.star.chart.XChartDataChangeEventListener") 
oSheet = oScalcDocument.Sheets(0) 
oSheet.Protect("") 
oGroup6=oSheet.getRows.getByIndex(2) 
oGroup6.addChartDataChangeEventListener(oListener) 

End Sub 


Sub RangeEventlistenerOff 
oGroup6.removeChartDataChangeEventListener(oListener) 
End Sub 


Sub OOO_chartDataChanged 
    CurCol = 2 
'print(CurCol) 
oScalcDocument=ThisComponent 
oSheet = oScalcDocumet.Sheets(0) 
'Get cell address 
oSelection = oScalcDocument.getCurrentSelection 
oRangeAddress = oSelection.getRangeAddress 
CurCol = oRangeAddress.StartColumn 
oCell = oSheet.getCellByPosition(3,CurCol) 
oCell.SetString(Format(Now,""DD.MM.YYYY hh:mm:ss")) 
End Sub 


Sub Refresh() 
Refresh_data (Format(Date, "DD.MM.YYYY")) 
MsgBox("Work finished") 
Exit Sub 
Exit Sub 
End Sub 


Sub Save() 
Save_data(Format(Date, "DD.MM.YYYY")) 
Exit Sub 
End Sub 


更新的代码无法正常工作。你能告诉我:改变有什么问题吗?

+0

当你说“不能正常工作” - 究竟发生了什么?描述它所做的任何事情,包括您想要保留的事物以及您想要停止的事情,并请提供发生的任何错误消息的全文和时间安排。 – Lyrl

+1

此外,要开始我注意到您添加第3行(索引2)的侦听器,当您的帖子说您想要宏基于行2(索引1)中的更改激活。而当您的帖子说您想要打印到第3行(索引2)时,您正在将时间打印到第4行(索引3)。 – Lyrl

回答

0

它看起来像有两种类型的问题。

oGroup6 = oSheet.getRows.getByIndex(2)

这得到第三行。正如Lyrl解释的那样,它应该指出索引1.将代码中的所有索引都改为基于0(意为0,1,2,3),而不是基于1(意为1,2,3,4)。

oCell的= oSheet.getCellByPosition(3,CurCol)

getCellByPosition方法采用柱,然后再行。