2016-03-21 11 views
0

私は自分の仕事にCalc(OpenOfficeから)を使用しています。OpenOfficeでは、この「時間更新機能」の何が問題になっていますか?


私はこのように、スプレッドシートを持っている:

The first image

列Fが更新されている場合は、列Eは、現在の編集時に印刷されます。

私は私の仕事のために、このマクロを書かれている:

The second image

の場合:

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 

、私はこのように、他のレイアウトにこのスプレッドシートを変更したいです行2が更新された場合、行3は、現在の編集内容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

また、行2(インデックス1)の変更に基づいてマクロをアクティブにするように言うときに、行3(インデックス2)にリスナーを追加することに気付きます。また、行3(インデックス2)に印刷したいと言うときに、行4(インデックス3)の時間を印刷しています。 – Lyrl

答えて

0

2つのタイプの問題があるようです。

oGroup6 = oSheet.getRows.getByIndex(2)

これは第三の行を取得します。 Lyrlが説明したように、それはインデックス1と言うべきです。コード内のすべてのインデックスを、1ベース(1,2,3,4を意味)ではなく、0ベース(0,1,2,3を意味する)に変更します。

oCell = oSheet.getCellByPosition(3、CurCol)

getCellByPosition方法は、その後、最初の行の列をとります。

関連する問題