Вставка или удаление строк при изменении ячейки и автоматическая перенумератция

Автор Poltava, 01.02.2011, 18:09

« назад - далее »

Poltava

Пытался разобраться сам но так как в программировании не силен то чтото конечно получилось но вот есть моменты с которыми не смог справиться
1) хотелось бы при введении в одной из ячеек которая находиться в диапазоне AQ8:AQ80 скажем Буквы Н строчкой выше или ниже это не важно вставлялась новая строка и потом содержимое строки 7 вмесе с содержащимися там формулами копировалось во вновь созданную все на что меня хватило это

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect([AQ8:AQ80], Target) Is Nothing Then Exit Sub
    qq = Target.Value
    r = Target.Row
    c = Target.Column
    If qq = "Н" Then
        MsgBox r & " : " & c
        MsgBox qq
        Rows(r).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Rows("7:7").Select
        Selection.Copy Destination:=Rows(r)
        Rows(r).Select
    End If

Но оно не работает так как нужно Хотя строка и вставляется но данные не копируются и вылетает ошибка которая я так понял связана с тем что после вставки лист опять обновляется и процедура начинается заново и тут дето ошибка наколько я понял при получении значения и сравнении его с "H" если его убрать то получаеться зацикливание так как при вставке происходит обновление а при обновлении вставка. Так ли я все понял и насколько правильно задал вопрос незнаю ниже прикладываю файл
2) Это автоматическая пееренумератция в слолбце А впринципе перенумеровать можно и формулой типа если ячейка выше пуста то тогда 1 если нет то +1 к значению но я использую скрытые строки и тут возникает проблема ведь они при такой формуле будут учитываться поэтому и возник вопрос как определить что строка ну или ячейка скрыты и если скрыты то пропустить их при нумерации как вариант вижу в отдельный столбец записывать скажем 0 если скрыта и 1 если не скрыта а потом через если пропускать эти строки хотя может у когото есть более простой вариант решения проблемы.
Заранее спасибо
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

nilem

Может, как-то так?
для AQ8:AQ80:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect([AQ8:AQ80], Target) Is Nothing Then Exit Sub

If Target = "Н" Then
    Application.EnableEvents = False
    Rows("7:7").Copy
    Rows(Target.Row).Insert Shift:=xlDown
    Application.CutCopyMode = False
    Application.EnableEvents = True
End If
End Sub

а для нумерации такая функция:
Function hid(rng As Range) As Long
If rng.EntireRow.Hidden Then
    hid = rng.Value
Else
    hid = rng.Value + 1
End If
End Function

В файле лишнее поудалял.

Poltava

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Poltava

       Есче раз спасибо теперь добавляет как нужно даже доделал чтоб после добавления удалялась буква Н дописал удаление по D
       А вот со счетчиком проблема не работает точнее работает но как то криво если формирую новый лист и на нем скрываю ячейки то счетчик везде проставляет единицы и более менее адекватная нумерация появляется только после того как ты щелкаеш по ячейке тогда вместо единиц появляются номера до следующей пустой ячейки как  только встречаем пустую ячейку обновление заканчивается
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Poltava

Как вариант можно сделать чтоб возвращалось правда или лож на свойство ячейки скрыта и в зависимости от этого написать обычную формулу в экселе но вот как это сделать ????
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

_Boroda_

Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Poltava

не совсем ведь  если в строке пустота то ее не нужно нумеровать это раз и к томуже хотелось бы макросом

Function hid(rng As Range) As Long
If rng.EntireRow.Hidden Then
    hid = rng.Value
Else
    hid = rng.Value + 1
End If
End Function

этот пример работает не совсем коректно так как если скрываеться пустая строка то следующая за ней получает значение равное 0 а не +1 к предидушей не скрытой это раз во вторых при копировании на новый лист этот макрос не парессчитываеться а перессчирываеться только при входе и выходе из ячейки
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

_Boroda_

Тогда еще проще
Для А18

=СУММ(A17;ПРОМЕЖУТОЧНЫЕ.ИТОГИ(103;B18))
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Poltava

не скажите наверно не правильно выразился смотрите что получается если в скрытый диапвзон попала пастая ячейка
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

_Boroda_

А зачем скрывать пустую строку? Она же как разделитель используется.
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Poltava

на тот случай когда нам нужно список без зависимости от подразделения я конечно понимаю что ее можно удалить и тогда получим нужный эффект но все же
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.