Таймер vba excel: VBA Excel. Функция Timer (примеры)

Содержание

VBA Excel. Функция Timer (примеры)

Применение функции Timer в VBA Excel для приостановки выполнения приложений и тестирования кодов на время исполнения. Примеры использования.

Описание функции Timer

Timer – это функция без аргументов, которая возвращает количество секунд, прошедших после полночи. Значение типа Single.

На сайте разработчика сказано, что в Windows функция Timer возвращает дробные части секунды. О порядке дробной части там информации нет. Попробуем выяснить это сами, запустив в редакторе VBA Excel подпрограмму со строкой

MsgBox «Timer = » & Timer


Исходя из результата, отображенного в информационном окне MsgBox, будем считать, что функция Timer возвращает сотые доли секунды. Во время экспериментов с процедурой Vremya из Примера 2 результат вычисления разницы между двумя значениями функции Timer достигал шести знаков после запятой, и один раз – семи.

Примеры использования в VBA Excel

Пример 1
Присвоение значения функции Timer переменной:

Пример 2
Код VBA Excel для приостановки приложений:

Dim Start As Single, Pause As Single

Start = Timer

Pause = 0.5

Do While Timer < Start + Pause

   DoEvents

Loop

  • Start – переменная, в которую записывается первоначальное значение таймера.
  • Pause – время в секундах (до сотых значений), на которое следует приостановить программу.

Функция DoEvents во время выполнения цикла передает управление операционной системе для обработки других событий. По рекомендации разработчиков не следует использовать DoEvents в тех случаях, когда

  • приостановленная процедура может быть запущена повторно из другой части вашего кода;
  • другие приложения могут обратиться к приостановленной процедуре.

Код для приостановки приложений можно использовать как отдельную подпрограмму, вставляя ее имя с указанием интервала в нужные места других процедур:

Sub StopSub(Pause As Single)

Dim Start As Single

Start = Timer

Do While Timer < Start + Pause

   DoEvents

Loop

End Sub

Проверяем работоспособность подпрограммы StopSub:

Sub Vremya()

Dim x As Single

x = Timer

Call StopSub (3)

MsgBox Timer — x

End Sub

Точный или почти точный результат будет только при использовании в качестве аргумента целых секунд, в том числе и в примере кода, предложенного разработчиком.

Такой способ приостановки приложений можно использовать в VBA Excel при создании бегущей строки.

Пример 3
Функцию Timer можно использовать для замера времени выполнения процедуры. Мы ее уже использовали для определения времени выполнения подпрограммы StopSub:

Sub Vremya()

Dim x As Single

x = Timer

Call MySub

MsgBox Timer — x

End Sub

Замените MySub на имя вашей процедуры и запустите код в редакторе VBA Excel. Информационное окно MsgBox покажет время выполнения подпрограммы.

Функция Timer (Visual Basic для приложений)

  • Чтение занимает 2 мин

В этой статье

Возвращает значение типа Single, представляющее количество секунд, прошедших после полночи.Returns a Single representing the number of seconds elapsed since midnight.

СинтаксисSyntax

TimerTimer

ПримечанияRemarks

В Windows функция Timer возвращает дробные части секунды.In Windows, the Timer function returns fractional portions of a second. На компьютерах Macintosh разрешающая способность таймера равна одной секунде.On the Macintosh, timer resolution is one second.

ПримерExample

В этом примере функция Timer используется для приостановки приложения.This example uses the Timer function to pause the application. В этом примере также используется функция DoEvents для передачи в другие процессы во время паузы.The example also uses DoEvents to yield to other processes during the pause.

Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then
    PauseTime = 5    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop
    Finish = Timer    ' Set end time.
    TotalTime = Finish - Start    ' Calculate total time.
    MsgBox "Paused for " & TotalTime & " seconds"
Else
    End
End If

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Таймер в Excel / Песочница / Хабр

Не помню кто из великих сказал… И не помню что. Но в процессе разработки vba-приложений время от времени возникает необходимость использовать таймер. «Из коробки» решения, к сожалению, нет.
Application.OnTime?
Данный метод отложенных вызовов сам по себe решает проблему, но лишь один раз. В том смысле, что таймер срабатывает лишь единожды — указать переодичность вызовов, увы, нельзя.
Application.OnTime + рекурсия?
Очевидно, что в конце необходимой процедуры можно вызывать её же с помощью данного метода, но не менее очевидны и недостатки этого решения — отсутствие достаточного контроля и неудобство вызова:
  • не таймер вызывает действие;
  • чтобы остановить цикл придётся объявлять глобальную переменную;
  • добавление «костыля» в тело отдельно взятой процедуры. Если в следующий раз будет нужно вызвать по таймеру другую — то и в неё придётся переносить данный «костыль».

Evaluate в помощь?
Написать свой класс и вызывать внутри необходимую процедуру с помощью Application.Evaluate. Особо упорные в стремлении создать приемлемый метод вызова таймера доходят до этого решения и упираются в стран/ш/ный баг, отловить который достаточно сложно: udf-функция переданная в переменной будет вызываться каждый раз по два(!) раза.
Потому что гладилус
Способ обойти этот баг пока найден лишь один:
ActiveSheet.Evaluate "0+" & nameOfProcedure

Решение
Для простоты вызова написан не класс, а метод. Достаточно указать интервал, имя вызываемой процедуры и, опционально, кол-во необходимых вызовов:
StartTimer 60, "CalculateTotal()", 30 'вызов CalculateTotal() каждую минуту в течении получаса.
StopTimer 'остановка таймера
модуль
Option Explicit

Private Type Timer
    interval As Long
    procedure As String
    times As Long
    enabled As Boolean
    initialized As Boolean
    ticks As Long
End Type

Private Timer As Timer

Public Sub StartTimer(ByRef interval As Long, _
                      ByRef procedure As String, _
                      Optional ByRef times As Long)
With Timer
    .interval = interval
    .procedure = procedure
    .times = times
    .enabled = True
    .initialized = False
    .ticks = 0
End With

InvokeTimer
End Sub

Public Sub StopTimer()
Timer.enabled = False
End Sub

Private Function InvokeTimer()
If Timer.ticks > Timer.times And Not Timer.times = 0 Then StopTimer
If Not Timer.enabled Then Exit Function

If Timer.initialized Then
    ActiveSheet.Evaluate "0+" & Timer.procedure
Else
    Timer.initialized = True
End If

Timer.ticks = Timer.ticks + 1

Application.OnTime Now + 1 / 86400 * Timer.interval, "InvokeTimer"
End Function

Событие Form. Timer (Access) | Microsoft Docs

  • Чтение занимает 2 мин

В этой статье

Событие Timer возникает через определенные интервалы времени для формы, как указано в свойстве тимеринтервал формы.The Timer event occurs for a form at regular intervals as specified by the form’s TimerInterval property.

СинтаксисSyntax

Expression. Timer (таймер )expression.Timer

выражение: переменная, представляющая объект Form.expression A variable that represents a Form object.

ПримечанияRemarks

Для запуска макроса или процедуры обработки события при возникновении этого события задайте для свойства OnTime значение имени макроса или [процедура обработки события].To run a macro or event procedure when this event occurs, set the

OnTimer property to the name of the macro or to [Event Procedure].

Выполнение макроса или процедуры обработки события, возникающих при возникновении события таймера , позволяет управлять тем, что Microsoft Access делает на каждом интервале таймера.By running a macro or event procedure when a Timer event occurs, you can control what Microsoft Access does at every timer interval. Например, вам может потребоваться запросить базовые записи или перекрасить экран через заданные промежутки времени.For example, you might want to requery underlying records or repaint the screen at specified intervals.

Значение свойства тимеринтервал формы указывает интервал (в миллисекундах) между событиями таймера .The TimerInterval property setting of the form specifies the interval, in milliseconds, between Timer

events. Интервал может находиться в пределах от 0 до 2 147 483 647 миллисекунд.The interval can be between 0 and 2,147,483,647 milliseconds. Установка значения 0 для свойства тимеринтервал предотвращает возникновение события таймера .Setting the TimerInterval property to 0 prevents the Timer event from occurring.

ПримерExample

В следующем примере показано цифровое время, которое можно отобразить в форме.The following example demonstrates a digital clock that you can display on a form. Элемент управления Label отображает текущее время в соответствии с системными часами компьютера.A label control displays the current time according to your computer’s system clock.

Чтобы попробовать пример, добавьте приведенную ниже процедуру обработки события в форму, содержащую метку с именем Clock.To try the example, add the following event procedure to a form that contains a label named

Clock. Присвойте свойству тимеринтервал формы значение 1000 миллисекунд, чтобы обновлять часы каждую секунду.Set the form’s TimerInterval property to 1000 milliseconds to update the clock every second.

Private Sub Form_Timer() 
    Clock.Caption = Time        ' Update time display. 
End Sub

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

API таймеры в VBA — как сделать безопасным

@CoolBlue: и каков механизм сбоя: что именно происходит, чтобы сделать Excel аварии?

Я могу дать вам расширение ответа Сиддарта Раута, но не полное объяснение.

вызовы API не являются VBA: они существуют вне обработчиков ошибок VBA, и когда что-то пойдет не так, они либо ничего не сделают, либо вызовут ресурс в памяти, который не существует, или попытаются прочитать (или написать!) в память, которая находится вне назначенной памяти пространство для Excel.exe

когда это произойдет, операционная система вмешается и выключит ваше приложение. Раньше мы называли это «общей ошибкой защиты», и это все еще полезное описание процесса.

теперь для некоторых деталей.

когда вы вызываете функцию в VBA, вы просто напишите имя-назовем его «CheckMyFile ()» — и это все, что вам нужно знать в VBA. Если нет ничего под названием «CheckMyFile», чтобы позвонить, или это объявленный там, где ваш вызов не может его видеть, компилятор или механизм выполнения вызовет ошибку в виде точки останова или предупреждения перед компиляцией и запуском.

за кулисами есть числовой адрес, связанный со строкой «CheckMyFile»: я немного упрощаю, но мы ссылаемся на этот адрес как Указатель На Функцию — следуйте этому адресу, и мы попадем в структурированный блок памяти, который хранит определения параметров функции, пространство для их сохраненные значения и, за этим, адреса, направляющие эти параметры в функциональные структуры, созданные для выполнения VBA и возвращающие значения в адрес вывода функции.

все может пойти не так, и VBA делает много работы, чтобы гарантировать, что все это складывается изящно, когда они идут не так.

Если вы дадите указатель этой функции на что — то, что не является VBA-внешним приложением или (скажем) вызов таймера API — ваша функция все еще может быть позвонил, он еще может работать, и все будет работать.

но за этим указателем должна быть действительная функция.

Если нет, внешнее приложение вызовет свои собственные обработчики ошибок, и они не будут такими прощающими, как VBA.

Он может просто отбросить вызов и ничего не делать, если Excel и VBA находятся в состоянии «занят» или иным образом недоступны, когда он пытается использовать этот указатель функции: вам может повезти, только один раз. Но это может вызвать гнев операционной системы на Excel.процесс exe.

Если вызов приводит к ошибке, и эта ошибка не обрабатывается вашим кодом, VBA поднимет ошибку вызывающему абоненту — и, поскольку вызывающий абонент не является VBA, у него, вероятно, не будет способа обработки этого: и он вызовет «помощь» из операционной системы.

Если это вызов API, он был написан для разработчиков, которые, как предполагается, поставили обработку ошибок и управление непредвиденными обстоятельствами в вызывающем коде.

эти предположения:

  1. определенно будет действительная функция за этим указателем;
  2. он определенно будет доступен, когда он называется;
  3. …И это не вызовет ошибок у вызывающего.

с вызовом API, caller is операционная система, и ее ответ на обнаружение ошибки будет вас закрыть.

Так что это очень простой план процесса — «почему» вместо того, чтобы объяснять «что».

полное объяснение, без излишних упрощений, для разработчиков C++. Если вы действительно хотите получить подробный ответ, вы должны научиться программировать с помощью указателей; и вы должны свободно владеть концепциями и практикой выделения памяти, исключениями, последствиями плохого указателя и механизмами, используемыми операционной системой для управления запущенными приложениями и обнаружения недопустимой операции.

VBA существует, чтобы защитить вас от этого знания и упрощается задача написания приложений.

Функция TimeSerial (Visual Basic для приложений)

  • Чтение занимает 2 мин

В этой статье

Возвращает элемент Variant (Date), содержащий значения времени для определенного часа, минуты и секунды.Returns a Variant (Date) containing the time for a specific hour, minute, and second.

СинтаксисSyntax

TimeSerial(час, минута, секунда)TimeSerial(hour, minute, second)

Синтаксис функции TimeSerial состоит из следующих именованных аргументов:The TimeSerial function syntax has these named arguments:

ЧастьPart ОписаниеDescription
часhour Обязательный аргумент; Variant (Integer).Required; Variant (Integer). Число от 0 (12:00 A.M.) до 23 (11:00 P.M.) включительно или числовое выражение.Number between 0 (12:00 A.M.) and 23 (11:00 P.M.), inclusive, or a numeric expression.
заminute Обязательный; Variant (Integer).Required; Variant (Integer). Любое числовое выражение.Any numeric expression.
Вторsecond Обязательный; Variant (Integer).Required; Variant (Integer). Любое числовое выражение.Any numeric expression.

ПримечанияRemarks

Чтобы указать время, например 11:59:59, диапазон номеров для каждого аргумента TimeSerial должен быть в обычном диапазоне для единицы измерения; то есть 0–23 для часов и 0–59 для минут и секунд.To specify a time, such as 11:59:59, the range of numbers for each TimeSerial argument should be in the normal range for the unit; that is, 0–23 for hours and 0–59 for minutes and seconds. Тем не менее, можно также указать относительное время для каждого аргумента , используя любое числовое выражение, которое представляет некоторое количество часов, минут или секунд до или после определенного времени.However, you can also specify relative times for each argument by using any numeric expression that represents some number of hours, minutes, or seconds before or after a certain time.

В следующем примере используются выражения вместо абсолютных чисел времени.The following example uses expressions instead of absolute time numbers. Функция TimeSerial Возвращает время в течение 15 минут до (-15) шесть часов до полудня (12 - 6) или 5:45:00 утра.The TimeSerial function returns a time for 15 minutes before (-15) six hours before noon (12 - 6), or 5:45:00 A.M.

TimeSerial(12 - 6, -15, 0)

Когда какой-либо аргумент превышает обычный диапазон этого аргумента, он увеличивается до следующей большей единицы измерения, в зависимости от ситуации.When any argument exceeds the normal range for that argument, it increments to the next larger unit as appropriate. Например, если указано 75 минут, это значение оценивается как один час и 15 минут.For example, if you specify 75 minutes, it is evaluated as one hour and 15 minutes. Если любой один аргумент находится за пределами диапазона от -32 768 до 32 767, то возникает ошибка.If any single argument is outside the range -32,768 to 32,767, an error occurs. Если время, заданное тремя аргументами, приводит к тому, что дата выходит за приемлемый диапазон дат, возникает ошибка.If the time specified by the three arguments causes the date to fall outside the acceptable range of dates, an error occurs.

ПримерExample

В этом примере используется функция TimeSerial для возвращения значений времени для указанных часа, минуты и секунды.This example uses the TimeSerial function to return a time for the specified hour, minute, and second.

Dim MyTime
MyTime = TimeSerial(16, 35, 17)    ' MyTime contains serial 
    ' representation of 4:35:17 PM.

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Таймер в форме пользователя в Excel VBA

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.Таймер

в Excel VBA — qaru. Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.

Таймер VBA: создание секундомера в Excel VBA

В этом посте мы рассмотрим различные способы установки таймера в Excel VBA, а также как создать свой собственный секундомер VBA. Установка таймеров может быть чрезвычайно полезной, если вы хотите запускать код как определенные временные интервалы. С другой стороны, практическим примером может быть секундомер VBA, который может быть полезен для измерения прошедшего времени непосредственно в электронной таблице Excel.

Таймер VBA

Самый простой пример таймера VBA можно сделать с помощью функции таймера VBA:

Dim startTime как Single startTime = Timer ‘Получить текущее время в секундах ‘… Какой-то код здесь … Debug.Print Timer — startTime ‘Результат примерно 1-2 секунды, например 1,90625

Dim startTime as Single

startTime = Timer ‘Получить текущее время в секундах

‘ … Здесь немного кода …

Debug.Print Timer — startTime

‘Результат в течение 1-2 секунд, например 1,90625

Таймер VBA с часами, минутами и секундами

Вышеуказанное очень полезно, если вы хотите измерить прошедшее время в секундах, если вы хотите рассчитать прошедшее время в часах, минутах и ​​секундах, вы можете просто использовать функцию VBA Now с форматированием текста, используя вместо этого формат VBA:

Dim currTime as Date currTime = Сейчас () ‘… Какой-то код здесь … Формат Debug.Print (currTime — Now (), «ЧЧ: ММ: СС») ‘Результат за 10 минут и 1 секунду: 00:10:01

Dim currTime as Date

currTime = Now ()

‘… Здесь код …

Формат Debug.Print (currTime — Now (), «ЧЧ: ММ: СС»)

‘Результат за 10 минут и 1 секунду: 00:10:01

VBA Ожидание

Если вы не хотите измерять прошедшее время и вместо этого устанавливаете интервал или задержку между выполнением кода, вы можете использовать процедуры VBA Sleep или VBA Wait, как показано ниже.Помните, что функция сна VBA не является встроенной функцией VBA и ее необходимо объявить.

‘Сон на 1 секунду Вызов сна (1000) ‘Подождите 1 секунду Вызов Application.Wait (DateAdd («s», 1, Now))

‘Спящий режим на 1 секунду

Спящий режим вызова (1000)

‘ Подождите 1 секунду

Вызов приложения.Wait (DateAdd («s», 1, Now))

Сигналы тревоги и расписание VBA

Другой сценарий VBA Timer — это планирование процедур для запуска в определенное время или через определенный интервал времени, например, будильник.Для этого мы используем процедуру Excel VBA OnTime:

Sub SetAlarm () Тайм-аут затемнения как дата timeout = TimeValue («21:50:00») ‘Установить будильник на 21:50 вечера Application.OnTime timeout, WhatHour Конец подписки Sub WhatHour () Вызов MsgBox («Время истекло» & Format (Сейчас (), «ЧЧ: ММ»)) Конечный переводник

Sub SetAlarm ()

Тайм-аут затемнения как дата

timeout = TimeValue («21:50:00») ‘Установить будильник для 21:50 PM

Application.Таймаут OnTime, «WhatHour»

End Sub

Sub WhatHour ()

Call MsgBox («Время есть» и формат (Now (), «ЧЧ: ММ»))

End Sub

Функцию VBA OnTime можно использовать также для планирования выполнения кода по прошествии определенного времени. Ниже каждые 5 минут будет отображаться текущего файла. .

Дополнительное расписаниеПосле () Тайм-аут затемнения как дата timeout = Now () + TimeValue («00:05:00») Заявка.Тайм-аут OnTime, «SaveBackup» Конец подписки Sub SaveBackup () ActiveWorkbook.Save ‘Сохранить книгу ‘Перенести следующее событие сохранения Тайм-аут затемнения как дата timeout = Now () + TimeValue («00:05:00») Application.OnTime timeout, «SaveBackup» Конечный переводник

Sub ScheduleAfter ()

Dim timeout As Date

timeout = Now () + TimeValue («00:05:00»)

Application.OnTime timeout, «SaveBackup»

End Sub

Sub SaveBackup ()

ActiveWorkbook.Сохранить ‘Сохранить книгу

‘ Перенести следующее Сохранить событие

Таймаут затемнения как дата

тайм-аут = Сейчас () + TimeValue («00:05:00»)

Application.OnTime timeout, «SaveBackup»

End Sub

Секундомер VBA

Используя функцию VBA OnTime, мы также можем создать простой секундомер Excel VBA:

Как вы можете видеть в приведенном выше примере, я создал кнопку, запускающую последовательность Start / Stop. Когда секундомер работает, он увеличивает ячейку TIMESTAMP (именованную ячейку).Для этого вы можете использовать приведенный ниже код. Не забудьте выбрать именованный диапазон, а также подключить кнопку к процедуре StartStop .

Dim timer On As Boolean Тусклое время прошло как одиночное Sub StartStop () Если timerOn Тогда Application.OnTime Now () + TimeValue («00:00:01»), «AddSecond», Schedule: = False timerOn = ложь Еще timeElapsed = 0 timerOn = True Application.OnTime Now () + TimeValue («00:00:01»), «AddSecond» Конец, если Конец подписки Sub AddSecond () Если timerOn Тогда timeElapsed = timeElapsed + 1 Дим s до длины, h до длины, м до длины h = timeElapsed / 3600 s = timeElapsed — ч * 3600 м = с / 60 с = с — м * 60 [TIMESTAMP] = Формат (TimeSerial (ч, мин, с), «ЧЧ: ММ: СС») Заявка.OnTime Now () + TimeValue («00:00:01»), «AddSecond» Конец, если Конечный переводник

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

25

Dim timerOn As Boolean

Dim timeElapsed As Single

Sub StartStop ()

If timerOn Then

Application.OnTime Now () + TimeValue («00:00:01»), «AddSecond», Schedule: = False

timerOn = False

Else

timeElapsed = 0

timerOn = True

Application.OnTime Now () + TimeValue («00:00:01»), «AddSecond»

End If

End Sub

Sub AddSecond ()

If timerOn Then

timeElapsed = timeElapsed + 1

Dim s As Long, h As Long, m As Long

h = timeElapsed / 3600

s = timeElapsed — h * 3600

m = s / 60

s = s — m * 60

[TIMESTAMP] = Format (TimeSerial (h , м, с), «ЧЧ: ММ: СС»)

Приложение.OnTime Now () + TimeValue («00:00:01»), «AddSecond»

End If

End Sub

Что происходит выше? Когда вы нажимаете кнопку, процедура AddSecond запускается в течение секунды, а затем автоматически запускается в следующую секунду после обновления метки времени. Следующее нажатие кнопки выключит расписание. Этот подход может вызвать небольшие задержки в течение более длительного времени (поскольку мы запускаем код до расписания), однако он должен быть достаточно хорошим.

.

excel — Как сделать безопасные таймеры API в VBA?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *