Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.04.2008, 13:42   #11
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию использовать возможности Excel

Цитата:
Сообщение от jungo Посмотреть сообщение
Привет!

Очень большой список где-то 61000 строк. нужно стереть полностью строки где во второй строке (В) есть цифра 2 (их большинство). Использую код:

Код:
Set ws = ActiveSheet
    For i = ws.UsedRange.Rows.Count To 1 Step -1
        If Cells(i, "B") = "2" Then ws.Rows(i).Delete
    Next i
End Sub
Оооочень долго! Как сделать быстрей?
отсортировать, удалить диапазон строк, отсортировать обратно

есс-но должна быть нумерация строк..
slan вне форума
Старый 23.04.2008, 10:24   #12
yourself
Пользователь
 
Аватар для yourself
 
Регистрация: 10.11.2007
Сообщений: 38
По умолчанию

У меня странная проблема. Написан макрос:
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
For i = 4 To 40
If Cells(i, 1) <> "" Then
For j = 2 To 20 Step 2
Cells(i, j) = (Cells(1, 2) \ 10)
Next
Else
For j = 2 To 20 Step 2
Cells(i, j) = ""
Next
End If
Next
End Sub
Когда он запускается, то резвенько выполняет все действия, которые от него требуются, но потом зависает в непонятной конвульсии до тех пор, пока вручную не прервешь выполнение. Я специально заполнял 50строк - он быстро просчитывает все до 40 строки включительно, потом зависает. Причем еще вчера тот же макрос был привязан к открытию книги - все работало на ура. Сегодня - вот такая кракозябра. Посмотрите, может быть, это только у меня глючит?
Вложения
Тип файла: rar Учет коммеров.rar (19.0 Кб, 8 просмотров)
yourself вне форума
Старый 23.04.2008, 11:07   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1) Если необходимо обрабатывать событие Change, происходящее на 1 листе, то нужно перенести код из модуля "Эта книга" в модуль нужного листа, тогда вместо
Код:
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
использовать
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
2) Ваш код выполняется при изменении значения любой ячейки листа. Так и нужно? Если нет, то надо задать диапазон ячеек, при изменении которых нужно запускать процедуру. Например:
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim MyRange As Range
    Set MyRange = Range("A1:D10") ' Это контролируемый диапазон
    If Not Intersect(Target, MyRange) Is Nothing Then
        Application.EnableEvents = False ' Запрет обработки всех событий

        ' Здесь Ваш код будет выполняться
        ' только тогда,
        ' когда событие Worksheet_Change
        ' происходит в диапазоне MyRange

        Application.EnableEvents = True ' Разрешение обработки всех событий
    End If
End Sub
3) Но скорее всего Ваша проблема в том, что при выполнении процедуры обработки события изменения ячейки Вы снова изменяете значения ячеек, контролируемых событием Change, тем самым запуская процедуру еще раз и т.д. Для того, чтобы этого не происходило, необходимо перед выполнением макроса запретить события, а после завершения - разрешить. В коде выше эти строки есть.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 23.04.2008, 11:13   #14
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Смех Как перестать терять время? ТАБЛИЦУ - В СТУДИЮ!

Цитата:
Сообщение от jungo Посмотреть сообщение
что-то в моём массиве тормозит... Но что???
Ну, и где же таблица, отдохнувший вы наш?

Не вся, конечно. Достаточно тормозящего макроса и всех значимых вариантов заполнения столбца B с нужной пропорцией индикаторов удаления (двоек).

ИМХО, вряд ли вариантов наберется больше десятка, а уж (ещё раз ИМХО) размножить их желающие сумеют.
дмидми вне форума
Старый 24.04.2008, 06:34   #15
yourself
Пользователь
 
Аватар для yourself
 
Регистрация: 10.11.2007
Сообщений: 38
По умолчанию

SAS888, очень признателен Вам за помощь
Кстати, у меня-таки тупит интерпретатор VBA. Иногда эта скотина вовсе перестает обрабатывать событие Worksheet_Change. Помогает перезапуск Excel.
yourself вне форума
Старый 27.04.2008, 09:08   #16
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от дмидми Посмотреть сообщение
Ну, и где же таблица, отдохнувший вы наш?

Не вся, конечно. Достаточно тормозящего макроса и всех значимых вариантов заполнения столбца B с нужной пропорцией индикаторов удаления (двоек).

ИМХО, вряд ли вариантов наберется больше десятка, а уж (ещё раз ИМХО) размножить их желающие сумеют.
Я дико извиняюсь, "зад" в том, что у меня все данные на иврите, поэтому не могу прикрепить пример. Изменил на English (как я делаю обычно)только макрос. Заранее спасибо!

Цитата:
дмидми
Отдельный Respect за Жванецкого!

Код:
Sub Jungo()

    AL = [a65536].End(xlUp).Row
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "A"
    Range("B2:B" & AL).FormulaR1C1 _
    = "=IF(OR(RC[4]=""baba"",RC[4]=""zhaba"",RC[4]=""mama"",RC[4]=""kolya"",RC[4]=""miya"",RC[4]=""amok""),1,2)"
    Range("B1").Select
    Columns("B:B").Select
    Columns("B:B").Copy
    Columns("B:B").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

End Sub
Jungo must die!!! (C) Bill Gates.

Последний раз редактировалось jungo; 27.04.2008 в 09:34.
jungo вне форума
Старый 27.04.2008, 10:33   #17
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Сообщение Слушали - постановили

По порядку ведения
Цитата:
Сообщение от jungo Посмотреть сообщение
данные на иврите, поэтому не могу прикрепить пример.
Язык не важен. Пример нужен для того, чтобы разобраться с
  • - распределением по листу тех типов данных, которые различает на листе Excel (текстовые данные, числа, даты и булевы значения);
  • - формулами листа;
  • - форматами;
  • - условиями на значения;
  • - etc. etc.
По повестке дня
Приведённый вами макрос - одноразовый, поскольку не убирает за собой добавленную (временную?) колонку.

Но если вы собираетесь его доработать и использовать часто, то он, несомненно, будет заметно тормозить процесс, поскольку содержит (по доработке) три медленные операции: вставку колонки, заполнение её формулами, удаление колонки. Причём все три операции совершенно не нужны

Постановили
Собственно заявленной вами проблемы (торможение при удалении строк) не наблюдается, поскольку не наблюдается даже попыток удаления строк.

Разное
1. Зашивать в код константы, которые будут разыскиваться на листе, - очень и очень не комильфо. Перечень подобных значений лучше хранить в отдельной зоне на том же листе, а лучше - на другом.
2. Пока разбирался с макросом, самую малость его причесал (как обычно после макрорекордера), ничего не меняя в его работе. Если интересно - модуль в прищепке.
Вложения
Тип файла: rar ModuleJungo.rar (599 байт, 13 просмотров)
дмидми вне форума
Старый 01.05.2008, 12:13   #18
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Огромное спасибо! Упростил по вашему примеру и всё заработало!!!
Jungo must die!!! (C) Bill Gates.
jungo вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для копирования knyz Microsoft Office Excel 28 11.01.2009 06:12
Макрос 2007 ditoch Microsoft Office Excel 6 24.06.2008 11:09
макрос VBA Excel Bor Microsoft Office Excel 5 25.01.2008 12:20
Макрос Мингиян Microsoft Office Access 1 24.01.2008 21:54
Макрос в Word Mictiann Microsoft Office Word 1 12.09.2007 09:35