Екцел ВБА функција спавања за паузирање вашег макро кода

Екцел ВБА функција спавања

ВБА Слееп Функција је функција Виндовс-а присутна у Виндовс ДЛЛ датотекама која се користи за заустављање или паузирање покретања поступка макронаредба одређено време, након што одређену количину програма можемо наставити.

Постоје ситуације у којима требамо паузирати процес покретања макронаредби да бисмо довршили друге скупове задатака. Други скупови задатака могу бити део нашег кодирања или део друге макро процедуре или могу бити улазни подаци за тренутни екцел макро. Како можете паузирати програм када је покренут? Кодекс поступка можемо паузирати неко време које је одредио корисник, а након тога одређену количину можемо наставити са програмом. То можемо да урадимо у ВБА помоћу функције СЛЕЕП.

Шта ради ВБА функција спавања?

СПАВАЈТЕ како само име каже „неко време спавајте“, „одморите се неко време“, „паузирајте неко време“, одморе неко време “итд. Функција спавања омогућава корисницима да паузирају наш макро код на милисекунде. Користећи ово можемо одложити процес макро кода.

Ако мислите да имамо уграђену функцију звану СЛЕЕП, варате се јер у ВБА не постоји таква функција, већ имамо функцију звану Спавање као Виндовс функцију. Уносом посебног скупа кода можемо заправо позвати ову функцију у ВБА. У ствари, то је функција присутна у Виндовс ДЛЛ датотекама, па морамо да објавимо номенклатуру АПИ-ја пре почетка потпрограма у вба.

Испод је ВБА код.

Шифра:

# Ако ВБА7 тада јавно прогласи ПтрСафе Суб Слееп Либ "кернел32" (БиВал двМиллисецондс Ас ЛонгПтр) 'За 64-битне верзије програма Екцел # Елсе Публиц Децларе Суб Слееп Либ "кернел32" (БиВал двМиллисецондс Ас Лонг)' За 32-битне верзије Екцел # Енд Иф 

Копирајте горе наведено и налепите у свој модул пре него што започнете са писањем макро кодова. Требало би да се налепи овако у ваш модул.

Пример

Пре него што вам покажем начин писања кода, рећи ћу вам нешто више о функцији спавања. Одлаже процес у милисекундама. Дакле, 1 секунда је једнака 1000 милисекунди, ако желите да паузирате 10 секунди, требало би да буде 10000 милисекунди.

Овај ВБА Слееп Екцел образац можете преузети овде - ВБА Слееп Екцел предложак

Пример # 1

Једном када АПИ код налепите пре почетка Суб процедуре, креирајте име макронаредбе.

Шифра:

# Суб Слееп_Екампле1 () Крај Суб 

Декларишите две променљиве као низ.

Шифра:

 Пригуши време почетка као низ Пригуши време почетка као низ 

За Почетно време променљива додељује вредност функције ТИМЕ. Белешка: ТИМЕ у екцел функцији враћа тренутно време.

Шифра:

Време почетка = време

Сада ћемо приказати ову поруку у оквиру за поруке ВБА.

Шифра:

СтартТиме = Време МсгБок СтартТиме

Сада ћемо паузирати код на 10 секунди помоћу функције спавања. Као што сам рекао, паузира код у милисекундама, па да бисмо направили паузу од 10 секунди, потребно је да искористимо 10000 милисекунди.

Шифра:

 Под Слееп_Екампле1 () Затамни време почетка као низ Затамни време завршетка као низ Почетак времена = време МсгБок Време спавања за почетак (10000) Крај под 

Сада користите другу променљиву ЕндТиме и доделите тренутно време.

Шифра:

 Суб Слееп_Екампле1 () Затамни време почетка као низ Затамни време завршетка као низ СтартТиме = време МсгБок СтартТиме стање спавања (10000) Крај времена = време МсгБок Крај времена Крај 

Сада две променљиве Почетно време и Време завршетка садржаће време почетка и завршетка макронаредбе. Покрените овај макро, прво ћемо видети време почетка макроа, тј. Тренутно време у вашем систему.

Кликните на ОК, спаваће 10 секунди. Можете видети симбол бафера.

Након 10 секунди започет ће да наставља са радом кода, па ће показивати време завршетка, тј. Након 10 секунди чекања, које је тренутно време.

Сада можете видети макро започет у 10:54:14 и завршен у 10:54:24 тј. Тачно је разлика од 10 секунди. У тих 10 секунди ВБА заустави покретање кода.

Пример # 2 - Функција спавања у петљама

Спавање се најбоље користи са петљама у ВБА. На пример, желим да убацим серијске бројеве од 1 до 10 помоћу петље До вхиле у ВБА.

Након убацивања једног броја, мој код би требало да сачека 3 секунде, тако да када се петља изврши 10 пута, требало би да буде укупно 30 секунди.

Шифра:

 Суб Слееп_Екампле2 () Дим к Ас Интегер к = 1 До Вхиле к <= 10 Целл (к, 1) .Валуе = кк = к + 1 Слееп (3000) '1000 милисекунди је 1 секунда, тако да је 3000 једнако 3 секунде Лооп Енд Суб 

Покрените овај код и морате да сачекате најмање 30 секунди да бисте довршили поступак.

Да бисте пратили тачно време, користите доњи код.

Шифра:

 Суб Слееп_Екампле2 () Дим к Ас Интегер Дим СтартТиме Ас Стринг Дим ЕндТиме Ас Стринг СтартТиме = Тиме МсгБок "Ваш код је започет" & СтартТиме к = 1 До Вхиле к <= 10 Ћелија (к, 1) .Вредност = кк = к + 1 Слееп (3000) '1000 милисекунди је 1 секунда, тако да је 3000 једнако 3 секунде Лооп ЕндТиме = Тиме МсгБок "Ваш код је завршен у" & ЕндТиме Енд Суб 

Овај код ће вам приказати 2 оквира за поруке, први ће показати време почетка, а други крај.

Белешка: Док покрећете овај код, не можете користити екцел, чак ни тастер за излаз неће радити.