Запускаю макрос удаления строк с пустыми значениями.
[vba]
Код
Dim MyRange As Range, x As Range Set MyRange = Range("S10:S1500") For Each Var In MyRange If Var = 0 Then If x Is Nothing Then Set x = Rows(Var.Row) Else Set x = Union(x, Rows(Var.Row)) Next If Not x Is Nothing Then x.Delete
[/vba]
Проблема - строки удаляются, а чекбоксы остаются.
Чекбокс (не из элементов ActivеX) привязанный к ячейке нужно удалить вместе со строкой и прявязанной ячейкой.
Как это органировать?
Запускаю макрос удаления строк с пустыми значениями.
[vba]
Код
Dim MyRange As Range, x As Range Set MyRange = Range("S10:S1500") For Each Var In MyRange If Var = 0 Then If x Is Nothing Then Set x = Rows(Var.Row) Else Set x = Union(x, Rows(Var.Row)) Next If Not x Is Nothing Then x.Delete
[/vba]
Проблема - строки удаляются, а чекбоксы остаются.
Чекбокс (не из элементов ActivеX) привязанный к ячейке нужно удалить вместе со строкой и прявязанной ячейкой.
Никак не привязывал. Они перемещаются вместе с ячейками. Если я удаляю строки между чекбоксами, то они остаются/перемещаются с теми ячейками на которых они установлены. Но если удаляется строка на которой чекбокс, то тогда он перемещается на соседнюю строчку. Можно ли сделать так, что бы при удалении строки удалялся и чекбокс?
Никак не привязывал. Они перемещаются вместе с ячейками. Если я удаляю строки между чекбоксами, то они остаются/перемещаются с теми ячейками на которых они установлены. Но если удаляется строка на которой чекбокс, то тогда он перемещается на соседнюю строчку. Можно ли сделать так, что бы при удалении строки удалялся и чекбокс?Stork4ever
Поэксперементировал. Без всякой привязки чукбоксы хоть из форм, хоть из ActiveX при удалении строк не удаляются. Видимо надо как-то по другому их удалять. Интересный вопрос. Завтра надо поискать решение
Поэксперементировал. Без всякой привязки чукбоксы хоть из форм, хоть из ActiveX при удалении строк не удаляются. Видимо надо как-то по другому их удалять. Интересный вопрос. Завтра надо поискать решениеalex77755
И Это если только по строкам считать, а в примере на 29 строк уже установлено 143 чекбокса (лист КРОМКА) Если так продолжать книга будет не подъемной, с учетом того сколько листов еще нужно заполнить. И мое мнение, формулами этого не решить, или решить, но не так красиво как макросами.Извиняюсь не в ту тему встрял. Это из другой оперы, тоже про чекбоксы.
Цитата
Офигеть,
И Это если только по строкам считать, а в примере на 29 строк уже установлено 143 чекбокса (лист КРОМКА) Если так продолжать книга будет не подъемной, с учетом того сколько листов еще нужно заполнить. И мое мнение, формулами этого не решить, или решить, но не так красиво как макросами.Извиняюсь не в ту тему встрял. Это из другой оперы, тоже про чекбоксы.gling
ЯД-41001506838083
Сообщение отредактировал gling - Воскресенье, 18.01.2015, 14:09
Офигеть, это что, установлено почти полторы тысячи чекбоксов.
Нет, никто и не говорил, что в каждой ячейке установлен чекбокс. Есть строка заголовок. Под ней на несколько строк другие данные... Чекбокс стоит в одной ячейке с заголовком например А1, и связан с ячейкой J1 в которую выводит значение (ИСТИНА/ЛОЖЬ). При удалении могут удаляться как нулевые строки с данными, так и итоговая строка с заголовком (если раздел весь нулевой).
Офигеть, это что, установлено почти полторы тысячи чекбоксов.
Нет, никто и не говорил, что в каждой ячейке установлен чекбокс. Есть строка заголовок. Под ней на несколько строк другие данные... Чекбокс стоит в одной ячейке с заголовком например А1, и связан с ячейкой J1 в которую выводит значение (ИСТИНА/ЛОЖЬ). При удалении могут удаляться как нулевые строки с данными, так и итоговая строка с заголовком (если раздел весь нулевой).Stork4ever
Stork4ever, могу предложить такие идеи 1) можно применить myShape.ControlFormat.LinkedCell,если чекбокс связан с удаляемой строкой. например, если удаляется строка 1 и чекбокс связан с ячейкой A1(выводит в эту ячейку истина/ложь) 2 )можно применить myShape.TopLeftCell.Row,если чекбоксы строго занимают какое-то положение. например,если левый верхний угол чекбокса находится в пределах строки 1 и строку 1 надо удалить,то можно использовать такой вариант. аналог этого варианта myShape.BottomRightCell 3)можно при создании чекбокса делать в нем какую-нибудь метку:например,можно задать имя какое-нибудь,альтернативный текст и затем удалять на основе этих имен. например,можно в имени указыаать номер строки,куда вставляется чекбокс.
Stork4ever, могу предложить такие идеи 1) можно применить myShape.ControlFormat.LinkedCell,если чекбокс связан с удаляемой строкой. например, если удаляется строка 1 и чекбокс связан с ячейкой A1(выводит в эту ячейку истина/ложь) 2 )можно применить myShape.TopLeftCell.Row,если чекбоксы строго занимают какое-то положение. например,если левый верхний угол чекбокса находится в пределах строки 1 и строку 1 надо удалить,то можно использовать такой вариант. аналог этого варианта myShape.BottomRightCell 3)можно при создании чекбокса делать в нем какую-нибудь метку:например,можно задать имя какое-нибудь,альтернативный текст и затем удалять на основе этих имен. например,можно в имени указыаать номер строки,куда вставляется чекбокс.Karataev
Если нажать кнопку создания отчета, то в созданном отчете видно, что съезжает чекбокс раздела ОТЧЕТ 1 и накладываются в разделе ОТЧЕТ 2 первый чекбокс.
А заодно очень буду благодарен за ответ на вопрос: "Почему меняется цвет заголовков таблицы при переносе?"
Прилагаю образец. Смотрите вложенный файл...
Если нажать кнопку создания отчета, то в созданном отчете видно, что съезжает чекбокс раздела ОТЧЕТ 1 и накладываются в разделе ОТЧЕТ 2 первый чекбокс.
А заодно очень буду благодарен за ответ на вопрос: "Почему меняется цвет заголовков таблицы при переносе?"Stork4ever
Предлагаю добавить в таблице столбец для галок и применить макрос из примера.
Довольно глючный пример. Есть вероятность случайного снятия/установки галочки. Да и логика интуитивно не совсем понятна. Кроме того, задача в подготовленном листе оставить возможность использования чекбоксов, но уже без использования макросов, поскольку на удаленных компьютерах макросы могут быть отключены.
Предлагаю добавить в таблице столбец для галок и применить макрос из примера.
Довольно глючный пример. Есть вероятность случайного снятия/установки галочки. Да и логика интуитивно не совсем понятна. Кроме того, задача в подготовленном листе оставить возможность использования чекбоксов, но уже без использования макросов, поскольку на удаленных компьютерах макросы могут быть отключены.Stork4ever
в посте 10 я написал,как можно сделать.но вы задали вопрос один(первый пост),а выложили файл,который сложнее,чем ваш вопрос из поста #1. я не буду делать задание в файле.
в посте 10 я написал,как можно сделать.но вы задали вопрос один(первый пост),а выложили файл,который сложнее,чем ваш вопрос из поста #1. я не буду делать задание в файле.Karataev
Сообщение отредактировал Karataev - Воскресенье, 18.01.2015, 22:34
Я и не прошу делать это в файле. Файл мне пришлось сделать, что бы показать на примере, где установлены чекбоксы и как это работает. В 10 посте я не совсем понял идею. Уж простите меня... я все-таки не программист. Интуитивно мне кажется, что больше подходит второй вариант. Но это только интуитивно. Как использовать приведенные Вами примеры я не знаю Буду очень признателен за простой пример.
Я и не прошу делать это в файле. Файл мне пришлось сделать, что бы показать на примере, где установлены чекбоксы и как это работает. В 10 посте я не совсем понял идею. Уж простите меня... я все-таки не программист. Интуитивно мне кажется, что больше подходит второй вариант. Но это только интуитивно. Как использовать приведенные Вами примеры я не знаю Буду очень признателен за простой пример.Stork4ever
утилита ,которая относится к вашему посту #1 [vba]
Код
Sub Вариант2() Dim myShape As Shape Dim r As Long, i As Long Application.ScreenUpdating = False For r = 1500 To 10 Step -1 If Cells(r, "S").Value = 0 Then For i = ActiveSheet.Shapes.Count To 1 Step -1 Set myShape = ActiveSheet.Shapes(i) If myShape.FormControlType = xlCheckBox Then If myShape.TopLeftCell.Row = i Then myShape.Delete End If End If Next Rows(r).Delete End If Next Application.ScreenUpdating = True End Sub
[/vba]
утилита ,которая относится к вашему посту #1 [vba]
Код
Sub Вариант2() Dim myShape As Shape Dim r As Long, i As Long Application.ScreenUpdating = False For r = 1500 To 10 Step -1 If Cells(r, "S").Value = 0 Then For i = ActiveSheet.Shapes.Count To 1 Step -1 Set myShape = ActiveSheet.Shapes(i) If myShape.FormControlType = xlCheckBox Then If myShape.TopLeftCell.Row = i Then myShape.Delete End If End If Next Rows(r).Delete End If Next Application.ScreenUpdating = True End Sub
Sub Вариант2() Dim myShape As Shape Dim r As Long, i As Long Application.ScreenUpdating = False For r = 1500 To 10 Step -1 If Cells(r, "S").Value = 0 Then For i = ActiveSheet.Shapes.Count To 1 Step -1 Set myShape = ActiveSheet.Shapes(i) If myShape.Type = msoFormControl Then If myShape.FormControlType = xlCheckBox Then If myShape.TopLeftCell.Row = r Then myShape.Delete End If End If End If Next Rows(r).Delete End If Next Application.ScreenUpdating = True End Sub
[/vba]
исправил ошибку [vba]
Код
Sub Вариант2() Dim myShape As Shape Dim r As Long, i As Long Application.ScreenUpdating = False For r = 1500 To 10 Step -1 If Cells(r, "S").Value = 0 Then For i = ActiveSheet.Shapes.Count To 1 Step -1 Set myShape = ActiveSheet.Shapes(i) If myShape.Type = msoFormControl Then If myShape.FormControlType = xlCheckBox Then If myShape.TopLeftCell.Row = r Then myShape.Delete End If End If End If Next Rows(r).Delete End If Next Application.ScreenUpdating = True End Sub