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

Преглед садржаја

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

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

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

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

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

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

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

Шифра:

#Иф ВБА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 оквира за поруке, први ће показати време почетка, а други крај.

Напомена: Док покрећете овај код, не можете користити екцел. Чак ни тастер за бег неће успети.

Занимљиви Чланци...