Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
1 / 1 / 0
Регистрация: 16.03.2013
Сообщений: 65

Удаление выбранных значений ячеек

16.03.2013, 20:23. Показов 3888. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите написать код для кнопки "Ввести данные" на листе "Праздники". Суть в том, что пользователь должен ввести несколько дат в специальной таблице на листе "Праздники", затем он нажимает кнопку "Ввести данные" и при ее нажатии должны удаляться соответствующие ячейки из листов "Сентябрь" и "Октябрь". Например, пользователь выбирает на листе "Праздники" 8 марта 2013 и 23 февраля 2013, если такие значения есть либо на листе "Сентябрь", либо на листе "Октябрь", то они удаляются.
Вложения
Тип файла: rar Автоматизированное расписание.rar (86.7 Кб, 14 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2013, 20:23
Ответы с готовыми решениями:

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

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

Удаление строк по сложному условию с посимвольным сравнением значений ячеек
Уважаемые эксперты, прошу помощи в решении следующей задачи: Таблица состоит из 2 столбцов: в столце "А" - оригинал слова на...

34
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
17.03.2013, 22:55
Студворк — интернет-сервис помощи студентам
Извиняюсь
Вложения
Тип файла: rar NewАвтоматизированноеРасписание.rar (57.3 Кб, 4 просмотров)
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 13
17.03.2013, 23:11
я, честно говоря, не разобрался. выбираю на листе "Праздники" даты, а на листах "сентябрь" и "октябрь" они не удаляются.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
18.03.2013, 01:41
Я не игрался с кнопочками, бантичками. Откройте модуль SearchDelete. Установите всередине курсор. Идите пошагово через F8. Поймете. Сейчас сделаю с Range, и удалять будет не значения в ячейках, а ряды. Пока разбирайтесь. Be continued...

Добавлено через 6 минут
Начинается... Поэтому никогда не рискую делать оф. переводы с любого иностранного кроме на родной. Вот здесь
searchTXT1 = "08 Март 2013 г."
searchTXT2 = "23 Лютий 2013 г."
замените на:
searchTXT1 = "08 Март 2013 г."
searchTXT2 = "23 Февраль 2013 г."
Добавлено через 15 минут
Все тоже самое, но только собираем что на удаление в один диапазон (mRng) и удаляем махом (но отдельно по каждому листу).
Добавились переменные. В области обявления замените на:
Option Explicit
Option Base 1
Dim arrForDel(), arrSht(), mArr(), tmpArr()
Dim searchTXT1$, searchTXT2$, mVAR1, mVAR2, mDate, mRng
Dim i&, j&, q&, a&, b&, r&, c&, mstr$, counter
Ну и в самом коде от двойной черты до Next 'i
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'================================
    For i = LBound(arrSht) To UBound(arrSht)
        If fun_SheetExists(arrSht(i)) = True Then
            With Sheets(arrSht(i))
                r = .Cells(2, 2).End(xlDown).Row
                Set mRng = Range(.Cells(r + 1, 2), .Cells(r + 1, 3))
                mArr = Range(.Cells(2, 2), .Cells(r, 3))
                    For j = LBound(mArr, 1) To UBound(mArr, 1)
                        If mArr(j, 1) = CDate(searchTXT1) Or _
                                    mArr(j, 1) = CDate(searchTXT2) Then
                            Set mRng = Union(mRng, _
                                    Range(.Cells(j + 1, 2), .Cells(j + 1, 3)))
                        End If
                    Next j
                 mRng.Delete Shift:=xlUp
            End With
        End If
    Next 'i
Ну и сейчас еще сделаю по различию с наим. листов

Добавлено через 25 минут
А здесь вытягиваем наименование месяца из ячейки, сравниваем с названием листа, собираем в mRng (к примеру), и одним махом все удаляем. Названия листов, которые месяцами, в один массив. Придумайте на этих пустых листах данные, и тестируйте.
Ну а с кнопочками-бантичками-цветочками. Это проверки. Можно организовать сразу после занесения. Или прописать привязку проверки к одному из наших творчеств. Я эти К-Б-Ц не люблю и стараюсь использовать как можно меньше.
Да, и то что ниже, это не последнее слово. Можно натворить еще кучу всего. Как понял с Ваших сообщений, про словари даже не заикаюсь, а то здесь Скрипт мне голову оторвет. "На форуме бывать разные ....." Скрипт! Я с уважением и улыбкой!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
Option Base 1
Dim arrForDel(), arrSht(), mArr(), tmpArr()
Dim searchTXT1$, searchTXT2$, mVAR1, mVAR2, mDate, mRng
Dim i&, j&, q&, a&, b&, r&, c&, mstr$, counter
 
Sub SeachAndDelete()
'------------------------------------------------------------
'так автоматом загоним все наим. листов, где месяцы
    ReDim arrSht(12)
    For i = 1 To 12
        arrSht(i) = MonthName(i)
    Next i
    a = UBound(arrSht)
'================================
Stop
    For i = LBound(arrSht) To UBound(arrSht)
        If fun_SheetExists(arrSht(i)) = True Then
            With Sheets(arrSht(i))
                r = .Cells(2, 2).End(xlDown).Row
                Set mRng = Range(.Cells(r + 1, 2), .Cells(r + 1, 3))
                mArr = Range(.Cells(2, 2), .Cells(r, 3))
                    For j = LBound(mArr, 1) To UBound(mArr, 1)
                        If arrSht(i) <> MonthName(Month(mArr(j, 1))) Then
                            Set mRng = Union(mRng, _
                                    Range(.Cells(j + 1, 2), .Cells(j + 1, 3)))
                        End If
                    Next j
                If Not mRng Is Nothing Then
                    mRng.Delete Shift:=xlUp
                End If
            End With
        End If
    Next 'i
End Sub
Еще. Сами выловите ненужные переменные. Я их туда с запасом...

Добавлено через 1 час 34 минуты
Что-то долго разбираетесь...
...затем он нажимает кнопку "Ввести данные" и при ее нажатии должны удаляться соответствующие ячейки из листов...
для этого нужно прописать для этой кнопки, например, последний вариант:
Visual Basic
1
2
3
4
Private Sub CommandButton1_Click() ' _
          или какой там у Вас номер/имя CommandButton1
   Call SeachAndDelete
End Sub
Но я никак!, просто никак!, не могу понять, данные нужно ввести, или все-таки удалять? Может зря я тут хулиганил?
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 13
18.03.2013, 19:23
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Но я никак!, просто никак!, не могу понять, данные нужно ввести, или все-таки удалять? Может зря я тут хулиганил?
Нет, все верно он должен удалять выбранные значения из других листов. Но теперь он ругается и выдает ошибку "sub or function not defined"
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
18.03.2013, 19:45
После чего ругается? Что выделено желтым? У меня все нормально. Пока посмотрите, а я сейчас собиру в книгу. И определили процедуру к кнопке? Хорошо, сам сделаю.

Добавлено через 15 минут
Я уже догадываюсь, но мне все-таки нужно Ваше уточнение, где. Когда он ругается, происходит остановка выполнения и место остановки выделяется "подсветкой". Вот скопируйте это место и выставте на форум.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
18.03.2013, 20:06
Так. Я привинтил Ваш ел-т управления к процедуре. В самой Вашей книге ничего в процедурах не менял. При нажатии на кнопочку будет вызвана к выполнению процедура SeachAndDelete из МОДУЛЯ SearchDelete. Что б Вы это увидели, я установил точку остановки Stop (см. скриншот). От нее можете идти пошагово (F8), или нажмите Run. Точку останова удалите - это было только для Вас. В моем модуле есть еще функция Private Function fun_SheetExists(sname) As Boolean, ее не удаляйте ни за что, она выполняет по ходу проверку наличия в Вашей книге наличие конкретных листов из масиива arrSht. Пробуйте. Проблемы сообщите. Не переживайте, заставим работать!
Миниатюры
Удаление выбранных значений ячеек  
Вложения
Тип файла: rar V2_АвтоматизированноеРасписание.rar (63.4 Кб, 4 просмотров)
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 13
19.03.2013, 00:00
А у Вас код работает? Теперь он выдает ошибку Run-time error '1004' application-defined or object-defined error.
Как я понял, ошибка в этой строке:
Visual Basic
1
Set mRng = Range(.Cells(r + 1, 2), .Cells(r + 1, 3))
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
19.03.2013, 00:26
Если б у меня не работал - я б Вам не кидал. Вы тестируете в книге V2....?
"Run-time error '1004'... " это означает, как правило, что ошибка генерируется не в VBA, а в приложении, в данном случае, в Excel и только передается в VBA. Завтра, если будет время, прогоню на работе в 2010. Если не задергают.
Только теперь сделайте мне такую вещь. Удалите первый Stop (тот, на скриншоте), и поставьте перед этим выражением Msgbox (все это временно). Вот так:
Visual Basic
1
2
3
r = .Cells(2, 2).End(xlDown).Row
 Msgbox arrSht(i) & "  ----  " & r
Set mRng = Range(.Cells(r + 1, 2), .Cells(r + 1, 3))
Появится окно с именем обрабатываемого листа, серией тире и одной цифрой (она должна соответствовать номеру последней испльзованой строки этого же листа). Перекиньте мне содержание этого информативного окна. Но не тяните, у меня тоже время не резиновое.
!!! Имеется в виду вставить только!!! эту фразу
Msgbox arrSht(i) & " ---- " & r
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 13
19.03.2013, 01:46
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Только теперь сделайте мне такую вещь. Удалите первый Stop (тот, на скриншоте), и поставьте перед этим выражением Msgbox (все это временно). Вот так:
Код Visual Basic
1
2
3
r = .Cells(2, 2).End(xlDown).Row
*Msgbox arrSht(i) & " *---- *" & r
Set mRng = Range(.Cells(r + 1, 2), .Cells(r + 1, 3))
Появится окно с именем обрабатываемого листа, серией тире и одной цифрой (она должна соответствовать номеру последней использованной строки этого же листа). Перекиньте мне содержание этого информативного окна.
Вот: "Январь ---- 65536"
Миниатюры
Удаление выбранных значений ячеек  
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
19.03.2013, 02:02
65536 - У Вас что, весь лист данными заполнен (это если 2003)? Это число - последняя заполненная строка + 1? И кстати, я Вам перекинул в 2003. А ну сохраните в 2010 и опять получите сообщение (перекиньте мне).
Тьфу ты. Вроде догадываюсь в чем дело. Но все-таки сделайте эту проверку в 2010. Все, завтра по любому выйдем из этого. Сейчас мне еще свое надо доделать. Кидайте результаты.
Если он не хочет Down, мы пойдем Up!
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
19.03.2013, 16:21
Все. Теперь должно работать полностью. Что б застраховаться, решил не использовать в Вашем случае инструменты End(xlDown) и End(xlUp). Пусть лучьше проверяет больший диапазон. Кстати, заметил на листе "Сентябрь". При использовании UsedRange, r = 2391, хоть значений нет. Причин может быть несколько, но быстрее всего Вы, думаю, вручную до этой границы изменили форматирование ячеек.
Пробуйте. Удачи.
Вложения
Тип файла: rar V3_End_АвтоматизированноеРасписание.rar (59.9 Кб, 6 просмотров)
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 13
19.03.2013, 19:27
Цитата Сообщение от Igor_Tr Посмотреть сообщение
65536 - У Вас что, весь лист данными заполнен (это если 2003)? Это число - последняя заполненная строка + 1? И кстати, я Вам перекинул в 2003. А ну сохраните в 2010 и опять получите сообщение (перекиньте мне).
В 2010 показывает это: Январь ----1048576 (это из файла V2_АвтоматизированноеРасписание.rar)
В последнем документе, который Вы скинули он поочередно выдает окошко: Январь ----1, Март ----1 и так далее.

Добавлено через 4 минуты
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Все. Теперь должно работать полностью. Что б застраховаться, решил не использовать в Вашем случае инструменты End(xlDown) и End(xlUp). Пусть лучьше проверяет больший диапазон. Кстати, заметил на листе "Сентябрь". При использовании UsedRange, r = 2391, хоть значений нет. Причин может быть несколько, но быстрее всего Вы, думаю, вручную до этой границы изменили форматирование ячеек.
Пробуйте. Удачи.
Этот документ ошибок никаких не выдает, но независимо от того какую я дату выбираю на листе "Праздники", он
удаляет все даты, кроме первой. и не удаляет ту, которая выбирается на листе "Праздники".
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
19.03.2013, 19:56
Как работает код.
1. Вы на листе праздники нажимаете кнопку. 2. Кнопка вызывает процедуру. Которая: а)создает массив с названиями месяцев (считается, что в книге рабочие листы названы по месяцам); б) проверяет наличие листа с очередным названием месяца; в) если в cуществующий лист, например, "Январь", попали данные за ЛЮБОЙ ДРУГОЙ МЕСЯЦ - все эти "неправильные" данные удаляются!, и остаются только данные, соответствующие своей датой (по месяцу) названию листа. Другими словами, если у Вас в лист "Январь" занесены данные по любым другим месяцам - все до единого эти неправильные записи будут УДАЛЕНЫ и останутся тольке те которые в дате имеют Январь. Создайте себе нормальные демо данные и сами увидите. Что касается удаления данных на листе"А" согласно критерия, указанного на листе"Б" - то это совсем другая песня и задача так не ставилась. Это удаление можно спокойно выполнить любой стандартной функцией, например Find, или применить подкоректированную мою процедуру, и такая мелочь Вам самому под силу.
Пожалуйста, не разочаровывайте меня. Речь идет о Курском гос. университете. Не знаю его уровень, но точно знаю, что это не шарашкина комерческая однодневка.
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 13
19.03.2013, 22:55
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Как работает код.
1. Вы на листе праздники нажимаете кнопку. 2. Кнопка вызывает процедуру. Которая: а)создает массив с названиями месяцев (считается, что в книге рабочие листы названы по месяцам); б) проверяет наличие листа с очередным названием месяца; в) если в cуществующий лист, например, "Январь", попали данные за ЛЮБОЙ ДРУГОЙ МЕСЯЦ - все эти "неправильные" данные удаляются!, и остаются только данные, соответствующие своей датой (по месяцу) названию листа. Другими словами, если у Вас в лист "Январь" занесены данные по любым другим месяцам - все до единого эти неправильные записи будут УДАЛЕНЫ и останутся тольке те которые в дате имеют Январь. Создайте себе нормальные демо данные и сами увидите. Что касается удаления данных на листе"А" согласно критерия, указанного на листе"Б" - то это совсем другая песня и задача так не ставилась. Это удаление можно спокойно выполнить любой стандартной функцией, например Find, или применить подкоректированную мою процедуру, и такая мелочь Вам самому под силу.
Пожалуйста, не разочаровывайте меня. Речь идет о Курском гос. университете. Не знаю его уровень, но точно знаю, что это не шарашкина комерческая однодневка.
Спасибо за помощь, разберусь и дальше сам доделаю=)
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
19.03.2013, 23:34
Там ничего сложного. Если можно, пару советов. Что б потом не искать ошибки, лучьше делать перехват при вводе. Как? Зависит от многих факторов, но ничего сложного. Потом, Ваши кнопки. Ну зачем???? Их на листе отыскать еще нужно время потратить. Легче их вынести на панель инструментов. Но я бы их вобще загнал в контекстное меню (под правую кнопку). Тоже ничего сложного. Как это сделать - в любом учебнике по VBA расписано как для детского сада.
Удачи.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2013, 23:34

Очистка значений ячеек макросом постоянно обновляемых ячеек
Здравствуйте, уважаемые) Помогите решить такую задачу. Есть некий журнал, нужно заполнять температуру с четкой исполнительской...

Как подсчитать количество значений, выбранных фильтром?
как подсчитать количество значений выбранных фильтром???

Макрос для внесения данных из combobox на разные листы в таблицы в зависимости от выбранных значений
Доброго дня всем!))) Уважаемые форумчане, мне нужна ваша помощь в решении одной проблемки! Для работы создал файл, для ведения причин...

Макрос для внесения данных из combobox на разные листы в таблицы в зависимости от выбранных значений
Люди добрые, приветствую вас!))) Мне нужна ваша помощь в решении одной проблемки! С макросами столкнулся первый раз и наверно единственный....

Удаление из базы данных выбранных строк?
Собственно сабж! Я собственно ламер ушастый в этих вопросах! :-) Задача такая: В базу данных (Access) помешаются записи:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru