Дата: Понедельник, 03.09.2012, 05:22 |
Сообщение № 1
Группа: Гости
Дамы и господа, здравствуйте!
Вопрос очень простой. Созданная система упр. учета завода получилась большая и сложная. Excel начал жестко тормозить - каждый пересчет идет 2 с лишним секунды, хотя введены только данные по 4 месяцам от года. Надо упрощать архитектуру. Чтобы понять, где именно упрощать необходимо определить наиболее тормозные моменты. Для этого пытаюсь использовать калькуляторы, рекомендуемые Микрософтом: http://msdn.microsoft.com/ru-ru/library/ff700515.aspx (приблизительно середина страницы).
Проблема в том, что я, к сожалению, не владею алхимией макросов и не понимаю, что и где нужно писать. Вторую часть кода, как и рекомендовано в тексте, вставил в "Insert-Module". Запускаю подсчет - выдает 0 секунд. Понимаю, что не прописал саму функцию Function MicroTimer(), но где и как ее прописывать - не знаю. Если тоже в "Insert-Module", то ругается на разрядность и требует перевести в 64.
Подскажите, куда и как прописывать функцию таймера?
Дамы и господа, здравствуйте!
Вопрос очень простой. Созданная система упр. учета завода получилась большая и сложная. Excel начал жестко тормозить - каждый пересчет идет 2 с лишним секунды, хотя введены только данные по 4 месяцам от года. Надо упрощать архитектуру. Чтобы понять, где именно упрощать необходимо определить наиболее тормозные моменты. Для этого пытаюсь использовать калькуляторы, рекомендуемые Микрософтом: http://msdn.microsoft.com/ru-ru/library/ff700515.aspx (приблизительно середина страницы).
Проблема в том, что я, к сожалению, не владею алхимией макросов и не понимаю, что и где нужно писать. Вторую часть кода, как и рекомендовано в тексте, вставил в "Insert-Module". Запускаю подсчет - выдает 0 секунд. Понимаю, что не прописал саму функцию Function MicroTimer(), но где и как ее прописывать - не знаю. Если тоже в "Insert-Module", то ругается на разрядность и требует перевести в 64.
Подскажите, куда и как прописывать функцию таймера? Андрей
#If Win64 Then #If VBA7 Then ' Windows x64, Office 2010 Declare PtrSafe Function getTickCount Lib "kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As LongLong
Declare PtrSafe Function getFrequency Lib "kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As LongLong
#Else ' Windows x64,Office 2003-2007 Private Declare Function getFrequency Lib "Kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long Private Declare Function GetTickCount Lib "Kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long #End If #Else #If VBA7 Then ' Windows x86, Office 2010 Declare PtrSafe Function getTickCount Lib "kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long
Declare PtrSafe Function getFrequency Lib "kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long #Else ' Windows x86, Office 2003-2007 Private Declare Function getFrequency Lib "Kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long Private Declare Function GetTickCount Lib "Kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long #End If #End If
[/vba] Еще рекомендую заглянуть [url=http://msdn.microsoft.com/en-us/library/ee691831(office.14).aspx]сюда[/url].
Попробуйте декларации прописать так: [vba]
Code
#If Win64 Then #If VBA7 Then ' Windows x64, Office 2010 Declare PtrSafe Function getTickCount Lib "kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As LongLong
Declare PtrSafe Function getFrequency Lib "kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As LongLong
#Else ' Windows x64,Office 2003-2007 Private Declare Function getFrequency Lib "Kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long Private Declare Function GetTickCount Lib "Kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long #End If #Else #If VBA7 Then ' Windows x86, Office 2010 Declare PtrSafe Function getTickCount Lib "kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long
Declare PtrSafe Function getFrequency Lib "kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long #Else ' Windows x86, Office 2003-2007 Private Declare Function getFrequency Lib "Kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long Private Declare Function GetTickCount Lib "Kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long #End If #End If
[/vba] Еще рекомендую заглянуть [url=http://msdn.microsoft.com/en-us/library/ee691831(office.14).aspx]сюда[/url].KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Понедельник, 03.09.2012, 09:37