#vba #class #object #ms-word
#vba #класс #объект #ms-word
Вопрос:
Я настроил свою собственную библиотеку с функциями и вспомогательными элементами для VBA (Word) и хотел создать новый модуль класса. Но я не могу понять, как использовать этот новый класс с другими файлами.
Пример секундомера (Normal.dotm, модуль класса: Global_StopWatch)
Private mlngStart As Long
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Public Sub StartTimer()
mlngStart = GetTickCount
End Sub
Public Function EndTimer() As Long
EndTimer = (GetTickCount - mlngStart)
End Function
Вызов секундомера (Document.dotm, module: Test)
Sub swTest()
Dim gSW As Global_StopWatch
Set gSW = New Global_StopWatch
gSW.StartTimer
Debug.Print "That took " amp; gSW.EndTimer amp; " ms."
End Sub
Может кто-нибудь помочь с этим?
Комментарии:
1. docs.microsoft.com/en-us/previous-versions/office/troubleshoot/…
2. @TimWilliams Спасибо, но учебник не сработал :
Compile Error: User-defined type not defined
. Я пробовал как раннее, так и позднее связывание.3. При описании ошибки полезно указать, в какой строке находится проблема…
4. Я скопировал и вставил полный код из вашей ссылки, чтобы проверить, работает ли он. Я получаю
Compile Error: User-defined type not defined
onDim anEmployee As ClassProvider.clsEmployee
(UseExportedClass_EarlyBinding()
). СUseExportedClass_LateBinding()
помощью я получаюRuntime Error: -2147352573 (800200003)
. Перезапуск Word, похоже, тоже не работает.5. Извините, я думаю, что эта ссылка больше ориентирована на Excel. Смотрите Ответ ниже.
Ответ №1:
Normal.dotm — clsStopWatch (создание экземпляра = PublicNotCreatable)
Option Explicit
Private mlngStart As Long
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Public Sub StartTimer()
mlngStart = GetTickCount
End Sub
Public Function EndTimer() As Long
EndTimer = (GetTickCount - mlngStart)
End Function
Normal.dotm — Module1
Public Function StopWatch() As clsStopWatch
Set StopWatch = New clsStopWatch
End Function
Document1 — Module1
Sub Tester()
Dim sw As normal.clsStopWatch, i As Long
Set sw = normal.stopwatch
sw.StartTimer
For i = 1 To 10000000#
'
Next i
Debug.Print sw.endtimer
End Sub
Комментарии:
1. Большое вам спасибо. Иногда я действительно ненавижу VBA..
2. Я нахожу Word VBA особенно сложным. Excel VBA FTW!