Вызов функций Excel VBA из MS Access VBA
Если вы добавите ссылку в Excel (Tools
→ References
→ Microsoft Excel x.xx Object Library
), то вы можете использовать WorksheetFunction
для вызова большинства функций листа Excel, включая MAX
(что может также использоваться на массивах).
Примеры:
MsgBox WorksheetFunction.Max(42, 1999, 888)
или
Dim arr(1 To 3) As Long
arr(1) = 42
arr(2) = 1999
arr(3) = 888
MsgBox WorksheetFunction.Max(arr)
Первый вызов занимает секунду, чтобы ответить (фактически для меня 1,1 с), но последующие вызовы гораздо более разумны (<0,002 с для меня). </p>
Ссылаясь на Excel как объект
Если в вашей процедуре используется множество функций Excel, вы можете улучшить производительность, используя объект Application
для прямой ссылки на Excel.
Например, эта процедура повторяет набор записей, многократно используя MAX
в Excel для байтового массива, чтобы определить «самый высокий» ASCII-символ каждой записи.
Option Compare Text
Option Explicit
'requires reference to "Microsoft Excel x.xx Object Library"
Public excel As New excel.Application
Sub demo_ListMaxChars()
'list the character with the highest ASCII code for each of the first 100 records
Dim rs As Recordset, mx
Set rs = CurrentDb.OpenRecordset("select myField from tblMyTable")
With rs
.MoveFirst
Do
mx = maxChar(!myField)
Debug.Print !myField, mx & "(" & ChrW(mx) & ")" '(Hit CTRL+G to view)
.MoveNext
Loop Until .EOF
.Close
End With
Set rs = Nothing 'always clean up your objects when finished with them!
Set excel = Nothing
End Sub
Function maxChar(st As String)
Dim b() As Byte 'declare Byte Array
ReDim b(1 To Len(st)) 'resize Byte Array
b = StrConv(st, vbFromUnicode) 'convert String to Bytes
maxChar = excel.WorksheetFunction.Max(b) 'find maximum Byte (with Excel function)
End Function