Files
libreoffice/wizards/source/access2base/DoCmd.xba
Jean-Pierre Ledure 0bb042d442 Access2Base : Reference to documentation added in every module
+ workaround for setPosSize issue (LO 4.1)
+ "Sidebar" argument for RunCommand
+ Trace dialog layout revisit for cleaner display in Linux

Change-Id: I0d5c4da5681ab1649d062a7133d507163163343e
Reviewed-on: https://gerrit.libreoffice.org/6449
Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu>
Tested-by: Lionel Elie Mamane <lionel@mamane.lu>
2013-10-28 07:38:33 +00:00

2046 lines
92 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="DoCmd" script:language="StarBasic">REM =======================================================================================================================
REM === The Access2Base library is a part of the LibreOffice project. ===
REM === Full documentation is available on http://www.access2base.com ===
REM =======================================================================================================================
Option Explicit
Type _FindParams
FindRecord As Integer &apos; Set to 1 at first invocation of FindRecord
FindWhat As Variant
Match As Integer
MatchCase As Boolean
Search As Integer
SearchAsFormatted As Boolean &apos; Must be False
FindFirst As Boolean
OnlyCurrentField As Integer
Form As String &apos; Shortcut
GridControl As String &apos; Shortcut
Target As String &apos; Shortcut
LastRow As Long &apos; Last row explored - 0 = before first
LastColumn As Integer &apos; Last column explored - 0 ... N-1 index in next arrays; 0 if OnlyCurrentField = acCurrent
ColumnNames() As String &apos; Array of column names in grid with boundfield and of same type as FindWhat
ResultSetIndex() As Integer &apos; Array of column numbers in ResultSet
End Type
&apos;Global _gFind As _FindParams
Type _Window
Frame As Object &apos; com.sun.star.comp.framework.Frame
_Name As String &apos; Object Name
WindowType As Integer &apos; One of the object types
End Type
REM VBA allows call to actions with missing arguments e.g. OpenForm(&quot;aaa&quot;,,&quot;[field]=2&quot;)
REM in StarBasic IsMissing requires Variant parameters
REM -----------------------------------------------------------------------------------------------------------------------
Public Function mClose(Optional ByVal pvObjectType As Variant _
, Optional ByVal pvObjectName As Variant _
, Optional ByVal pvSave As Variant _
) As Boolean
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;Close&quot;)
mClose = False
If IsMissing(pvObjectType) Or IsMissing(pvObjectName) Then Call _TraceArguments()
If IsMissing(pvSave) Then pvSave = acSavePrompt
If Not (Utils._CheckArgument(pvObjectType, 1, Utils._AddNumeric(), _
Array(acTable, acQuery, acForm, acReport)) _
And Utils._CheckArgument(pvObjectName, 2, vbString) _
And Utils._CheckArgument(pvSave, 3, Utils._AddNumeric(), Array(acSavePrompt)) _
) Then Goto Exit_Function
Dim sObjects() As String, sObjectName As String, oController As Object, oObject As Object
Dim i As Integer, bFound As Boolean, lComponent As Long
Dim oDatabase As Object
If _TraceStandalone() Then Goto Exit_Function
&apos; Check existence of object and find its exact (case-sensitive) name
Set oDatabase = Application._CurrentDb()
Select Case pvObjectType
Case acForm
sObjects = oDatabase.Document.getFormDocuments.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.FORM
Case acTable
sObjects = oDatabase.Connection.getTables.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.TABLE
Case acQuery
sObjects = oDatabase.Connection.getQueries.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.QUERY
Case acReport
sObjects = oDatabase.Document.getReportDocuments.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.REPORT
End Select
bFound = False
For i = 0 To UBound(sObjects)
If UCase(pvObjectName) = UCase(sObjects(i)) Then
sObjectName = sObjects(i)
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Trace_NotFound
Select Case pvObjectType
Case acForm
Set oController = oDatabase.Document.getFormDocuments.getByName(sObjectName)
mClose = oController.close()
Case acTable, acQuery &apos; Not optimal but it works !!
Set oController = oDatabase.Document.CurrentController
Set oObject = oController.loadComponent(lComponent, sObjectName, False)
oObject.frame.close(False)
mClose = True
Case acReport
Set oController = oDatabase.Document.getReportDocuments.getByName(sObjectName)
mClose = oController.close()
End Select
Exit_Function:
Set oObject = Nothing
Set oController = Nothing
Utils._ResetCalledSub(&quot;Close&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Close&quot;, Erl)
GoTo Exit_Function
Trace_Error:
TraceError(TRACEFATAL, ERRCLOSEOBJECT, Utils._CalledSub(), 0, , Array(_GetLabel(Array(&quot;Table&quot;, &quot;Query&quot;, &quot;Form&quot;, &quot;Report&quot;)(pvObjectType)), pvObjectName))
Goto Exit_Function
Trace_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(_GetLabel(Array(&quot;Table&quot;, &quot;Query&quot;, &quot;Form&quot;, &quot;Report&quot;)(pvObjectType)), pvObjectName))
Goto Exit_Function
End Function &apos; (m)Close
REM -----------------------------------------------------------------------------------------------------------------------
Public Function FindNext() As Boolean
&apos; Must be called after a FindRecord
&apos; Execute instructions set in FindRecord object
If _ErrorHandler() Then On Local Error Goto Error_Function
FindNext = False
Utils._SetCalledSub(&quot;FindNext&quot;)
Dim ofForm As Object, ocGrid As Object
Dim i As Integer, lInitialRow As Long, lFindRow As Long
Dim bFound As Boolean, b2ndRound As Boolean, bStop As Boolean
Dim vFindValue As Variant, oFindrecord As Object
oFindRecord = Application.CurrentDb().FindRecord
With oFindRecord
If .FindRecord = 0 Then Goto Error_FindRecord
.FindRecord = 0
Set ofForm = getObject(.Form)
Set ocGrid = getObject(.GridControl)
&apos; Move cursor to the initial row. Operation based on last FindRecord, not on user interactions done inbetween
If ofForm.DatabaseForm.RowCount &lt;= 0 then Goto Exit_Function &apos; Dataset is empty
lInitialRow = .LastRow &apos; Used if Search = acSearchAll
bFound = False
lFindRow = .LastRow
b2ndRound = False
Do
&apos; Last column ? Go to next row
If .LastColumn &gt;= UBound(.ColumnNames) Then
bStop = False
If ofForm.DatabaseForm.isAfterLast() And .Search = acUp Then
ofForm.DatabaseForm.last()
ElseIf ofForm.DatabaseForm.isLast() And .Search = acSearchAll Then
ofForm.DatabaseForm.first()
b2ndRound = True
ElseIf ofForm.DatabaseForm.isBeforeFirst() And (.Search = acDown Or .Search = acSearchAll) Then
ofForm.DatabaseForm.first()
ElseIf ofForm.DatabaseForm.isFirst() And .search = acUp Then
ofForm.DatabaseForm.beforeFirst()
bStop = True
ElseIf ofForm.DatabaseForm.isLast() And .search = acDown Then
ofForm.DatabaseForm.afterLast()
bStop = True
ElseIf .Search = acUp Then
ofForm.DatabaseForm.previous()
Else
ofForm.DatabaseForm.next()
End If
lFindRow = ofForm.DatabaseForm.getRow()
If bStop Or (.Search = acSearchAll And lFindRow &gt;= lInitialRow And b2ndRound) Then
ofForm.DatabaseForm.absolute(lInitialRow)
Exit Do
End If
.LastColumn = 0
Else
.LastColumn = .LastColumn + 1
End If
&apos; Examine column contents
If .LastColumn &lt;= UBound(.ColumnNames) Then
For i = .LastColumn To UBound(.ColumnNames)
vFindValue = Utils._getResultSetColumnValue(ofForm.DatabaseForm.createResultSet(), .ResultSetIndex(i))
Select Case VarType(.FindWhat)
Case vbDate, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbBigint, vbDecimal
bFound = ( .FindWhat = vFindValue )
Case vbString
Select Case .Match
Case acStart
If .MatchCase Then
bFound = ( Left(.FindWhat, Len(.FindWhat)) = vFindValue )
Else
bFound = ( UCase(Left(.FindWhat, Len(.FindWhat))) = UCase(vFindValue) )
End If
Case acAnyWhere
If .MatchCase Then
bFound = ( InStr(1, vFindValue, .FindWhat, 0) &gt; 0 )
Else
bFound = ( InStr(vFindValue, .FindWhat) &gt; 0 )
End If
Case acEntire
If .MatchCase Then
bFound = ( .FindWhat = vFindValue )
Else
bFound = ( UCase(.FindWhat) = UCase(vFindValue) )
End If
End Select
End Select
If bFound Then
.LastColumn = i
Exit For
End If
Next i
End If
Loop While Not bFound
.LastRow = lFindRow
If bFound Then
ocGrid.Controls(.ColumnNames(.LastColumn)).setFocus()
.FindRecord = 1
FindNext = True
End If
End With
Exit_Function:
Utils._ResetCalledSub(&quot;FindNext&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;FindNext&quot;, Erl)
GoTo Exit_Function
Error_FindRecord:
TraceError(TRACEERRORS, ERRFINDRECORD, Utils._CalledSub(), 0)
Goto Exit_Function
End Function &apos; FindNext V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function FindRecord(Optional ByVal pvFindWhat As Variant _
, Optional ByVal pvMatch As Variant _
, Optional ByVal pvMatchCase As Variant _
, Optional ByVal pvSearch As Variant _
, Optional ByVal pvSearchAsFormatted As Variant _
, Optional ByVal pvTargetedField As Variant _
, Optional ByVal pvFindFirst As Variant _
) As Boolean
&apos;Find a value (string or other) in the underlying data of a gridcontrol
&apos;Search in all columns or only in one single control
&apos; see pvTargetedField = acAll or acCurrent
&apos; pvTargetedField may also be a shortcut to a GridControl or one of its subcontrols
&apos;Initialize _Findrecord structure in Database root and call FindNext() to set cursor on found value
If _ErrorHandler() Then On Local Error Goto Error_Function
FindRecord = False
Utils._SetCalledSub(&quot;FindRecord&quot;)
If IsMissing(pvFindWhat) Or pvFindWhat = &quot;&quot; Then Call _TraceArguments()
If IsMissing(pvMatch) Then pvMatch = acEntire
If IsMissing(pvMatchCase) Then pvMatchCase = False
If IsMissing(pvSearch) Then pvSearch = acSearchAll
If IsMissing(pvSearchAsFormatted) Then pvSearchAsFormatted = False &apos; Anyway only False supported
If IsMissing(pvTargetedField) Then pvTargetedField = acCurrent
If IsMissing(pvFindFirst) Then pvFindFirst = True
If Not (Utils._CheckArgument(pvFindWhat, 1, Utils._AddNumeric(Array(vbString, vbDate))) _
And Utils._CheckArgument(pvMatch, 2, Utils._AddNumeric(), Array(acAnywhere, acEntire, acStart)) _
And Utils._CheckArgument(pvMatchCase, 3, vbBoolean) _
And Utils._CheckArgument(pvSearch, 4, Utils._AddNumeric(), Array(acDown, acSearchAll, acUp)) _
And Utils._CheckArgument(pvSearchAsFormatted, 5, vbBoolean, Array(False)) _
And Utils._CheckArgument(pvTargetedField, 6, Utils._AddNumeric(vbString)) _
And Utils._CheckArgument(pvFindFirst, 7, vbBoolean) _
) Then Exit Function
If VarType(pvTargetedField) &lt;&gt; vbString Then
If Not Utils._CheckArgument(pvTargetedField, 6, Utils._AddNumeric(), Array(acAll, acCurrent)) Then Exit Function
End If
Dim ocTarget As Object, i As Integer, j As Integer, vNames() As Variant, iCount As Integer, vIndexes() As Variant
Dim vColumn As Variant, vDataField As Variant, ofParentForm As Variant, oColumns As Object, vParentGrid As Object
Dim bFound As Boolean, ocGridControl As Object, iFocus As Integer
Dim oFindRecord As _FindParams
With oFindRecord
.FindRecord = 0
.FindWhat = pvFindWhat
.Match = pvMatch
.MatchCase = pvMatchCase
.Search = pvSearch
.SearchAsFormatted = pvSearchAsFormatted
.FindFirst = pvFindFirst
&apos; Determine target
&apos; Either: pvTargetedField = Grid =&gt; search all fields
&apos; pvTargetedField = Control in Grid =&gt; search only in that column
&apos; pvTargetedField = acAll or acCurrent =&gt; determine focus
Select Case True
Case VarType(pvTargetedField) = vbString
Set ocTarget = getObject(pvTargetedField)
If ocTarget.SubType = CTLGRIDCONTROL Then
.OnlyCurrentField = acAll
.GridControl = ocTarget._Shortcut
.Target = .GridControl
ofParentForm = getObject(_getUpperShortcut(ocTarget._Shortcut, ocTarget._Name))
If IsNull(ofParentForm.DatabaseForm) Then Goto Error_DatabaseForm
Set oColumns = ofParentForm.DatabaseForm.createResultSet().Columns
iCount = -1
For i = 0 To ocTarget.ControlModel.Count - 1
Set vColumn = ocTarget.ControlModel.getByIndex(i)
Set vDataField = vColumn.BoundField &apos; examine field type
If Not IsNull(vDataField) Then
If _CheckColumnType(pvFindWhat, vDataField) Then
iCount = iCount + 1
ReDim Preserve vNames(0 To iCount)
vNames(iCount) = vColumn.Name
ReDim Preserve vIndexes(0 To iCount)
For j = 0 To oColumns.Count - 1
If vDataField.Name = oColumns.ElementNames(j) Then
vIndexes(iCount) = j + 1
Exit For
End If
Next j
End If
End If
Next i
ElseIf ocTarget._Type = OBJCONTROL Then &apos; Control within a grid tbc
If IsNull(ocTarget.ControlModel.BoundField) Then Goto Error_Target &apos; Control MUST be bound to a database record or query
&apos; BoundField is in ControlModel, thanks PASTIM !
.OnlyCurrentField = acCurrent
vParentGrid = getObject(_getUpperShortcut(ocTarget._Shortcut, ocTarget._Name))
If vParentGrid.SubType &lt;&gt; CTLGRIDCONTROL Then Goto Error_Target
.GridControl = vParentGrid._Shortcut
ofParentForm = getObject(_getUpperShortcut(vParentGrid._Shortcut, vParentGrid._Name))
If IsNull(ofParentForm.DatabaseForm) Then Goto Error_DatabaseForm
.Target = ocTarget._Shortcut
Set vDataField = ocTarget.ControlModel.BoundField
If Not _CheckColumnType(pvFindWhat, vDataField) Then Goto Error_Target
ReDim vNames(0), vIndexes(0)
vNames(0) = ocTarget._Name
Set oColumns = ofParentForm.DatabaseForm.createResultSet().Columns
For j = 0 To oColumns.Count - 1
If vDataField.Name = oColumns.ElementNames(j) Then
vIndexes(0) = j + 1
Exit For
End If
Next j
End If
Case Else &apos; Determine focus
iCount = Application.Forms()._Count
If iCount = 0 Then Goto Error_ActiveForm
bFound = False
For i = 0 To iCount - 1 &apos; Determine form having the focus
Set ofParentForm = Application.Forms(i)
If ofParentForm.Component.CurrentController.Frame.IsActive() Then
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Error_ActiveForm
If IsNull(ofParentForm.DatabaseForm) Then Goto Error_DatabaseForm
iCount = ofParentForm.Controls().Count
bFound = False
For i = 0 To iCount - 1
Set ocGridControl = ofParentForm.Controls(i)
If ocGridControl.SubType = CTLGRIDCONTROL Then
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Error_NoGrid
.GridControl= ocGridControl._Shortcut
iFocus = -1
iFocus = ocGridControl.ControlView.getCurrentColumnPosition() &apos; Deprecated but no alternative found !!
If pvTargetedField = acAll Or iFocus &lt; 0 Or iFocus &gt;= ocGridControl.ControlModel.Count Then &apos; Has a control within the grid the focus ? NO
.OnlyCurrentField = acAll
Set oColumns = ofParentForm.DatabaseForm.createResultSet().Columns
iCount = -1
For i = 0 To ocGridControl.ControlModel.Count - 1
Set vColumn = ocGridControl.ControlModel.getByIndex(i)
Set vDataField = vColumn.BoundField &apos; examine field type
If Not IsNull(vDataField) Then
If _CheckColumnType(pvFindWhat, vDataField) Then
iCount = iCount + 1
ReDim Preserve vNames(0 To iCount)
vNames(iCount) = vColumn.Name
ReDim Preserve vIndexes(0 To iCount)
For j = 0 To oColumns.Count - 1
If vDataField.Name = oColumns.ElementNames(j) Then
vIndexes(iCount) = j + 1
Exit For
End If
Next j
End If
End If
Next i
Else &apos; Has a control within the grid the focus ? YES
.OnlyCurrentField = acCurrent
Set vColumn = ocGridControl.ControlModel.getByIndex(iFocus)
Set ocTarget = ocGridControl.Controls(vColumn.Name)
.Target = ocTarget._Shortcut
Set vDataField = ocTarget.ControlModel.BoundField
If IsNull(vDataField) Then Goto Error_Target &apos; Control MUST be bound to a database record or query
If Not _CheckColumnType(pvFindWhat, vDataField) Then Goto Error_Target
ReDim vNames(0), vIndexes(0)
vNames(0) = ocTarget._Name
Set oColumns = ofParentForm.DatabaseForm.createResultSet().Columns
For j = 0 To oColumns.Count - 1
If vDataField.Name = oColumns.ElementNames(j) Then
vIndexes(0) = j + 1
Exit For
End If
Next j
End If
End Select
.Form = ofParentForm._Shortcut
.LastColumn = UBound(vNames)
.ColumnNames = vNames
.ResultSetIndex = vIndexes
If pvFindFirst Then
Select Case pvSearch
Case acDown, acSearchAll
ofParentForm.DatabaseForm.beforeFirst()
.LastRow = 0
Case acUp
ofParentForm.DatabaseForm.afterLast()
.LastRow = ofParentForm.DatabaseForm.RowCount + 1
End Select
Else
Select Case True
Case ofParentForm.DatabaseForm.isBeforeFirst And (pvSearch = acSearchAll Or pvSearch = acDown)
.LastRow = 0
Case ofParentForm.DatabaseForm.isAfterLast And pvSearch = acUp
ofParentForm.DatabaseForm.last() &apos; RowCount produces a wrong value as long as last record has not been reached
.LastRow = ofParentForm.DatabaseForm.RowCount + 1
Case Else
.LastRow = ofParentForm.DatabaseForm.getRow()
End Select
End If
.FindRecord = 1
End With
Set Application.CurrentDb().FindRecord = oFindRecord
FindRecord = DoCmd.Findnext()
Exit_Function:
Utils._ResetCalledSub(&quot;FindRecord&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;FindRecord&quot;, Erl)
GoTo Exit_Function
Error_ActiveForm:
TraceError(TRACEERRORS, ERRNOACTIVEFORM, Utils._CalledSub(), 0)
Goto Exit_Function
Error_DatabaseForm:
TraceError(TRACEFATAL, ERRDATABASEFORM, Utils._CalledSub(), 0, 1, vParentForm._Name)
Goto Exit_Function
Error_Target:
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, 1, Array(6, pvTargetedField))
Goto Exit_Function
Error_NoGrid:
TraceError(TRACEFATAL, ERRNOGRIDINFORM, Utils._CalledSub(), 0, 1, vParentForm._Name)
Goto Exit_Function
End Function &apos; FindRecord V0.9.1
REM -----------------------------------------------------------------------------------------------------------------------
Public Function GoToControl(Optional ByVal pvControlName As variant) As Boolean
&apos; Set the focus on the named control on the active form.
&apos; Return False if the control does not exist or is disabled,
Utils._SetCalledSub(&quot;GoToControl&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
If IsMissing(pvControlName) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvControlName, 1, vbString) Then Goto Exit_Function
GoToControl = False
Dim oWindow As Object, ofForm As Object, ocControl As Object
Dim i As Integer, iCount As Integer
Set oWindow = _SelectWindow()
If oWindow.WindowType = acForm Then
Set ofForm = Application.Forms(oWindow._Name)
iCount = ofForm.Controls().Count
For i = 0 To iCount - 1
ocControl = ofForm.Controls(i)
If UCase(ocControl._Name) = UCase(pvControlName) Then
If Methods.hasProperty(ocControl, &quot;Enabled&quot;) Then
If ocControl.Enabled Then
ocControl.setFocus()
GoToControl = True
Exit For
End If
End If
End If
Next i
End If
Exit_Function:
Utils._ResetCalledSub(&quot;GoToControl&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;GoToControl&quot;, Erl)
GoTo Exit_Function
End Function &apos; GoToControl V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function GoToRecord(Optional ByVal pvObjectType As Variant _
, Optional ByVal pvObjectName As Variant _
, Optional ByVal pvRecord As Variant _
, Optional ByVal pvOffset As Variant _
) As Boolean
&apos;Move to record indicated by pvRecord in the object designated by pvObjectType (MUST BE acDataForm)
If _ErrorHandler() Then On Local Error Goto Error_Function
GoToRecord = False
Utils._SetCalledSub(&quot;GoToRecord&quot;)
If IsMissing(pvObjectName) Then pvObjectName = &quot;&quot;
If IsMissing(pvObjectType) Then
If pvObjectName &lt;&gt; &quot;&quot; Then pvObjectType = acDataForm Else pvObjectType = acActiveDataObject
End If
If IsMissing(pvRecord) Then pvRecord = acNext
If IsMissing(pvOffset) Then pvOffset = 1
If Not (Utils._CheckArgument(pvObjectType, 1, Utils._AddNumeric() _
, Array(acActiveDataObject, acDataForm)) _
And Utils._CheckArgument(pvObjectName, 2, vbString) _
And Utils._CheckArgument(pvRecord, 3, Utils._AddNumeric() _
, Array(acFirst, acGoTo, acLast, acNewRec, acNext, acPrevious)) _
And Utils._CheckArgument(pvOffset, 4, Utils._AddNumeric()) _
) Then Goto Exit_Function
If pvObjectType = acActiveDataObject And pvObjectName &lt;&gt; &quot;&quot; Then Goto Error_Target
If pvOffset &lt; 0 And pvRecord &lt;&gt; acGoTo Then Goto Error_Offset
Dim ofForm As Object, oGeneric As Object
Dim i As Integer, iCount As Integer, bFound As Boolean, lOffset As Long
Dim sObjectName, iLengthName As Integer
Select Case pvObjectType
Case acActiveDataObject &apos; Determine active form
iCount = Application._CountOpenForms()
If iCount = 0 Then Goto Error_ActiveForm
bFound = False
For i = 0 To iCount - 1 &apos; Determine form having the focus
Set ofForm = Application.Forms(i)
If ofForm.Component.CurrentController.Frame.IsActive() Then
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Error_ActiveForm
Case acDataForm
&apos; pvObjectName can be &quot;myForm&quot;, &quot;Forms!myForm&quot;, &quot;Forms!myForm!mySubform&quot; or &quot;Forms!myForm!mySubform.Form&quot;
sObjectName = UCase(pvObjectName)
iLengthName = Len(sObjectName)
Select Case True
Case iLengthName &gt; 6 And Left(sObjectName, 6) = &quot;FORMS!&quot; And Right(sObjectName, 5) = &quot;.FORM&quot;
Set ofForm = getObject(pvObjectName)
If ofForm._Type &lt;&gt; OBJSUBFORM Then Goto Error_Target
Case iLengthName &gt; 6 And Left(sObjectName, 6) = &quot;FORMS!&quot;
Set oGeneric = getObject(pvObjectName)
If oGeneric._Type = OBJFORM Or oGeneric._Type = OBJSUBFORM Then
Set ofForm = oGeneric
ElseIf oGeneric.SubType = CTLSUBFORM Then
Set ofForm = oGeneric.Form
Else Goto Error_Target
End If
Case sObjectName = &quot;&quot;
Call _TraceArguments()
Case Else
Set ofForm = Application.Forms(pvObjectName)
End Select
Case Else &apos; Not supported
End Select
&apos; Check if current row updated =&gt; Save it
Dim oResultSet As Object
Set oResultSet = ofForm.DatabaseForm
If oResultSet.IsNew Then
oResultSet.insertRow()
ElseIf oResultSet.IsModified Then
oResultSet.updateRow()
End If
lOffset = pvOffset
Select Case pvRecord
Case acFirst : GoToRecord = oResultSet.first()
Case acGoTo : GoToRecord = oResultSet.absolute(lOffset)
Case acLast : GoToRecord = oResultSet.last()
Case acNewRec
oResultSet.last() &apos; To simulate the behaviour in the UI
oResultSet.moveToInsertRow()
GoToRecord = True
Case acNext
If lOffset = 1 Then
GoToRecord = oResultSet.next()
Else
GoToRecord = oResultSet.relative(lOffset)
End If
Case acPrevious
If lOffset = 1 Then
GoToRecord = oResultSet.previous()
Else
GoToRecord = oResultSet.relative(- lOffset)
End If
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;GoToRecord&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;GoToRecord&quot;, Erl)
GoTo Exit_Function
Error_ActiveForm:
TraceError(TRACEERRORS, ERRNOACTIVEFORM, Utils._CalledSub(), 0)
Goto Exit_Function
Error_Target:
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, 1, 2)
Goto Exit_Function
Error_Offset:
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, 1, 4)
Goto Exit_Function
End Function &apos; GoToRecord
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Maximize() As Boolean
&apos; Maximize the window having the focus
Utils._SetCalledSub(&quot;Maximize&quot;)
Dim oWindow As Object
Maximize = False
Set oWindow = _SelectWindow()
If Not IsNull(oWindow.Frame) Then
If Utils._hasUNOProperty(oWindow.Frame.ContainerWindow, &quot;IsMaximized&quot;) Then oWindow.Frame.ContainerWindow.IsMaximized = True &apos; Ignored when &lt;= OO3.2
Maximize = True
End If
Utils._ResetCalledSub(&quot;Maximize&quot;)
Exit Function
End Function &apos; Maximize V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Minimize() As Boolean
&apos; Maximize the form having the focus
Utils._SetCalledSub(&quot;Minimize&quot;)
Dim oWindow As Object
Minimize = False
Set oWindow = _SelectWindow()
If Not IsNull(oWindow.Frame) Then
If Utils._hasUNOProperty(oWindow.Frame.ContainerWindow, &quot;IsMinimized&quot;) Then oWindow.Frame.ContainerWindow.IsMinimized = True
Minimize = True
End If
Utils._ResetCalledSub(&quot;Minimize&quot;)
Exit Function
End Function &apos; Minimize V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function MoveSize(ByVal Optional pvRight As Variant _
, ByVal Optional pvDown As Variant _
, ByVal Optional pvWidth As Variant _
, ByVal Optional pvHeight As Variant _
) As Variant
&apos; Execute MoveSize action
Utils._SetCalledSub(&quot;MoveSize&quot;)
If _ErrorHandler() Then On Local Error Goto Error_Function
MoveSize = False
If IsMissing(pvRight) Then pvRight = -1
If IsMissing(pvDown) Then pvDown = -1
If IsMissing(pvWidth) Then pvWidth = -1
If IsMissing(pvHeight) Then pvHeight = -1
If Not Utils._CheckArgument(pvRight, 1, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvDown, 2, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvWidth, 3, Utils._AddNumeric()) Then Goto Exit_Function
If Not Utils._CheckArgument(pvHeight, 4, Utils._AddNumeric()) Then Goto Exit_Function
Dim iArg As Integer &apos; Check argument values
iArg = 0
If pvHeight &lt; -1 Then iArg = 4 : If pvWidth &lt; -1 Then iArg = 3
If pvDown &lt; -1 Then iArg = 2 : If pvRight &lt; -1 Then iArg = 2
If iArg &gt; 0 Then
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, 1, iArg)
Goto Exit_Function
End If
Dim iPosSize As Integer
iPosSize = 0
If pvRight &gt;= 0 Then iPosSize = iPosSize + com.sun.star.awt.PosSize.X
If pvDown &gt;= 0 Then iPosSize = iPosSize + com.sun.star.awt.PosSize.Y
If pvWidth &gt; 0 Then iPosSize = iPosSize + com.sun.star.awt.PosSize.WIDTH
If pvHeight &gt; 0 Then iPosSize = iPosSize + com.sun.star.awt.PosSize.HEIGHT
Dim oWindow As Object
Set oWindow = _SelectWindow()
With oWindow
If Not IsNull(.Frame) Then
If Utils._hasUNOProperty(.Frame.ContainerWindow, &quot;IsMaximized&quot;) Then &apos; Ignored when &lt;= OO3.2
.Frame.ContainerWindow.IsMaximized = False
.Frame.ContainerWindow.IsMinimized = False
End If
.Frame.ContainerWindow.setPosSize(pvRight, pvDown, pvWidth, pvHeight, iPosSize)
MoveSize = True
End If
End With
Exit_Function:
Utils._ResetCalledSub(&quot;MoveSize&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;MoveSize&quot;, Erl)
GoTo Exit_Function
End Function &apos; MoveSize V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenForm(Optional ByVal pvFormName As Variant _
, Optional ByVal pvView As Variant _
, Optional ByVal pvFilterName As Variant _
, Optional ByVal pvWhereCondition As Variant _
, Optional ByVal pvDataMode As Variant _
, Optional ByVal pvWindowMode As Variant _
, Optional ByVal pvOpenArgs As Variant _
) As Variant
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;OpenForm&quot;)
If IsMissing(pvFormName) Then Call _TraceArguments()
If IsMissing(pvView) Then pvView = acNormal
If IsMissing(pvFilterName) Then pvFilterName = &quot;&quot;
If IsMissing(pvWhereCondition) Then pvWhereCondition = &quot;&quot;
If IsMissing(pvDataMode) Then pvDataMode = acFormPropertySettings
If IsMissing(pvWindowMode) Then pvWindowMode = acWindowNormal
If IsMissing(pvOpenArgs) Then pvOpenArgs = &quot;&quot;
Set OpenForm = Nothing
If Not (Utils._CheckArgument(pvFormName, 1, vbString) _
And Utils._CheckArgument(pvView, 2, Utils._AddNumeric(), Array(acNormal, acPreview, acDesign)) _
And Utils._CheckArgument(pvFilterName, 3, vbString) _
And Utils._CheckArgument(pvWhereCondition, 4, vbString) _
And Utils._CheckArgument(pvDataMode, 5, Utils._AddNumeric(), Array(acFormAdd, acFormEdit, acFormPropertySettings, acFormReadOnly)) _
And Utils._CheckArgument(pvWindowMode, 6, Utils._AddNumeric(), Array(acDialog, acHidden, acIcon, acWindowNormal)) _
) Then Goto Exit_Function
Dim ofForm As Object, sWarning As String
Dim oOpenForm As Object, bOpenMode As Boolean, oController As Object
If _TraceStandalone() Then Goto Exit_Function
Set ofForm = Application.AllForms(pvFormName)
If ofForm.IsLoaded Then
sWarning = _GetLabel(&quot;ERR&quot; &amp; ERRFORMYETOPEN)
sWarning = Join(Split(sWarning, &quot;%0&quot;), ofForm._Name)
TraceLog(TRACEANY, &quot;OpenForm: &quot; &amp; sWarning)
Set OpenForm = ofForm
Goto Exit_Function
End If
&apos; Open the form
Select Case pvView
Case acNormal, acPreview: bOpenMode = False
Case acDesign : bOpenMode = True
End Select
Set oController = Application._CurrentDb().Document.CurrentController
Set oOpenForm = oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM, ofForm._Name, bOpenMode)
&apos; Apply the filters (FilterName) AND (WhereCondition)
Dim sFilter As String, oForm As Object, oFormsCollection As Object
If pvFilterName = &quot;&quot; And pvWhereCondition = &quot;&quot; Then
sFilter = &quot;&quot;
ElseIf pvFilterName = &quot;&quot; Or pvWhereCondition = &quot;&quot; Then
sFilter = pvFilterName &amp; pvWhereCondition
Else
sFilter = &quot;(&quot; &amp; pvFilterName &amp; &quot;) And (&quot; &amp; pvWhereCondition &amp; &quot;)&quot;
End If
Set oFormsCollection = oOpenForm.DrawPage.Forms
If oFormsCollection.hasByName(&quot;MainForm&quot;) Then
Set oForm = oFormsCollection.getByName(&quot;MainForm&quot;)
ElseIf oFormsCollection.hasByName(&quot;Form&quot;) Then
Set oForm = oFormsCollection.getByName(&quot;Form&quot;)
ElseIf oFormsCollection.hasByName(ofForm._Name) Then
Set oForm = oFormsCollection.getByName(ofForm._Name)
Else
Goto Trace_Error
End If
If sFilter &lt;&gt; &quot;&quot; Then
oForm.Filter = Utils._ReplaceSquareBrackets(sFilter)
oForm.ApplyFilter = True
oForm.reload()
ElseIf oForm.Filter &lt;&gt; &quot;&quot; Then &apos; If a filter has been set previously it must be removed
oForm.Filter = &quot;&quot;
oForm.ApplyFilter = False
oForm.reload()
End If
&apos;Housekeeping
Set ofForm = Application.AllForms(pvFormName) &apos; Redone to reinitialize all properties of ofForm now FormName is open
With ofForm
Select Case pvDataMode
Case acFormAdd
.setAllowAdditions = True
.AllowDeletions = False
.AllowEdits = False
Case acFormEdit
.AllowAdditions = True
.AllowDeletions = True
.AllowEdits = True
Case acFormReadOnly
.AllowAdditions = False
.AllowDeletions = False
.AllowEdits = False
Case acFormPropertySettings
End Select
.Visible = ( pvWindowMode &lt;&gt; acHidden )
._OpenArgs = pvOpenArgs
&apos;To avoid AOO 3,4 bug See http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&amp;t=53751
.Component.CurrentController.ViewSettings.ShowOnlineLayout = True
End With
Set OpenForm = ofForm
Exit_Function:
Utils._ResetCalledSub(&quot;OpenForm&quot;)
Set ofForm = Nothing
Set oOpenForm = Nothing
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OpenForm&quot;, Erl)
Set OpenForm = Nothing
GoTo Exit_Function
Trace_Error:
TraceError(TRACEFATAL, ERROPENFORM, Utils._CalledSub(), 0, , pvFormName)
Set OpenForm = Nothing
Goto Exit_Function
End Function &apos; OpenForm V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenQuery(Optional ByVal pvQueryName As Variant _
, Optional ByVal pvView As Variant _
, Optional ByVal pvDataMode As Variant _
) As Boolean
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;OpenQuery&quot;)
If IsMissing(pvQueryName) Then Call _TraceArguments()
If IsMissing(pvView) Then pvView = acViewNormal
If IsMissing(pvDataMode) Then pvDataMode = acEdit
OpenQuery = DoCmd._OpenObject(&quot;Query&quot;, pvQueryName, pvView, pvDataMode)
Exit_Function:
Utils._ResetCalledSub(&quot;OpenQuery&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OpenQuery&quot;, Erl)
GoTo Exit_Function
End Function &apos; OpenQuery
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenReport(Optional ByVal pvReportName As Variant _
, Optional ByVal pvView As Variant _
, Optional ByVal pvDataMode As Variant _
) As Boolean
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;OpenReport&quot;)
If IsMissing(pvReportName) Then Call _TraceArguments()
If IsMissing(pvView) Then pvView = acViewNormal
If IsMissing(pvDataMode) Then pvDataMode = acEdit
OpenReport = DoCmd._OpenObject(&quot;Report&quot;, pvReportName, pvView, pvDataMode)
Exit_Function:
Utils._ResetCalledSub(&quot;OpenReport&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OpenReport&quot;, Erl)
GoTo Exit_Function
End Function &apos; OpenReport
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenSQL(Optional ByVal pvSQL As Variant _
, Optional ByVal pvOption As Variant _
) As Boolean
&apos; Return True if the execution of the SQL statement was successful
&apos; SQL must contain a SELECT query
&apos; pvOption can force pass through mode
&apos; Derived from BaseTools
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;OpenSQL&quot;)
OpenSQL = False
If IsMissing(pvSQL) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvSQL, 1, vbString) Then Goto Exit_Function
Const cstNull = -1
If IsMissing(pvOption) Then
pvOption = cstNull
Else
If Not Utils._CheckArgument(pvOption, 2, Utils._AddNumeric(), dbSQLPassThrough) Then Goto Exit_Function
End If
Dim oDatabase As Object, oURL As New com.sun.star.util.URL, oDispatch As Object
Dim vArgs(8) as New com.sun.star.beans.PropertyValue
Set oDatabase = _CurrentDb
oURL.Complete = &quot;.component:DB/DataSourceBrowser&quot;
oDispatch = StarDesktop.queryDispatch(oURL, &quot;_Blank&quot;, 8)
vArgs(0).Name = &quot;ActiveConnection&quot; : vArgs(0).Value = CurrentDb.Connection
vArgs(1).Name = &quot;CommandType&quot; : vArgs(1).Value = com.sun.star.sdb.CommandType.COMMAND
vArgs(2).Name = &quot;Command&quot; : vArgs(2).Value = Utils._ReplaceSquareBrackets(pvSQL)
vArgs(3).Name = &quot;ShowMenu&quot; : vArgs(3).Value = True
vArgs(4).Name = &quot;ShowTreeView&quot; : vArgs(4).Value = False
vArgs(5).Name = &quot;ShowTreeViewButton&quot; : vArgs(5).Value = False
vArgs(6).Name = &quot;Filter&quot; : vArgs(6).Value = &quot;&quot;
vArgs(7).Name = &quot;ApplyFilter&quot; : vArgs(7).Value = False
vArgs(8).Name = &quot;EscapeProcessing&quot; : vArgs(8).Value = CBool(Not ( pvOption = dbSQLPassThrough ))
oDispatch.dispatch(oURL, vArgs)
OpenSQL = True
Exit_Function:
Utils._ResetCalledSub(&quot;OpenSQL&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OpenSQL&quot;, Erl)
GoTo Exit_Function
SQL_Error:
TraceError(TRACEFATAL, ERRSQLSTATEMENT, Utils._CalledSub(), 0, , pvSQL)
Goto Exit_Function
End Function &apos; OpenSQL V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OpenTable(Optional ByVal pvTableName As Variant _
, Optional ByVal pvView As Variant _
, Optional ByVal pvDataMode As Variant _
) As Boolean
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;OpenTable&quot;)
If IsMissing(pvTableName) Then Call _TraceArguments()
If IsMissing(pvView) Then pvView = acViewNormal
If IsMissing(pvDataMode) Then pvDataMode = acEdit
OpenTable = DoCmd._OpenObject(&quot;Table&quot;, pvTableName, pvView, pvDataMode)
Exit_Function:
Utils._ResetCalledSub(&quot;OpenTable&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OpenTable&quot;, Erl)
GoTo Exit_Function
End Function &apos; OpenTable
REM -----------------------------------------------------------------------------------------------------------------------
Public Function OutputTo(ByVal pvObjectType As Variant _
, ByVal Optional pvObjectName As Variant _
, ByVal Optional pvOutputFormat As Variant _
, ByVal Optional pvOutputFile As Variant _
, ByVal Optional pvAutoStart As Variant _
, ByVal Optional pvTemplateFile As Variant _
, ByVal Optional pvEncoding As Variant _
) As Boolean
&apos;Supported: acFormatPDF, acFormatODT, acFormatDOC, acFormatHTML for forms
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;OutputTo&quot;)
OutputTo = False
If Not Utils._CheckArgument(pvObjectType, 1, Utils._AddNumeric(), acSendForm) Then Goto Exit_Function
If IsMissing(pvObjectName) Then pvObjectName = &quot;&quot;
If Not Utils._CheckArgument(pvObjectName, 2, vbString) Then Goto Exit_Function
If IsMissing(pvOutputFormat) Then pvOutputFormat = &quot;&quot;
If Not Utils._CheckArgument(pvOutputFormat, 3, vbString) Then Goto Exit_Function
If pvOutputFormat &lt;&gt; &quot;&quot; Then
If Not Utils._CheckArgument(UCase(pvOutputFormat), 3, vbString, Array( _
UCase(acFormatPDF), UCase(acFormatODT), UCase(acFormatDOC), UCase(acFormatHTML) _
, &quot;PDF&quot;, &quot;ODT&quot;, &quot;DOC&quot;, &quot;HTML&quot;, &quot;&quot; _
)) Then Goto Exit_Function &apos; A 2nd time to allow case unsensitivity
End If
If IsMissing(pvOutputFile) Then pvOutputFile = &quot;&quot;
If Not Utils._CheckArgument(pvOutputFile, 4, vbString) Then Goto Exit_Function
If IsMissing(pvAutoStart) Then pvAutoStart = False
If Not Utils._CheckArgument(pvAutoStart, 5, vbBoolean) Then Goto Exit_Function
If IsMissing(pvTemplateFile) Then pvTemplateFile = &quot;&quot;
If Not Utils._CheckArgument(pvTemplateFile, 6, vbString, &quot;&quot;) Then Goto Exit_Function
If IsMissing(pvEncoding) Then pvEncoding = &quot;&quot;
If Not Utils._CheckArgument(pvEncoding, 7, vbString, &quot;&quot;) Then Goto Exit_Function
Dim vWindow As Variant, sOutputFile As String, ofForm As Object, i As Integer, bFound As Boolean
&apos;Find applicable form
If pvObjectName = &quot;&quot; Then
vWindow = _SelectWindow()
If vWindow.WindowType &lt;&gt; acSendForm Then Goto Error_Action
Set ofForm = Application.Forms(vWindow._Name)
Else
bFound = False
For i = 0 To Application.Forms()._Count - 1
Set ofForm = Application.Forms(i)
If UCase(ofForm._Name) = UCase(pvObjectName) Then
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Error_NotFound
End If
&apos;Determine format and parameters
Dim sOutputFormat As String, sFilter As String, oFilterData As Object, oExport As Object, sSuffix As String
If pvOutputFormat = &quot;&quot; Then
sOutputFormat = _PromptFormat() &apos; Prompt user for format
If sOutputFormat = &quot;&quot; Then Goto Exit_Function
Else
sOutputFormat = UCase(pvOutputFormat)
End If
Select Case sOutputFormat
Case UCase(acFormatPDF), &quot;PDF&quot;
sFilter = acFormatPDF
oFilterData = Array( _
_MakePropertyValue (&quot;ExportFormFields&quot;, False), _
)
sSuffix = &quot;pdf&quot;
Case UCase(acFormatDOC), &quot;DOC&quot;
sFilter = acFormatDOC
oFilterData = Array()
sSuffix = &quot;doc&quot;
Case UCase(acFormatODT), &quot;ODT&quot;
sFilter = acFormatODT
oFilterData = Array()
sSuffix = &quot;odt&quot;
Case UCase(acFormatHTML), &quot;HTML&quot;
sFilter = acFormatHTML
oFilterData = Array()
sSuffix = &quot;html&quot;
End Select
oExport = Array( _
_MakePropertyValue(&quot;Overwrite&quot;, True), _
_MakePropertyValue(&quot;FilterName&quot;, sFilter), _
_MakePropertyValue(&quot;FilterData&quot;, oFilterData), _
)
&apos;Determine output file
If pvOutputFile = &quot;&quot; Then &apos; Prompt file picker to user
sOutputFile = _PromptFilePicker(sSuffix)
If sOutputFile = &quot;&quot; Then Goto Exit_Function
Else
sOutputFile = pvOutputFile
End If
sOutputFile = _ConvertToURL(sOutputFile)
&apos;Create file
On Local Error Goto Error_File
ofForm.Component.storeToURL(sOutputFile, oExport)
On Local Error Goto Error_Function
&apos;Launch application, if requested
If pvAutoStart Then Call _ShellExecute(sOutputFile)
OutputTo = True
Exit_Function:
Utils._ResetCalledSub(&quot;OutputTo&quot;)
Exit Function
Error_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(&quot;Object&quot;, pvObjectName))
Goto Exit_Function
Error_Action:
TraceError(TRACEFATAL, ERRACTION, Utils._CalledSub(), 0)
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OutputTo&quot;, Erl)
GoTo Exit_Function
Error_File:
TraceError(TRACEFATAL, ERRFILENOTCREATED, Utils._CalledSub(), 0, , sOutputFile)
GoTo Exit_Function
End Function &apos; OutputTo V0.9.1
REM -----------------------------------------------------------------------------------------------------------------------
Public Function Quit(Optional ByVal pvSave As Variant) As Variant
&apos; Quit the application
&apos; Modified from Andrew Pitonyak&apos;s Base Macro Programming §5.8.1
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;Quit&quot;)
If IsMissing(pvSave) Then pvSave = acQuitSaveAll
If Not Utils._CheckArgument(pvSave, 1, Utils._AddNumeric(), _
Array(acQuitPrompt, acQuitSaveAll, acQuitSaveNone) _
) Then Goto Exit_Function
Dim vDatabase As Variant, oDoc As Object
vDatabase = CurrentDb
If Not IsNull(vDatabase) Then
Set oDoc = vDatabase.Document
Select Case pvSave
Case acQuitPrompt
If MsgBox(_GetLabel(&quot;QUIT&quot;), _
vbYesNo + vbQuestion, _GetLabel(&quot;QUITSHORT&quot;)) = vbNo Then Exit Function
Case acQuitSaveNone
oDoc.setModified(False)
Case Else
End Select
If HasUnoInterfaces(oDoc, &quot;com.sun.star.util.XCloseable&quot;) Then
If (oDoc.isModified) Then
If (oDoc.hasLocation AND (Not oDoc.isReadOnly)) Then
oDoc.store()
End If
End If
oDoc.close(true)
Else
oDoc.dispose()
End If
End If
Exit_Function:
Utils._ResetCalledSub(&quot;Quit&quot;)
Set vDatabase = Nothing
Set oDoc = Nothing
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;Quit&quot;, Erl)
Set OpenForm = Nothing
GoTo Exit_Function
End Function &apos; Quit
REM -----------------------------------------------------------------------------------------------------------------------
Public Sub RunApp(Optional ByVal pvCommandLine As Variant)
&apos; Convert to URL and execute the Command Line
If _ErrorHandler() Then On Local Error Goto Error_Sub
Utils._SetCalledSub(&quot;RunApp&quot;)
If IsMissing(pvCommandLine) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvCommandLine, 1, vbString) Then Goto Exit_Sub
_ShellExecute(_ConvertToURL(pvCommandLine))
Exit_Sub:
Utils._ResetCalledSub(&quot;RunApp&quot;)
Exit Sub
Error_Sub:
TraceError(TRACEABORT, Err, &quot;RunApp&quot;, Erl)
GoTo Exit_Sub
End Sub &apos; RunApp V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
REM -----------------------------------------------------------------------------------------------------------------------
Public Function RunCommand(Optional pvCommand As Variant) As Boolean
&apos; Execute command via DispatchHelper
If _ErrorHandler() Then On Local Error Goto Exit_Function &apos; Avoid any abort
Utils._SetCalledSub(&quot;RunCommand&quot;)
Dim iVBACommand As Integer, sOOCommand As String, sDispatch As String
If IsMissing(pvCommand) Then Call _TraceArguments()
If Not ( Utils._CheckArgument(pvCommand, 1, Utils._AddNumeric(vbString)) ) Then Goto Exit_Function
If VarType(pvCommand) = vbString Then
sOOCommand = pvCommand
iVBACommand = -1
Else
sOOCommand = &quot;&quot;
iVBACommand = pvCommand
End If
Select Case True
Case iVBACommand = acCmdAboutMicrosoftAccess Or UCase(sOOCommand) = &quot;ABOUT&quot; : sDispatch = &quot;About&quot;
Case iVBACommand = acCmdAboutOpenOffice Or UCase(sOOCommand) = &quot;ABOUT&quot; : sDispatch = &quot;About&quot;
Case iVBACommand = acCmdAboutLibreOffice Or UCase(sOOCommand) = &quot;ABOUT&quot; : sDispatch = &quot;About&quot;
Case UCase(sOOCommand) = &quot;ACTIVEHELP&quot; : sDispatch = &quot;ActiveHelp&quot;
Case UCase(sOOCommand) = &quot;ADDDIRECT&quot; : sDispatch = &quot;AddDirect&quot;
Case UCase(sOOCommand) = &quot;ADDFIELD&quot; : sDispatch = &quot;AddField&quot;
Case UCase(sOOCommand) = &quot;AUTOCONTROLFOCUS&quot; : sDispatch = &quot;AutoControlFocus&quot;
Case UCase(sOOCommand) = &quot;AUTOFILTER&quot; : sDispatch = &quot;AutoFilter&quot;
Case UCase(sOOCommand) = &quot;AUTOPILOTADDRESSDATASOURCE&quot; : sDispatch = &quot;AutoPilotAddressDataSource&quot;
Case UCase(sOOCommand) = &quot;BASICBREAK&quot; : sDispatch = &quot;BasicBreak&quot;
Case iVBACommand = acCmdVisualBasicEditor Or UCase(sOOCommand) = &quot;BASICIDEAPPEAR&quot; : sDispatch = &quot;BasicIDEAppear&quot;
Case UCase(sOOCommand) = &quot;BASICSTOP&quot; : sDispatch = &quot;BasicStop&quot;
Case iVBACommand = acCmdBringToFront Or UCase(sOOCommand) = &quot;BRINGTOFRONT&quot; : sDispatch = &quot;BringToFront&quot;
Case UCase(sOOCommand) = &quot;CHECKBOX&quot; : sDispatch = &quot;CheckBox&quot;
Case UCase(sOOCommand) = &quot;CHOOSEMACRO&quot; : sDispatch = &quot;ChooseMacro&quot;
Case iVBACommand = acCmdClose Or UCase(sOOCommand) = &quot;CLOSEDOC&quot; : sDispatch = &quot;CloseDoc&quot;
Case UCase(sOOCommand) = &quot;CLOSEWIN&quot; : sDispatch = &quot;CloseWin&quot;
Case iVBACommand = acCmdToolbarsCustomize Or UCase(sOOCommand) = &quot;CONFIGUREDIALOG&quot; : sDispatch = &quot;ConfigureDialog&quot;
Case UCase(sOOCommand) = &quot;CONTROLPROPERTIES&quot; : sDispatch = &quot;ControlProperties&quot;
Case iVBACommand = acCmdChangeToCommandButton Or UCase(sOOCommand) = &quot;CONVERTTOBUTTON&quot; : sDispatch = &quot;ConvertToButton&quot;
Case iVBACommand = acCmdChangeToCheckBox Or UCase(sOOCommand) = &quot;CONVERTTOCHECKBOX&quot; : sDispatch = &quot;ConvertToCheckBox&quot;
Case iVBACommand = acCmdChangeToComboBox Or UCase(sOOCommand) = &quot;CONVERTTOCOMBO&quot; : sDispatch = &quot;ConvertToCombo&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOCURRENCY&quot; : sDispatch = &quot;ConvertToCurrency&quot;
Case UCase(sOOCommand) = &quot;CONVERTTODATE&quot; : sDispatch = &quot;ConvertToDate&quot;
Case iVBACommand = acCmdChangeToTextBox Or UCase(sOOCommand) = &quot;CONVERTTOEDIT&quot; : sDispatch = &quot;ConvertToEdit&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOFILECONTROL&quot; : sDispatch = &quot;ConvertToFileControl&quot;
Case iVBACommand = acCmdChangeToLabel Or UCase(sOOCommand) = &quot;CONVERTTOFIXED&quot; : sDispatch = &quot;ConvertToFixed&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOFORMATTED&quot; : sDispatch = &quot;ConvertToFormatted&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOGROUP&quot; : sDispatch = &quot;ConvertToGroup&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOIMAGEBTN&quot; : sDispatch = &quot;ConvertToImageBtn&quot;
Case iVBACommand = acCmdChangeToImage Or UCase(sOOCommand) = &quot;CONVERTTOIMAGECONTROL&quot; : sDispatch = &quot;ConvertToImageControl&quot;
Case iVBACommand = acCmdChangeToListBox Or UCase(sOOCommand) = &quot;CONVERTTOLIST&quot; : sDispatch = &quot;ConvertToList&quot;
Case UCase(sOOCommand) = &quot;CONVERTTONAVIGATIONBAR&quot; : sDispatch = &quot;ConvertToNavigationBar&quot;
Case UCase(sOOCommand) = &quot;CONVERTTONUMERIC&quot; : sDispatch = &quot;ConvertToNumeric&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOPATTERN&quot; : sDispatch = &quot;ConvertToPattern&quot;
Case iVBACommand = acCmdChangeToOptionButton Or UCase(sOOCommand) = &quot;CONVERTTORADIO&quot; : sDispatch = &quot;ConvertToRadio&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOSCROLLBAR&quot; : sDispatch = &quot;ConvertToScrollBar&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOSPINBUTTON&quot; : sDispatch = &quot;ConvertToSpinButton&quot;
Case UCase(sOOCommand) = &quot;CONVERTTOTIME&quot; : sDispatch = &quot;ConvertToTime&quot;
Case iVBACommand = acCmdCopy Or UCase(sOOCommand) = &quot;COPY&quot; : sDispatch = &quot;Copy&quot;
Case UCase(sOOCommand) = &quot;CURRENCYFIELD&quot; : sDispatch = &quot;CurrencyField&quot;
Case iVBACommand = acCmdCut Or UCase(sOOCommand) = &quot;CUT&quot; : sDispatch = &quot;Cut&quot;
Case UCase(sOOCommand) = &quot;DATEFIELD&quot; : sDispatch = &quot;DateField&quot;
Case iVBACommand = acCmdCreateRelationship Or UCase(sOOCommand) = &quot;DBADDRELATION &quot; : sDispatch = &quot;DBAddRelation &quot;
Case UCase(sOOCommand) = &quot;DBCONVERTTOVIEW &quot; : sDispatch = &quot;DBConvertToView &quot;
Case iVBACommand = acCmdDelete Or UCase(sOOCommand) = &quot;DBDELETE &quot; : sDispatch = &quot;DBDelete &quot;
Case UCase(sOOCommand) = &quot;DBDIRECTSQL &quot; : sDispatch = &quot;DBDirectSQL &quot;
Case UCase(sOOCommand) = &quot;DBDSADVANCEDSETTINGS &quot; : sDispatch = &quot;DBDSAdvancedSettings &quot;
Case UCase(sOOCommand) = &quot;DBDSCONNECTIONTYPE &quot; : sDispatch = &quot;DBDSConnectionType &quot;
Case iVBACommand = acCmdDatabaseProperties Or UCase(sOOCommand) = &quot;DBDSPROPERTIES &quot; : sDispatch = &quot;DBDSProperties &quot;
Case UCase(sOOCommand) = &quot;DBEDIT &quot; : sDispatch = &quot;DBEdit &quot;
Case iVBACommand = acCmdSQLView Or UCase(sOOCommand) = &quot;DBEDITSQLVIEW &quot; : sDispatch = &quot;DBEditSqlView &quot;
Case iVBACommand = acCmdRemove Or UCase(sOOCommand) = &quot;DBFORMDELETE &quot; : sDispatch = &quot;DBFormDelete &quot;
Case iVBACommand = acCmdDesignView Or UCase(sOOCommand) = &quot;DBFORMEDIT &quot; : sDispatch = &quot;DBFormEdit &quot;
Case iVBACommand = acCmdFormView Or UCase(sOOCommand) = &quot;DBFORMOPEN &quot; : sDispatch = &quot;DBFormOpen &quot;
Case UCase(sOOCommand) = &quot;DBFORMRENAME &quot; : sDispatch = &quot;DBFormRename &quot;
Case iVBACommand = acCmdNewObjectForm Or UCase(sOOCommand) = &quot;DBNEWFORM &quot; : sDispatch = &quot;DBNewForm &quot;
Case UCase(sOOCommand) = &quot;DBNEWFORMAUTOPILOT &quot; : sDispatch = &quot;DBNewFormAutoPilot &quot;
Case UCase(sOOCommand) = &quot;DBNEWQUERY &quot; : sDispatch = &quot;DBNewQuery &quot;
Case UCase(sOOCommand) = &quot;DBNEWQUERYAUTOPILOT &quot; : sDispatch = &quot;DBNewQueryAutoPilot &quot;
Case UCase(sOOCommand) = &quot;DBNEWQUERYSQL &quot; : sDispatch = &quot;DBNewQuerySql &quot;
Case UCase(sOOCommand) = &quot;DBNEWREPORT &quot; : sDispatch = &quot;DBNewReport &quot;
Case UCase(sOOCommand) = &quot;DBNEWREPORTAUTOPILOT &quot; : sDispatch = &quot;DBNewReportAutoPilot &quot;
Case iVBACommand = acCmdNewObjectTable Or UCase(sOOCommand) = &quot;DBNEWTABLE &quot; : sDispatch = &quot;DBNewTable &quot;
Case UCase(sOOCommand) = &quot;DBNEWTABLEAUTOPILOT &quot; : sDispatch = &quot;DBNewTableAutoPilot &quot;
Case iVBACommand = acCmdNewObjectView Or UCase(sOOCommand) = &quot;DBNEWVIEW &quot; : sDispatch = &quot;DBNewView &quot;
Case UCase(sOOCommand) = &quot;DBNEWVIEWSQL &quot; : sDispatch = &quot;DBNewViewSQL &quot;
Case iVBACommand = acCmdOpenDatabase Or UCase(sOOCommand) = &quot;DBOPEN &quot; : sDispatch = &quot;DBOpen &quot;
Case iVBACommand = acCmdRemove Or UCase(sOOCommand) = &quot;DBQUERYDELETE &quot; : sDispatch = &quot;DBQueryDelete &quot;
Case iVBACommand = acCmdDesignView Or UCase(sOOCommand) = &quot;DBQUERYEDIT &quot; : sDispatch = &quot;DBQueryEdit &quot;
Case iVBACommand = acCmdNewObjectQuery Or UCase(sOOCommand) = &quot;DBQUERYOPEN &quot; : sDispatch = &quot;DBQueryOpen &quot;
Case UCase(sOOCommand) = &quot;DBQUERYRENAME &quot; : sDispatch = &quot;DBQueryRename &quot;
Case UCase(sOOCommand) = &quot;DBREFRESHTABLES &quot; : sDispatch = &quot;DBRefreshTables &quot;
Case iVBACommand = acCmdShowAllRelationships Or UCase(sOOCommand) = &quot;DBRELATIONDESIGN &quot; : sDispatch = &quot;DBRelationDesign &quot;
Case UCase(sOOCommand) = &quot;DBRENAME &quot; : sDispatch = &quot;DBRename &quot;
Case iVBACommand = acCmdRemove Or UCase(sOOCommand) = &quot;DBREPORTDELETE &quot; : sDispatch = &quot;DBReportDelete &quot;
Case iVBACommand = acCmdDesignView Or UCase(sOOCommand) = &quot;DBREPORTEDIT &quot; : sDispatch = &quot;DBReportEdit &quot;
Case iVBACommand = acCmdNewObjectReport Or UCase(sOOCommand) = &quot;DBREPORTOPEN &quot; : sDispatch = &quot;DBReportOpen &quot;
Case UCase(sOOCommand) = &quot;DBREPORTRENAME &quot; : sDispatch = &quot;DBReportRename &quot;
Case iVBACommand = acCmdSelectAll Or UCase(sOOCommand) = &quot;DBSELECTALL &quot; : sDispatch = &quot;DBSelectAll &quot;
Case UCase(sOOCommand) = &quot;DBSHOWDOCINFOPREVIEW &quot; : sDispatch = &quot;DBShowDocInfoPreview &quot;
Case UCase(sOOCommand) = &quot;DBSHOWDOCPREVIEW &quot; : sDispatch = &quot;DBShowDocPreview &quot;
Case iVBACommand = acCmdRemoveTable Or UCase(sOOCommand) = &quot;DBTABLEDELETE &quot; : sDispatch = &quot;DBTableDelete &quot;
Case iVBACommand = acCmdDesignView Or UCase(sOOCommand) = &quot;DBTABLEEDIT &quot; : sDispatch = &quot;DBTableEdit &quot;
Case UCase(sOOCommand) = &quot;DBTABLEFILTER &quot; : sDispatch = &quot;DBTableFilter &quot;
Case iVBACommand = acCmdOpenTable Or UCase(sOOCommand) = &quot;DBTABLEOPEN &quot; : sDispatch = &quot;DBTableOpen &quot;
Case iVBACommand = acCmdRename Or UCase(sOOCommand) = &quot;DBTABLERENAME &quot; : sDispatch = &quot;DBTableRename &quot;
Case UCase(sOOCommand) = &quot;DBUSERADMIN &quot; : sDispatch = &quot;DBUserAdmin &quot;
Case UCase(sOOCommand) = &quot;DBVIEWFORMS &quot; : sDispatch = &quot;DBViewForms &quot;
Case UCase(sOOCommand) = &quot;DBVIEWQUERIES &quot; : sDispatch = &quot;DBViewQueries &quot;
Case UCase(sOOCommand) = &quot;DBVIEWREPORTS &quot; : sDispatch = &quot;DBViewReports &quot;
Case UCase(sOOCommand) = &quot;DBVIEWTABLES &quot; : sDispatch = &quot;DBViewTables &quot;
Case iVBACommand = acCmdDelete Or UCase(sOOCommand) = &quot;DELETE&quot; : sDispatch = &quot;Delete&quot;
Case iVBACommand = acCmdDeleteRecord Or UCase(sOOCommand) = &quot;DELETERECORD&quot; : sDispatch = &quot;DeleteRecord&quot;
Case UCase(sOOCommand) = &quot;DESIGNERDIALOG&quot; : sDispatch = &quot;DesignerDialog&quot;
Case UCase(sOOCommand) = &quot;EDIT&quot; : sDispatch = &quot;Edit&quot;
Case UCase(sOOCommand) = &quot;FIRSTRECORD&quot; : sDispatch = &quot;FirstRecord&quot;
Case UCase(sOOCommand) = &quot;FONTDIALOG&quot; : sDispatch = &quot;FontDialog&quot;
Case UCase(sOOCommand) = &quot;FONTHEIGHT&quot; : sDispatch = &quot;FontHeight&quot;
Case UCase(sOOCommand) = &quot;FORMATTEDFIELD&quot; : sDispatch = &quot;FormattedField&quot;
Case UCase(sOOCommand) = &quot;FORMFILTER&quot; : sDispatch = &quot;FormFilter&quot;
Case iVBACommand = acCmdApplyFilterSort Or UCase(sOOCommand) = &quot;FORMFILTERED&quot; : sDispatch = &quot;FormFiltered&quot;
Case UCase(sOOCommand) = &quot;FORMFILTEREXECUTE&quot; : sDispatch = &quot;FormFilterExecute&quot;
Case UCase(sOOCommand) = &quot;FORMFILTEREXIT&quot; : sDispatch = &quot;FormFilterExit&quot;
Case UCase(sOOCommand) = &quot;FORMFILTERNAVIGATOR&quot; : sDispatch = &quot;FormFilterNavigator&quot;
Case UCase(sOOCommand) = &quot;FORMPROPERTIES&quot; : sDispatch = &quot;FormProperties&quot;
Case UCase(sOOCommand) = &quot;FULLSCREEN&quot; : sDispatch = &quot;FullScreen&quot;
Case UCase(sOOCommand) = &quot;GALLERY&quot; : sDispatch = &quot;Gallery&quot;
Case UCase(sOOCommand) = &quot;GRID&quot; : sDispatch = &quot;Grid&quot;
Case iVBACommand = acCmdSnapToGrid Or UCase(sOOCommand) = &quot;GRIDUSE&quot; : sDispatch = &quot;GridUse&quot;
Case iVBACommand = acCmdViewGrid Or UCase(sOOCommand) = &quot;GRIDVISIBLE&quot; : sDispatch = &quot;GridVisible&quot;
Case UCase(sOOCommand) = &quot;GROUPBOX&quot; : sDispatch = &quot;GroupBox&quot;
Case UCase(sOOCommand) = &quot;HELPINDEX&quot; : sDispatch = &quot;HelpIndex&quot;
Case UCase(sOOCommand) = &quot;HELPSUPPORT&quot; : sDispatch = &quot;HelpSupport&quot;
Case iVBACommand = acCmdInsertHyperlink Or UCase(sOOCommand) = &quot;HYPERLINKDIALOG&quot; : sDispatch = &quot;HyperlinkDialog&quot;
Case UCase(sOOCommand) = &quot;IMAGEBUTTON&quot; : sDispatch = &quot;Imagebutton&quot;
Case UCase(sOOCommand) = &quot;IMAGECONTROL&quot; : sDispatch = &quot;ImageControl&quot;
Case UCase(sOOCommand) = &quot;LABEL&quot; : sDispatch = &quot;Label&quot;
Case iVBACommand = acCmdMaximumRecords Or UCase(sOOCommand) = &quot;LASTRECORD&quot; : sDispatch = &quot;LastRecord&quot;
Case UCase(sOOCommand) = &quot;LISTBOX&quot; : sDispatch = &quot;ListBox&quot;
Case UCase(sOOCommand) = &quot;MACRODIALOG&quot; : sDispatch = &quot;MacroDialog&quot;
Case UCase(sOOCommand) = &quot;MACROORGANIZER&quot; : sDispatch = &quot;MacroOrganizer&quot;
Case UCase(sOOCommand) = &quot;MORECONTROLS&quot; : sDispatch = &quot;MoreControls&quot;
Case UCase(sOOCommand) = &quot;NAVIGATIONBAR&quot; : sDispatch = &quot;NavigationBar&quot;
Case iVBACommand = acCmdObjectBrowser Or UCase(sOOCommand) = &quot;NAVIGATOR&quot; : sDispatch = &quot;Navigator&quot;
Case UCase(sOOCommand) = &quot;NEWDOC&quot; : sDispatch = &quot;NewDoc&quot;
Case UCase(sOOCommand) = &quot;NEWRECORD&quot; : sDispatch = &quot;NewRecord&quot;
Case UCase(sOOCommand) = &quot;NEXTRECORD&quot; : sDispatch = &quot;NextRecord&quot;
Case UCase(sOOCommand) = &quot;NUMERICFIELD&quot; : sDispatch = &quot;NumericField&quot;
Case UCase(sOOCommand) = &quot;OPEN&quot; : sDispatch = &quot;Open&quot;
Case UCase(sOOCommand) = &quot;OPTIONSTREEDIALOG&quot; : sDispatch = &quot;OptionsTreeDialog&quot;
Case UCase(sOOCommand) = &quot;ORGANIZER&quot; : sDispatch = &quot;Organizer&quot;
Case UCase(sOOCommand) = &quot;PARAGRAPHDIALOG&quot; : sDispatch = &quot;ParagraphDialog&quot;
Case iVBACommand = acCmdPaste Or UCase(sOOCommand) = &quot;PASTE&quot; : sDispatch = &quot;Paste&quot;
Case iVBACommand = acCmdPasteSpecial Or UCase(sOOCommand) = &quot;PASTESPECIAL &quot; : sDispatch = &quot;PasteSpecial &quot;
Case UCase(sOOCommand) = &quot;PATTERNFIELD&quot; : sDispatch = &quot;PatternField&quot;
Case UCase(sOOCommand) = &quot;PREVRECORD&quot; : sDispatch = &quot;PrevRecord&quot;
Case iVBACommand = acCmdPrint Or UCase(sOOCommand) = &quot;PRINT&quot; : sDispatch = &quot;Print&quot;
Case UCase(sOOCommand) = &quot;PRINTDEFAULT&quot; : sDispatch = &quot;PrintDefault&quot;
Case UCase(sOOCommand) = &quot;PRINTERSETUP&quot; : sDispatch = &quot;PrinterSetup&quot;
Case iVBACommand = acCmdPrintPreview Or UCase(sOOCommand) = &quot;PRINTPREVIEW&quot; : sDispatch = &quot;PrintPreview&quot;
Case UCase(sOOCommand) = &quot;PUSHBUTTON&quot; : sDispatch = &quot;Pushbutton&quot;
Case UCase(sOOCommand) = &quot;QUIT&quot; : sDispatch = &quot;Quit&quot;
Case UCase(sOOCommand) = &quot;RADIOBUTTON&quot; : sDispatch = &quot;RadioButton&quot;
Case iVBACommand = acCmdSaveRecord Or UCase(sOOCommand) = &quot;RECSAVE&quot; : sDispatch = &quot;RecSave&quot;
Case iVBACommand = acCmdFind Or UCase(sOOCommand) = &quot;RECSEARCH&quot; : sDispatch = &quot;RecSearch&quot;
Case iVBACommand = acCmdUndo Or UCase(sOOCommand) = &quot;RECUNDO&quot; : sDispatch = &quot;RecUndo&quot;
Case iVBACommand = acCmdRefresh Or UCase(sOOCommand) = &quot;REFRESH&quot; : sDispatch = &quot;Refresh&quot;
Case UCase(sOOCommand) = &quot;RELOAD&quot; : sDispatch = &quot;Reload&quot;
Case iVBACommand = acCmdRemoveFilterSort Or UCase(sOOCommand) = &quot;REMOVEFILTERSORT&quot; : sDispatch = &quot;RemoveFilterSort&quot;
Case iVBACommand = acCmdRunMacro Or UCase(sOOCommand) = &quot;RUNMACRO&quot; : sDispatch = &quot;RunMacro&quot;
Case iVBACommand = acCmdSave Or UCase(sOOCommand) = &quot;SAVE&quot; : sDispatch = &quot;Save&quot;
Case UCase(sOOCommand) = &quot;SAVEALL&quot; : sDispatch = &quot;SaveAll&quot;
Case iVBACommand = acCmdSaveAs Or UCase(sOOCommand) = &quot;SAVEAS&quot; : sDispatch = &quot;SaveAs&quot;
Case UCase(sOOCommand) = &quot;SAVEBASICAS&quot; : sDispatch = &quot;SaveBasicAs&quot;
Case UCase(sOOCommand) = &quot;SCRIPTORGANIZER&quot; : sDispatch = &quot;ScriptOrganizer&quot;
Case UCase(sOOCommand) = &quot;SCROLLBAR&quot; : sDispatch = &quot;ScrollBar&quot;
Case iVBACommand = acCmdFind Or UCase(sOOCommand) = &quot;SEARCHDIALOG&quot; : sDispatch = &quot;SearchDialog&quot;
Case iVBACommand = acCmdSelectAll Or UCase(sOOCommand) = &quot;SELECTALL&quot; : sDispatch = &quot;SelectAll&quot;
Case iVBACommand = acCmdSelectAllRecords Or UCase(sOOCommand) = &quot;SELECTALL&quot; : sDispatch = &quot;SelectAll&quot;
Case iVBACommand = acCmdSendToBack Or UCase(sOOCommand) = &quot;SENDTOBACK&quot; : sDispatch = &quot;SendToBack&quot;
Case UCase(sOOCommand) = &quot;SHOWFMEXPLORER&quot; : sDispatch = &quot;ShowFmExplorer&quot;
Case UCase(sOOCommand) = &quot;SIDEBAR&quot; : sDispatch = &quot;Sidebar&quot;
Case iVBACommand = acCmdSortDescending Or UCase(sOOCommand) = &quot;SORTDOWN&quot; : sDispatch = &quot;SortDown&quot;
Case iVBACommand = acCmdSortAscending Or UCase(sOOCommand) = &quot;SORTUP&quot; : sDispatch = &quot;Sortup&quot;
Case UCase(sOOCommand) = &quot;SPINBUTTON&quot; : sDispatch = &quot;SpinButton&quot;
Case UCase(sOOCommand) = &quot;STATUSBARVISIBLE&quot; : sDispatch = &quot;StatusBarVisible&quot;
Case UCase(sOOCommand) = &quot;SWITCHCONTROLDESIGNMODE&quot; : sDispatch = &quot;SwitchControlDesignMode&quot;
Case iVBACommand = acCmdTabOrder Or UCase(sOOCommand) = &quot;TABDIALOG&quot; : sDispatch = &quot;TabDialog&quot;
Case UCase(sOOCommand) = &quot;USEWIZARDS&quot; : sDispatch = &quot;UseWizards&quot;
Case UCase(sOOCommand) = &quot;VERSIONDIALOG&quot; : sDispatch = &quot;VersionDialog&quot;
Case UCase(sOOCommand) = &quot;VIEWDATASOURCEBROWSER&quot; : sDispatch = &quot;ViewDataSourceBrowser&quot;
Case iVBACommand = acCmdDatasheetView Or UCase(sOOCommand) = &quot;VIEWFORMASGRID&quot; : sDispatch = &quot;ViewFormAsGrid&quot;
Case iVBACommand = acCmdZoomSelection Or UCase(sOOCommand) = &quot;ZOOM&quot; : sDispatch = &quot;Zoom&quot;
Case Else
If iVBACommand &gt;= 0 Then Goto Exit_Function
sDispatch = pvCommand
End Select
Dim oDocument As Object, oDispatcher As Object, oArgs() As new com.sun.star.beans.PropertyValue, sTargetFrameName As String
Dim oResult As Variant
oDocument = _SelectWindow().Frame
oDispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
sTargetFrameName = &quot;&quot;
oResult = oDispatcher.executeDispatch(oDocument, &quot;.uno:&quot; &amp; sDispatch, sTargetFrameName, 0, oArgs())
Exit_Function:
RunCommand = True
Utils._ResetCalledSub(&quot;RunCommand&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;RunCommand&quot;, Erl)
GoTo Exit_Function
End Function &apos; RunCommand V0.7.0
REM -----------------------------------------------------------------------------------------------------------------------
Public Function RunSQL(Optional ByVal pvSQL As Variant _
, Optional ByVal pvOption As Variant _
) As Boolean
&apos; Return True if the execution of the SQL statement was successful
&apos; SQL must contain an ACTION query
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;RunSQL&quot;)
RunSQL = False
If IsMissing(pvSQL) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvSQL, 1, vbString) Then Goto Exit_Function
Const cstNull = -1
If IsMissing(pvOption) Then
pvOption = cstNull
Else
If Not Utils._CheckArgument(pvOption, 2, Utils._AddNumeric(), dbSQLPassThrough) Then Goto Exit_Function
End If
Dim oDatabase As Object, oStatement As Object, vResult As Variant
Set oDatabase = _CurrentDb
Set oStatement = oDatabase.Connection.createStatement()
oStatement.EscapeProcessing = Not ( pvOption = dbSQLPassThrough )
On Local Error Goto SQL_Error
vResult = oStatement.executeUpdate(Utils._ReplaceSquareBrackets(pvSQL))
On Local Error Goto Error_Function
RunSQL = True
Exit_Function:
Utils._ResetCalledSub(&quot;RunSQL&quot;)
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;RunSQL&quot;, Erl)
GoTo Exit_Function
SQL_Error:
TraceError(TRACEFATAL, ERRSQLSTATEMENT, Utils._CalledSub(), 0, , pvSQL)
Goto Exit_Function
End Function &apos; RunSQL V0.7.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function SelectObject( Optional pvObjectType As Variant _
, Optional pvObjectName As Variant _
, Optional pvInDatabaseWindow As Variant _
) As Boolean
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;SelectObject&quot;)
If IsMissing(pvObjectType) Then Call _TraceArguments()
If Not Utils._CheckArgument(pvObjectType, 1, Utils._AddNumeric(), _
Array(acDiagram, acForm, acQuery, acTable, acReport, acBasicIDE, acDatabaseWindow) _
) Then Goto Exit_Function
If IsMissing(pvObjectName) Then
Select Case pvObjectType
Case acForm, acQuery, acTable, acReport : Call _TraceArguments()
Case Else
End Select
pvObjectName = &quot;&quot;
Else
If Not Utils._CheckArgument(pvObjectName, 2, vbString) Then Goto Exit_Function
End If
If Not IsMissing(pvInDatabaseWindow) Then
If Not Utils._CheckArgument(pvInDatabaseWindow, 3, vbBoolean, False) Then Goto Exit_Function
End If
Dim oWindow As Object
Set oWindow = _SelectWindow(pvObjectType, pvObjectName)
If IsNull(oWindow.Frame) Then Goto Error_NotFound
oWindow.Frame.ContainerWindow.setFocus()
oWindow.Frame.ContainerWindow.setEnable(True) &apos; Added to try to bypass desynchro issue in Linux
Exit_Function:
Utils._ResetCalledSub(&quot;SelectObject&quot;)
Exit Function
Error_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(&quot;Object&quot;, pvObjectName))
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SelectObject&quot;, Erl)
GoTo Exit_Function
End Function &apos; SelectObject V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function SendObject(ByVal Optional pvObjectType As Variant _
, ByVal Optional pvObjectName As Variant _
, ByVal Optional pvOutputFormat As Variant _
, ByVal Optional pvTo As Variant _
, ByVal Optional pvCc As Variant _
, ByVal Optional pvBcc As Variant _
, ByVal Optional pvSubject As Variant _
, ByVal Optional pvMessageText As Variant _
, ByVal Optional pvEditMessage As Variant _
, ByVal Optional pvTemplateFile As Variant _
) As Boolean
&apos;Supported: acFormatPDF, acFormatODT, acFormatDOC, acFormatHTML for forms
&apos;To be prepared: acFormatCSV and acFormatODS for tables/queries ?
If _ErrorHandler() Then On Local Error Goto Error_Function
Utils._SetCalledSub(&quot;SendObject&quot;)
SendObject = False
If IsMissing(pvObjectType) Then pvObjectType = acSendNoObject
If Not Utils._CheckArgument(pvObjectType, 1, Utils._AddNumeric(), Array(acSendNoObject, acSendForm)) Then Goto Exit_Function
If IsMissing(pvObjectName) Then pvObjectName = &quot;&quot;
If Not Utils._CheckArgument(pvObjectName, 2,vbString) Then Goto Exit_Function
If IsMissing(pvOutputFormat) Then pvOutputFormat = &quot;&quot;
If Not Utils._CheckArgument(pvOutputFormat, 3, vbString) Then Goto Exit_Function
If pvOutputFormat &lt;&gt; &quot;&quot; Then
If Not Utils._CheckArgument(UCase(pvOutputFormat), 3, vbString, Array( _
UCase(acFormatPDF), UCase(acFormatODT), UCase(acFormatDOC), UCase(acFormatHTML) _
, &quot;PDF&quot;, &quot;ODT&quot;, &quot;DOC&quot;, &quot;HTML&quot;, &quot;&quot; _
)) Then Goto Exit_Function &apos; A 2nd time to allow case unsensitivity
End If
If IsMissing(pvTo) Then pvTo = &quot;&quot;
If Not Utils._CheckArgument(pvTo, 4, vbString) Then Goto Exit_Function
If IsMissing(pvCc) Then pvCc = &quot;&quot;
If Not Utils._CheckArgument(pvCc, 5, vbString) Then Goto Exit_Function
If IsMissing(pvBcc) Then pvBcc = &quot;&quot;
If Not Utils._CheckArgument(pvBcc, 6, vbString) Then Goto Exit_Function
If IsMissing(pvSubject) Then pvSubject = &quot;&quot;
If Not Utils._CheckArgument(pvSubject, 7, vbString) Then Goto Exit_Function
If IsMissing(pvMessageText) Then pvMessageText = &quot;&quot;
If Not Utils._CheckArgument(pvMessageText, 8, vbString) Then Goto Exit_Function
If IsMissing(pvEditMessage) Then pvEditMessage = True
If Not Utils._CheckArgument(pvEditMessage, 9, vbBoolean) Then Goto Exit_Function
If IsMissing(pvTemplateFile) Then pvTemplateFile = &quot;&quot;
If Not Utils._CheckArgument(pvTemplateFile,10, vbString, &quot;&quot;) Then Goto Exit_Function
Dim vTo() As Variant, vCc() As Variant, vBcc() As Variant, oWindow As Object
Dim sDirectory As String, sOutputFile As String, sSuffix As String, sOutputFormat As String
Const cstSemiColon = &quot;;&quot;
If pvTo &lt;&gt; &quot;&quot; Then vTo() = Split(pvTo, cstSemiColon) Else vTo() = Array()
If pvCc &lt;&gt; &quot;&quot; Then vCc() = Split(pvCc, cstSemiColon) Else vCc() = Array()
If pvBcc &lt;&gt; &quot;&quot; Then vBcc() = Split(pvBcc, cstSemiColon) Else vBcc() = Array()
Select Case True
Case pvObjectType = acSendNoObject And pvObjectName = &quot;&quot;
SendObject = _SendWithoutAttachment(vTo, vCc, vBcc, pvSubject, pvMessageText)
Case Else
If pvObjectType = acSendNoObject And pvObjectName &lt;&gt; &quot;&quot; Then
If Not FileExists(pvObjectName) Then Goto Error_File
sOutputFile = pvObjectName
Else &apos; OutputFile has to be created
If pvObjectType &lt;&gt; acSendNoObject And pvObjectName = &quot;&quot; Then
oWindow = _SelectWindow()
If oWindow.WindowType &lt;&gt; acSendForm Then Goto Error_Action
pvObjectType = acSendForm
pvObjectName = oWindow._Name
End If
sDirectory = _getTempDirectoryURL()
If Right(sDirectory, 1) &lt;&gt; &quot;/&quot; Then sDirectory = sDirectory &amp; &quot;/&quot;
If pvOutputFormat = &quot;&quot; Then
sOutputFormat = _PromptFormat() &apos; Prompt user for format
If sOutputFormat = &quot;&quot; Then Goto Exit_Function
Else
sOutputFormat = UCase(pvOutputFormat)
End If
Select Case sOutputFormat
Case UCase(acFormatPDF), &quot;PDF&quot; : sSuffix = &quot;pdf&quot;
Case UCase(acFormatDOC), &quot;DOC&quot; : sSuffix = &quot;doc&quot;
Case UCase(acFormatODT), &quot;ODT&quot; : sSuffix = &quot;odt&quot;
Case UCase(acFormatHTML), &quot;HTML&quot; : sSuffix = &quot;html&quot;
End Select
sOutputFile = sDirectory &amp; pvObjectName &amp; &quot;.&quot; &amp; sSuffix
If Not OutputTo(pvObjectType, pvObjectName, sOutputFormat, sOutputFile, False) Then Goto Exit_Function
End If
SendObject = _SendWithAttachment(vTo, vCc, vBcc, pvSubject, Array(sOutputFile), pvMessageText, pvEditMessage)
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;SendObject&quot;)
Exit Function
Error_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(&quot;Object&quot;, pvObjectName))
Goto Exit_Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SendObject&quot;, Erl)
GoTo Exit_Function
Error_Action:
TraceError(TRACEFATAL, ERRACTION, Utils._CalledSub(), 0)
Goto Exit_Function
Error_File:
TraceError(TRACEFATAL, ERRFILEACCESS, Utils._CalledSub(), 0, , pvObjectName)
Goto Exit_Function
End Function &apos; SendObject V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function ShowAllrecords() As Boolean
&apos; Removes any existing filter that exists on the current table, query or form
Utils._SetCalledSub(&quot;ShowAllrecords&quot;)
ShowAllRecords = False
Dim oWindow As Object
Set oWindow = _SelectWindow()
Select Case oWindow.WindowType
Case acForm, acQuery, acTable
RunCommand(acCmdRemoveFilterSort)
ShowAllrecords = True
Case Else &apos; Ignore action
End Select
Exit_Function:
Utils._ResetCalledSub(&quot;ShowAllrecords&quot;)
Exit Function
End Function &apos; ShowAllrecords V0.7.5
REM -----------------------------------------------------------------------------------------------------------------------
REM --- PRIVATE FUNCTIONS ---
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _CheckColumnType(pvFindWhat As Variant, vDataField As Variant) As Boolean
&apos; Return true if both arguments of the same type
&apos; vDataField is a ResultSet column
Dim bFound As Boolean
bFound = False
With com.sun.star.sdbc.DataType
Select Case vDataField.Type
Case .DATE, .TIME, .TIMESTAMP
If VarType(pvFindWhat) = vbDate Then bFound = True
Case .TINYINT, .SMALLINT, .INTEGER, .BIGINT, .FLOAT, .REAL, .DOUBLE, .NUMERIC, .DECIMAL
If Utils._InList(VarType(pvFindWhat), Utils._AddNumeric()) Then bFound = True
Case .CHAR, .VARCHAR, .LONGVARCHAR
If VarType(pvFindWhat) = vbString Then bFound = True
Case Else
End Select
End With
_CheckColumnType = bFound
End Function &apos; _CheckColumnType V0.9.1
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _ConvertToURL(psFile As String) As String
&apos; Convert psFile to URL only if necessary
Dim bURL As Boolean
Select Case True
Case Len(psFile &lt; 7) : bURL = False
Case LCase(Left(psFile, 7)) = &quot;file://&quot; : bURL = True
Case LCase(Left(psFile, 6)) = &quot;ftp://&quot; : bURL = True
Case Else : bURL = False
End Select
If bURL Then _ConvertToURL = psFile Else _ConvertToURL = ConvertToURL(psFile)
End Function
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _getTempDirectoryURL() As String
&apos; Return the tempry directory defined in the OO Options (Paths)
Dim sDirectory As String, oSettings As Object, oPathSettings As Object
If _ErrorHandler() Then On Local Error Goto Error_Function
_getTempDirectoryURL = &quot;&quot;
oPathSettings = createUnoService( &quot;com.sun.star.util.PathSettings&quot; )
sDirectory = oPathSettings.GetPropertyValue( &quot;Temp&quot; )
_getTempDirectoryURL = sDirectory
Exit_Function:
Exit Function
Error_Function:
TraceError(&quot;ERROR&quot;, Err, &quot;_getTempDirectoryURL&quot;, Erl)
_getTempDirectoryURL = &quot;&quot;
Goto Exit_Function
End Function &apos; _getTempDirectoryURL V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _getUpperShortcut(ByVal psShortcut As String, ByVal psLastComponent As String) As String
&apos; Return &quot;Forms!myForm&quot; from &quot;Forms!myForm!datField&quot; and &quot;datField&quot;
If Len(psShortcut) &gt; Len(psLastComponent) Then
_getUpperShortcut = Split(psShortcut, &quot;!&quot; &amp; Utils._Surround(psLastComponent))(0)
Else
_getUpperShortcut = psShortcut
End If
End Function &apos; _getUpperShortcut
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _MakePropertyValue(ByVal Optional psName As String, ByVal Optional pvValue As Variant) As com.sun.star.beans.PropertyValue
&apos;Build PropertyValue(s) array
Dim oPropertyValue As New com.sun.star.beans.PropertyValue
If Not IsMissing(psName) Then oPropertyValue.Name = psName
If Not IsMissing(pvValue) Then oPropertyValue.Value = pvValue
_MakePropertyValue() = oPropertyValue
End Function &apos; _MakePropertyValue
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _OpenObject(ByVal psObjectType As String _
, ByVal pvObjectName As Variant _
, ByVal pvView As Variant _
, ByVal pvDataMode As Variant _
) As Boolean
If _ErrorHandler() Then On Local Error Goto Error_Function
_OpenObject = False
If Not (Utils._CheckArgument(pvObjectName, 1, vbString) _
And Utils._CheckArgument(pvView, 2, Utils._AddNumeric(), Array(acViewNormal, acViewPreview, acViewDesign)) _
And Utils._CheckArgument(pvDataMode, 3, Utils._AddNumeric(), Array(acEdit)) _
) Then Goto Exit_Function
If _TraceStandalone() Then Goto Exit_Function
Dim sObjects() As String, sObjectName As String, oController As Object, oObject As Object
Dim i As Integer, bFound As Boolean, lComponent As Long
Dim oDatabase As Object
Set oDatabase = Application._CurrentDb()
&apos; Check existence of object and find its exact (case-sensitive) name
Select Case psObjectType
Case &quot;Table&quot;
sObjects = oDatabase.Connection.getTables.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.TABLE
Case &quot;Query&quot;
sObjects = oDatabase.Connection.getQueries.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.QUERY
Case &quot;Report&quot;
sObjects = oDatabase.Document.getReportDocuments.ElementNames()
lComponent = com.sun.star.sdb.application.DatabaseObject.REPORT
End Select
bFound = False
For i = 0 To UBound(sObjects)
If UCase(pvObjectName) = UCase(sObjects(i)) Then
sObjectName = sObjects(i)
bFound = True
Exit For
End If
Next i
If Not bFound Then Goto Trace_NotFound
Set oController = oDatabase.Document.CurrentController
Set oObject = oController.loadComponent(lComponent, sObjectName, ( pvView = acViewDesign ))
_OpenObject = True
Exit_Function:
Set oObject = Nothing
Set oController = Nothing
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;OpenObject&quot;, Erl)
GoTo Exit_Function
Trace_Error:
TraceError(TRACEFATAL, ERROPENOBJECT, Utils._CalledSub(), 0, , Array(_GetLabel(psObjectType), pvObjectName))
Goto Exit_Function
Trace_NotFound:
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(_GetLabel(psObjectType), pvObjectName))
Goto Exit_Function
End Function &apos; _OpenObject V0.8.9
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _PromptFormat() As String
&apos; Return user selection in Format dialog
Dim oDialog As Object, oDialogLib As Object, iOKCancel As Integer, oControl As Object
Set oDialogLib = DialogLibraries
If Not oDialogLib.IsLibraryLoaded(&quot;Access2Base&quot;) Then oDialogLib.loadLibrary(&quot;Access2Base&quot;)
Set oDialog = CreateUnoDialog(DialogLibraries.Access2Base.dlgFormat)
oDialog.Title = _GetLabel(&quot;DLGFORMAT_TITLE&quot;)
Set oControl = oDialog.Model.getByName(&quot;lblFormat&quot;)
oControl.Label = _GetLabel(&quot;DLGFORMAT_LBLFORMAT_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGFORMAT_LBLFORMAT_HELP&quot;)
Set oControl = oDialog.Model.getByName(&quot;cboFormat&quot;)
oControl.HelpText = _GetLabel(&quot;DLGFORMAT_LBLFORMAT_HELP&quot;)
Set oControl = oDialog.Model.getByName(&quot;cmdOK&quot;)
oControl.Label = _GetLabel(&quot;DLGFORMAT_CMDOK_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGFORMAT_CMDOK_HELP&quot;)
Set oControl = oDialog.Model.getByName(&quot;cmdCancel&quot;)
oControl.Label = _GetLabel(&quot;DLGFORMAT_CMDCANCEL_LABEL&quot;)
oControl.HelpText = _GetLabel(&quot;DLGFORMAT_CMDCANCEL_HELP&quot;)
iOKCancel = oDialog.Execute()
Select Case iOKCancel
Case 1 &apos; OK
_PromptFormat = oDialog.Model.getByName(&quot;cboFormat&quot;).Text
Case 0 &apos; Cancel
_PromptFormat = &quot;&quot;
Case Else
End Select
oDialog.Dispose()
End Function &apos; _PromptFormat V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Public Function _SelectWindow(Optional ByVal piWindowType As Integer, Optional ByVal psWindow As String) As Object
&apos; No argument: find active window
&apos; 2 arguments: find corresponding window
&apos; Return a _Window object type describing the found window
Dim oEnum As Object, oDesk As Object, oComp As Object, oFrame As Object, i As Integer
Dim bFound As Boolean, bActive As Boolean, bValid As Boolean, sName As String, iType As Integer
Dim sImplementation As String
Dim oWindow As _Window
If _ErrorHandler() Then On Local Error Goto Error_Function
bActive = IsMissing(piWindowType)
Set oWindow.Frame = Nothing
If bActive Then
oWindow.WindowType = -1
oWindow._Name = &quot;&quot;
Else
oWindow.WindowType = piWindowType
Select Case piWindowType
Case acBasicIDE, acDatabaseWindow : oWindow._Name = &quot;&quot;
Case Else : oWindow._Name = psWindow
End Select
End If
Set oDesk = CreateUnoService(&quot;com.sun.star.frame.Desktop&quot;)
Set oEnum = oDesk.Components().createEnumeration
Do While oEnum.hasMoreElements
oComp = oEnum.nextElement
If Utils._hasUNOProperty(oComp, &quot;ImplementationName&quot;) Then sImplementation = oComp.ImplementationName Else sImplementation = &quot;&quot;
Select Case sImplementation
Case &quot;com.sun.star.comp.basic.BasicIDE&quot;
Set oFrame = oComp.CurrentController.Frame
iType = acBasicIDE
sName = &quot;&quot;
Case &quot;com.sun.star.comp.dba.ODatabaseDocument&quot;
Set oFrame = oComp.CurrentController.Frame
iType = acDatabaseWindow
sName = &quot;&quot;
Case &quot;SwXTextDocument&quot;
bValid = True
If HasUnoInterfaces(oComp, &quot;com.sun.star.frame.XModule&quot;) Then
Select Case oComp.Identifier
Case &quot;com.sun.star.sdb.FormDesign&quot; &apos; Form
iType = acForm
Case &quot;com.sun.star.sdb.TextReportDesign&quot; &apos; Report
iType = acReport
Case &quot;com.sun.star.text.TextDocument&quot; &apos; Potential standalone form
If Not IsNull(CurrentDb(oComp.URL)) Then iType = acForm Else bValid = False
Case Else
bValid = False &apos; Ignore other Writer documents
End Select
If bValid Then
For i = 0 To UBound(oComp.Args())
If oComp.Args(i).Name = &quot;DocumentTitle&quot; Or oComp.Args(i).Name = &quot;Title&quot; Then &apos; Title for standalone forms
sName = oComp.Args(i).Value
Exit For
End If
Next i
Set oFrame = oComp.CurrentController.Frame
End If
End If
Case &quot;org.openoffice.comp.dbu.ODatasourceBrowser&quot;
Set oFrame = oComp.Frame
If Not IsEmpty(oComp.Selection) Then &apos; Empty for (F4) DatasourceBrowser !!
For i = 0 To UBound(oComp.Selection())
If oComp.Selection(i).Name = &quot;Command&quot; Then
sName = oComp.Selection(i).Value
ElseIf oComp.Selection(i).Name = &quot;CommandType&quot; Then
Select Case oComp.selection(i).Value
Case com.sun.star.sdb.CommandType.TABLE
iType = acTable
Case com.sun.star.sdb.CommandType.QUERY
iType = acQuery
Case com.sun.star.sdb.CommandType.COMMAND
iType = acQuery &apos; SQL for future use ?
End Select
End If
Next i
&apos; Else ignore
End If
Case &quot;org.openoffice.comp.dbu.OTableDesign&quot;, &quot;org.openoffice.comp.dbu.OQueryDesign&quot; &apos; Table or Query in Edit mode
If Not bActive Then
If UCase(Right(oComp.Title, Len(psWindow))) = UCase(psWindow) Then &apos; No rigorous mean found to identify Name
Set oFrame = oComp.Frame
Select Case sImplementation
Case &quot;org.openoffice.comp.dbu.OTableDesign&quot; : iType = acTable
Case &quot;org.openoffice.comp.dbu.OQueryDesign&quot; : iType = acQuery
End Select
sName = Right(oComp.Title, Len(psWindow))
End If
Else
Set oFrame = Nothing
End If
Case &quot;org.openoffice.comp.dbu.ORelationDesign&quot;
Set oFrame = oComp.Frame
iType = acDiagram
sName = &quot;&quot;
Case Else &apos; Ignore other Calc, ..., whatever documents
Set oFrame = Nothing
End Select
If bActive And Not IsNull(oFrame) Then
If oFrame.ContainerWindow.IsActive() Then
bFound = True
Exit Do
End If
ElseIf iType = piWindowType And UCase(sName) = UCase(psWindow) Then
bFound = True
Exit Do
End If
Loop
If bFound Then
Set oWindow.Frame = oFrame
oWindow._Name = sName
oWindow.WindowType = iType
Else
Set oWindow.Frame = Nothing
End If
Exit_Function:
Set _SelectWindow = oWindow
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;SelectWindow&quot;, Erl)
GoTo Exit_Function
End Function &apos; _SelectWindow V0.9.0
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _SendWithAttachment( _
ByVal pvRecipients() As Variant _
, ByVal pvCcRecipients() As Variant _
, ByVal pvBccRecipients() As Variant _
, ByVal psSubject As String _
, ByVal pvAttachments() As Variant _
, ByVal pvBody As String _
, ByVal pbEditMessage As Boolean _
) As Boolean
&apos; Send message with attachments
If _ErrorHandler() Then On Local Error Goto Error_Function
_SendWithAttachment = False
Const cstWindows = 1
Const cstLinux = 4
Const cstSemiColon = &quot;;&quot;
Dim oServiceMail as Object, oMail As Object, oMessage As Object, vFlag As Variant
Dim vCc() As Variant, i As Integer, iOS As Integer, sProduct As String, bMailProvider As Boolean
&apos;OPENOFFICE &lt;= 3.6 and LIBREOFFICE have XSimple...Mail interface while OPENOFFICE &gt;= 4.0 has XSystemMailProvider interface
sProduct = UCase(Utils._GetProductName())
bMailProvider = ( Left(sProduct, 4) = &quot;OPEN&quot; And Left(_GetProductName(&quot;VERSION&quot;), 3) &gt;= &quot;4.0&quot; )
iOS = GetGuiType()
Select Case iOS
Case cstLinux
oServiceMail = createUnoService(&quot;com.sun.star.system.SimpleCommandMail&quot;)
Case cstWindows
If bMailProvider Then oServiceMail = createUnoService(&quot;com.sun.star.system.SystemMailProvider&quot;) _
Else oServiceMail = createUnoService(&quot;com.sun.star.system.SimpleSystemMail&quot;)
Case Else
Goto Error_Mail
End Select
If bMailProvider Then Set oMail = oServiceMail.queryMailClient() _
Else Set oMail = oServiceMail.querySimpleMailClient()
If IsNull(oMail) Then Goto Error_Mail
&apos;Reattribute Recipients &gt;= 2nd to ccRecipients
If UBound(pvRecipients) &lt;= 0 Then
If UBound(pvCcRecipients) &gt;= 0 Then vCc = pvCcRecipients
Else
ReDim vCc(0 To UBound(pvRecipients) - 1 + UBound(pvCcRecipients) + 1)
For i = 0 To UBound(pvRecipients) - 1
vCc(i) = pvRecipients(i + 1)
Next i
For i = UBound(pvRecipients) To UBound(vCc)
vCc(i) = pvCcRecipients(i - UBound(pvRecipients))
Next i
End If
If bMailProvider Then
Set oMessage = oMail.createMailMessage()
If UBound(pvRecipients) &gt;= 0 Then oMessage.Recipient = pvRecipients(0)
If psSubject &lt;&gt; &quot;&quot; Then oMessage.Subject = psSubject
Select Case iOS &apos; Not published differences between com.sun.star.system.SimpleCommandMail and SimpleSystemMail
Case cstLinux
If UBound(vCc) &gt;= 0 Then oMessage.CcRecipient = Array(Join(vCc, cstSemiColon))
If UBound(pvBccRecipients) &gt;= 0 Then oMessage.BccRecipient = Array(Join(pvBccRecipients, cstSemiColon))
Case cstWindows
If UBound(vCc) &gt;= 0 Then oMessage.CcRecipient = vCc
If UBound(pvBccRecipients) &gt;= 0 Then oMessage.BccRecipient = pvBccRecipients
End Select
If UBound(pvAttachments) &gt;= 0 Then oMessage.Attachement = pvAttachments
If pvBody &lt;&gt; &quot;&quot; Then oMessage.Body = pvBody
If pbEditMessage Then
vFlag = com.sun.star.system.MailClientFlags.DEFAULTS
Else
vFlag = com.sun.star.system.MailClientFlags.NO_USER_INTERFACE
End If
oMail.sendMailMessage(oMessage, vFlag)
Else
Set oMessage = oMail.createSimpleMailMessage() &apos; Body NOT SUPPORTED !
If UBound(pvRecipients) &gt;= 0 Then oMessage.setRecipient(pvRecipients(0))
If psSubject &lt;&gt; &quot;&quot; Then oMessage.setSubject(psSubject)
Select Case iOS
Case cstLinux
If UBound(vCc) &gt;= 0 Then oMessage.setCcRecipient(Array(Join(vCc, cstSemiColon)))
If UBound(pvBccRecipients) &gt;= 0 Then oMessage.setBccRecipient(Array(Join(pvBccRecipients, cstSemiColon)))
Case cstWindows
If UBound(vCc) &gt;= 0 Then oMessage.setCcRecipient(vCc)
If UBound(pvBccRecipients) &gt;= 0 Then oMessage.setBccRecipient(pvBccRecipients)
End Select
If UBound(pvAttachments) &gt;= 0 Then oMessage.setAttachement(pvAttachments)
If pbEditMessage Then
vFlag = com.sun.star.system.SimpleMailClientFlags.DEFAULTS
Else
vFlag = com.sun.star.system.SimpleMailClientFlags.NO_USER_INTERFACE
End If
oMail.sendSimpleMailMessage(oMessage, vFlag)
End If
_SendWithAttachment = True
Exit_Function:
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;_SendWithAttachment&quot;, Erl)
Goto Exit_Function
Error_Mail:
TraceError(TRACEFATAL, ERRSENDMAIL, Utils._CalledSub(), 0)
Goto Exit_Function
End Function &apos; _SendWithAttachment V0.9.5
REM -----------------------------------------------------------------------------------------------------------------------
Private Function _SendWithoutAttachment(ByVal pvTo As Variant _
, ByVal pvCc As Variant _
, ByVal pvBcc As Variant _
, ByVal psSubject As String _
, ByVal psBody As String _
) As Boolean
&apos;Send simple message with mailto: syntax
Dim sMailTo As String, sTo As String, sCc As String, sBcc As String, sSubject As String, sBody As String, oDispatch As Object
Const cstComma = &quot;,&quot;
Const cstSpace = &quot;%20&quot;
Const cstCR = &quot;%0A&quot;
If _ErrorHandler() Then On Local Error Goto Error_Function
If UBound(pvTo) &gt;= 0 Then sTo = Trim(Join(pvTo, cstComma)) Else sTo = &quot;&quot;
If UBound(pvCc) &gt;= 0 Then sCc = Trim(Join(pvCc, cstComma)) Else sCc = &quot;&quot;
If UBound(pvBcc) &gt;= 0 Then sBcc = Trim(Join(pvBcc, cstComma)) Else sBcc = &quot;&quot;
If psSubject &lt;&gt; &quot;&quot; Then sSubject = Join(Split(psSubject, &quot; &quot;), cstSpace) Else sSubject = &quot;&quot;
If psBody &lt;&gt; &quot;&quot; Then
sBody = Join(Split(psBody, Chr(13)), cstCR)
sBody = Join(Split(sBody, &quot; &quot;), cstSpace)
End If
sMailTo = &quot;mailto:&quot; _
&amp; sTo &amp; &quot;?&quot; _
&amp; Iif(sCc = &quot;&quot;, &quot;&quot;, &quot;cc=&quot; &amp; sCc &amp; &quot;&amp;&quot;) _
&amp; Iif(sBcc = &quot;&quot;, &quot;&quot;, &quot;bcc=&quot; &amp; sBcc &amp; &quot;&amp;&quot;) _
&amp; Iif(sSubject = &quot;&quot;, &quot;&quot;, &quot;subject=&quot; &amp; sSubject &amp; &quot;&amp;&quot;) _
&amp; Iif(sBody = &quot;&quot;, &quot;&quot;, &quot;body=&quot; &amp; sBody &amp; &quot;&amp;&quot;)
If Right(sMailTo, 1) = &quot;&amp;&quot; Or Right(sMailTo, 1) = &quot;?&quot; Then sMailTo = Left(sMailTo, Len(sMailTo) - 1)
oDispatch = createUnoService( &quot;com.sun.star.frame.DispatchHelper&quot;)
oDispatch.executeDispatch(StarDesktop, sMailTo, &quot;&quot;, 0, Array())
_SendWithoutAttachment = True
Exit_Function:
Exit Function
Error_Function:
TraceError(TRACEABORT, Err, &quot;_SendWithoutAttachments&quot;, Erl)
_SendWithoutAttachment = False
Goto Exit_Function
End Function &apos; _SendWithoutAttachment V0.8.5
REM -----------------------------------------------------------------------------------------------------------------------
Private Sub _ShellExecute(sCommand As String)
&apos; Execute shell command
Dim oShell As Object
Set oShell = createUnoService(&quot;com.sun.star.system.SystemShellExecute&quot;)
oShell.execute(sCommand, &quot;&quot; , com.sun.star.system.SystemShellExecuteFlags.DEFAULTS)
End Sub &apos; _ShellExecute V0.8.5
</script:module>