Почему в MS Word первый запуск макроса занимает много времени?
Вопрос:
Почему исполнение в MS Word любого пользовательского макроса на VB, даже не очень объемного, занимает слишком много времени. Причем это происходит только при первом его запуске. В дальнейшем работа любого существующего макроса происходит с завидной скоростью.
Ответ:
Дело в том, что при первом запуске код макроса предварительно компилируется и храниться в так называемом пи-коде. Это и требует некоторого времени. В дальнейшем используется только этот скомпилированный код. Когда кто либо вносит изменения в макрос, код перекомпилируется.
Dim sngSize as Single
Dim strFile as String
const Path="C:\Windows\"
strFile= Dir (Path & "*") 'Получим первый файл
Do while strFile <>"" 'Продолжаем, пока в дирректории есть файлы
sngSize=sngSize + FileLen(Path & strFile) 'Прибавим его размер.
strFile= Dir () 'Получим следующий файл
Loop 'Завершение цикла.
Артем Кривокрисенко
Public Sub ShowFolderInfo(Folder As String)
Dim fso, fld, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(Folder)
s = fld.Name & " занимает " & fld.Size & " байт"
MsgBox s
End Sub
DedMorozzz
Option Explicit
Private Const MAX_PATH = 260
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Declare Function FindFirstFile& Lib "kernel32" Alias
"FindFirstFileA" (ByVal lpFileName$, lpFindFileData As WIN32_FIND_DATA)
Private Declare Function FindNextFile& Lib "kernel32" Alias
"FindNextFileA" (ByVal hFindFile&, lpFindFileData As WIN32_FIND_DATA)
Private Declare Function FindClose& Lib "kernel32" (ByVal hFindFile&)
Private Paths$(), kolPath&, gFsize#
Private Sub CreateFileList(Pat$)
Dim hFind&, dwFindData As WIN32_FIND_DATA
Dim nI As Integer, Ndir As Integer, sDirList$()
Ndir = -1
ReDim Preserve sDirList$(0)
dwFindData.cFileName = Pat + "*.*"
hFind = FindFirstFile((Pat + "*.*"), dwFindData)
Do
If (dwFindData.dwFileAttributes And vbDirectory) = vbDirectory Then
Ndir = (Ndir + 1)
ReDim Preserve sDirList$(Ndir)
sDirList(Ndir) = Mid(dwFindData.cFileName, 1,
(InStr(dwFindData.cFileName, Chr(0)) - 1))
Else
gFsize = (gFsize + dwFindData.nFileSizeLow)
kolPath = (kolPath + 1)
ReDim Preserve Paths$(kolPath)
Paths(kolPath) = Pat + Mid(dwFindData.cFileName, 1,
(InStr(dwFindData.cFileName, Chr(0)) - 1))
End If
Loop While FindNextFile(hFind, dwFindData) > 0
FindClose (hFind)
For nI = 2 To Ndir
kolPath = (kolPath + 1)
ReDim Preserve Paths$(kolPath)
Paths(kolPath) = Pat + sDirList(nI)
CreateFileList (Paths(kolPath) + "\")
Next nI
End Sub
Public Sub GetFilesList(Pat$, kolItems&, dwList$(), FilesSize#)
Dim tm&, dwPath$
dwPath = Pat
If Right(dwPath, 1) <> "\" Then dwPath = dwPath + "\"
'Берем данные из ячеек
STR = EXL.Range("A1").Value & EXL.Range("B1").Value & _
EXL.Range("C1").Value & EXL.Range("D1").Value & _
EXL.Range("E1").Value
'сохраняем Excel документ на диске
On Error Resume Next
EXL.SaveAs App.Path & "\Proba.xls"
'удаляем объект из памяти
Set EXL = Nothing
Единственное ограничение: код будет работать только на машине с установленным Excel'ем.
Еще можно заморочиться, раздобыть описание формата Excel'евских файлов и написать алгоритм чтения этих файлов самому, но стоит ли так морочиться?
Мунгалов АВ, Kirill
Вопрос/Ответ
Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.
У меня есть файл (123.txt) в котором написан VB код, допустим MsgBox "Hello World!!!". Мне нужно чтобы программа выполняла этот код. Т.е. при нажатии на кнопку выполняется код из файла.
Когда я с помощью элемента управления DriveListBox выбираю диск A (3.5), программа у меня выдает ошибку (только когда в нем нету дискеты) о том, что в устройстве отсутствует носитель, она закрывается. Как мне сделать, чтобы вместо ошибки он мне выдал сообщение "Вставьте дискету..." и можно было вернуться назад на исполнение программы?
Win98(русский), набираю текст в базу данных MS Access; пишу програмку на VB6, которая просто выводит текст на экран - все в порядке. Преношу базу и програмку на Win98(английский)- отображает текст некорректно, даже если устанавливаю шрифту charset=204. Догадываюсь что проблема связана с codepage, но как исправит ситуацию? Подскажите плз, хотя бы направление где искать решение этой проблемы. Очень нужно.
Ответы:
Нет ответов.
Можете заполнить эту форму, либо отослать вопрос СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.