2014-11-04 37 views
0

我正在嘗試使用自由職業者辦公室基本來寫自定義功能的自由職業者計算機運行的目標尋求作爲一種功能,而不是我去菜單和點擊。目標尋求自由職業者用戶定義函數基本

我想要做的是傳遞一個單元格作爲公式的第一個參數,第二個參數是我想要設置公式的值,第三個參數是包含變量被操縱。

因此,例如,我想在A3單元格中鈣=GSeek2(A1,5,A2)輸入其中,A1含有=A2 + 1和A2開始爲0,並有A3等於4

我認爲,公式和細胞被操縱需要被通過Goal Seek函數作爲地址,但我不確定。我已經嘗試了下面的代碼,但是我總是收到「BASIC語法錯誤,意外的符號:目標。」任何人都知道我要去哪裏錯了?

Function GSeek2(Form As Range, Target as Double, Var as Range) 

    Form = Form.Address 
    Var = Var.Address 

    With Worksheets("Sheet1") 
     GSeek2 = .Range(Form).GoalSeek _ 
     Goal:=.Value(Target).Value, _ 
     ChangingCell:=.Range(Var) 
    End With 

End Function 
+0

不是一個LO的用戶,但在Excel表沒有'Value'屬性 – 2014-11-04 17:20:49

+0

即使去除整個'.Value'並用'Goal:= 5'代替它我仍然得到相同的錯誤:「BASIC語法錯誤,意外的符號:目標。」 – 2014-11-04 18:48:04

回答

0

Openoffice或libreoffice宏無法在Excel中寫入VBA中。所以你的VBA代碼將不起作用。您必須使用特殊的BASIC方言和openoffice或libreoffice的特殊API。好的起點是https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide

不幸的是,你不能在openoffice或libreoffice中的用戶定義的函數中傳遞對象作爲參數。因此,您只能傳遞單元地址(表格,列,行)的單個部分作爲參數。

實施例:

Function GSeek2(lSheetF as long, lColF as long, lRowF as long, lSheetV as long, lColV as long, lRwoV as long, dTarget as double) as double 

Dim oCellAddressFormula as new com.sun.star.table.CellAddress 
oCellAddressFormula.Sheet = lSheetF-1 
oCellAddressFormula.Column = lColF-1 
oCellAddressFormula.Row = lRowF-1 

Dim oCellAddressVaiable as new com.sun.star.table.CellAddress 
oCellAddressVaiable.Sheet = lSheetV-1 
oCellAddressVaiable.Column = lColV-1 
oCellAddressVaiable.Row = lRowV1-1 

oGoalResult = ThisComponent.seekGoal(oCellAddressFormula, oCellAddressVaiable, dTarget) 
GSeek2 = oGoalResult.Result 

End Function 

在單元格中使用作爲

=GSEEK2(SHEET(A1),COLUMN(A1),ROW(A1), SHEET(A2),COLUMN(A2),ROW(A2), 5) 
+0

嗨,感謝您的回覆,我擔心這是LO的特定問題,但是如果我按照原樣鍵入代碼,則會出現以下錯誤,並且代碼的第3行高亮顯示:BASIC運行時錯誤。 參數不是可選的。「有什麼想法? – 2014-11-05 19:03:11

+0

你如何嘗試運行代碼?你不能運行一個有參數的函數,而不會傳遞它的參數。將該功能粘貼到文檔標準庫的模塊中。保存並關閉BASIC IDE。使用公式= GSEEK2(SHEET(A1),COLUMN(A1),ROW(A1),SHEET(A2),COLUMN(A2),ROW(A2),5)''調用用戶定義函數。 – 2014-11-06 05:51:38