Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с макросом EXCEL / 9 сообщений из 9, страница 1 из 1
21.04.2003, 16:58
    #32145306
Alexx1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
Здравствуйте!
Помогите пожалуйста решить с помощью VBA следующую проблему:
в EXCEL у меня есть макрос, который обновляет данные на различных листах, соответственно когда я его запускаю получается не совсем приглядная картина: макрос бегает по листам и обновляет данные, соответственно всё прыгает и мелькает. Подскажите как сделать так чтобы EXCEL просто показал мне конечный РЕЗУЛЬТАТ работы макроса и не показывал сам процесс его работы.
И ещё вопрос: может кто знает как с помощью VBA изменить значёк EXCEL (тот который находится в левом верхнем углу) или удалить его?

Заранее спасибо.
...
Рейтинг: 0 / 0
21.04.2003, 17:12
    #32145321
Sinner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
по поводу первого я правильной таблетки не
знаю, но могу сказать, что делал сам
на момент такой отработки делал Excel
невидимым и соответственно никаких мельканий
а потом опять отображал, проблемы будут,
минус такого подхода когда ошибки повыскакивают...
по поводу второго не знаю
...
Рейтинг: 0 / 0
21.04.2003, 17:23
    #32145334
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
Application.ScreenUpdating = False
...
Рейтинг: 0 / 0
21.04.2003, 20:02
    #32145435
Leshi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
Просто вместо Range("C10").Select и т.д., вставляй Worksheets("имя листа").Cells(номер строки, номер столбца). И делай с ячейкой все что хочешь....
Данную функцию можно применять, как слева от знака равно, так и справа, например...

Worksheets("Лист1").Cells(1,1) = 2
так и
i = Worksheets("Лист1").Cells(1,1)

Здесь никакого моргания не будет, также к Worksheets("Лист1").Cells(1,1) можно применять различные функции, что заметно уменьшит объем текста программы......
...
Рейтинг: 0 / 0
28.04.2003, 18:53
    #32150454
Циничный Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
А если так:

Код: plaintext
1.
2.
3.
4.
    Application.WindowState = xlMinimized

'(бегает макрос)

    Application.WindowState = xlNormal
...
Рейтинг: 0 / 0
29.04.2003, 10:37
    #32150683
Leshi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
Application.WindowState = xlMinimized

'(бегает макрос)

Application.WindowState = xlNormal


А зачем, когда по Worksheets("Лист1").Cells(1,1) = 2 ничего никогда не бегает, а только на выделенном листе красиво цифорки изменяются.........или буковки.
IMHO лишь заграмождение кода.....
...
Рейтинг: 0 / 0
29.04.2003, 17:28
    #32151201
Циничный Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
А зачем, когда по Worksheets("Лист1").Cells(1,1) = 2 ничего никогда не бегает, а только на выделенном листе красиво цифорки изменяются.........или буковки.

Зато макрос править надо. А потом отлаживать. Вопрос времени. Да и от мелькания изменяющихся цифирок/буковок не избавиться. Хотя, конечно, это лучше чем то, что получается после простой записи...

ЗЫ. Кстати, что будет с макросом, если юзер вдруг решит поменять название с "Лист1" на "Первый Листик"??? ;о)))
...
Рейтинг: 0 / 0
29.04.2003, 17:40
    #32151212
Циничный Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
Да, вот еще одна причина, по которой стоит использовать конструкцию

Код: plaintext
1.
2.
Application.WindowState = xlMinimized 
'(бегает макрос) 
Application.WindowState = xlNormal 



Скорость выполнения макроса будет маленько повыше. Этак раза в полтора. Только за счет того, что не надо всякую х..ню прорисовывать. Запустите такой скриптик, посмотрите сами:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Macro1()
a =  1 
b =  100000 
Application.WindowState = xlMinimized ' comment when necessary
    Do While a < b
        Worksheets("Sheet1").Cells(1, 1) = a / 100
          Worksheets("Sheet1").Cells(1, 2) = a
        a = a + 1
    Loop
Application.WindowState = xlNormal ' comment when necessary
End Sub


Имхо, есть разница - ждать минуту или полторы...
...
Рейтинг: 0 / 0
29.04.2003, 19:03
    #32151310
Leshi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с макросом EXCEL
Если пользователь изменит наименнование листа, тогда вообще ничего не будет работать хоть с
Application.WindowState = xlMinimized

'(бегает макрос)

Application.WindowState = xlNormal

хоть без этого дела.
Если только динамически имя его не узнаешь....Что же касается, быстроты, то да, возможно, хотя когда обрабатываешь 30 000 записей, то быстрота все равно снижается.
Хотя вот странно, если несколько раз макрос запустить, то время будет снижаться, а после перезагрузки опять все встанет на свои места. Интересно, почему, вроде память не используется?
Правка кода: мои письмена предназначены прежде всего тем, кто будет писать, чтобы не делали наших ошибок.
А мелькание становиться другим, они просто изменяются, а не выделяются курсором-изменяются, так что так такового мелькания нет.
А если пользователь захочет узнать какие сейчас текущие значения, или например, какую строку сейчас обрабатывает макрос. В моем варианте все показывается, притом самым наилучшим образом, а в вашем даже нельзя зайти в EXCEL. К тому, при работе с большим количеством строк и сложности алгоритма EXCEL любит висеть, и не известно, что мы делаем висим, или все же работаем.
Скажете, что можно и по CTRL+ALT+DEL и смотри запущенные приложения, только вот иногда эта штука хорошо врет.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с макросом EXCEL / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]