Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перенос строк по условию - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос строк по условию (Макросы/Sub)
Перенос строк по условию
Anis625 Дата: Пятница, 27.04.2018, 17:03 | Сообщение № 1
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Добрый день знатокам VBA.
В просторах интернета, по-моему, я нашел решение своей задачки - перенос строк по условию - если в строке есть слово "выполнено" или часть этого слова "выполн", НО ...:

1) Не отображается макрос при его вызове Alt+F8 (хотя при просмотре кода его вижу). Возможно дело в Private Sub. Пробовал удалять Private не помогает. В модуль тоже добавлял. Тоже не работает.
2) Я так понял, что макрос не допилинный - так как делает накладку перенесенных данных. Помогите пожалуйста допилить его.
К сообщению приложен файл: 6592223.rar (13.1 Kb)
 
Ответить
СообщениеДобрый день знатокам VBA.
В просторах интернета, по-моему, я нашел решение своей задачки - перенос строк по условию - если в строке есть слово "выполнено" или часть этого слова "выполн", НО ...:

1) Не отображается макрос при его вызове Alt+F8 (хотя при просмотре кода его вижу). Возможно дело в Private Sub. Пробовал удалять Private не помогает. В модуль тоже добавлял. Тоже не работает.
2) Я так понял, что макрос не допилинный - так как делает накладку перенесенных данных. Помогите пожалуйста допилить его.

Автор - Anis625
Дата добавления - 27.04.2018 в 17:03
Апострофф Дата: Пятница, 27.04.2018, 18:00 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
Anis625, процедуры с параметрами не видны по Alt+F8.
А про недопилинность не понял ничего.
 
Ответить
СообщениеAnis625, процедуры с параметрами не видны по Alt+F8.
А про недопилинность не понял ничего.

Автор - Апострофф
Дата добавления - 27.04.2018 в 18:00
Nic70y Дата: Пятница, 27.04.2018, 18:57 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 8705
Репутация: 2260 ±
Замечаний: 0% ±

Excel 2010
макрос на событие и сот. не отбражается так и должно быть
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
[/vba]причем рабочий
или часть этого слова
ну мож тогда так[vba]
Код
If Not Intersect(Target, [e:e]) Is Nothing And Left(Target.Value, 3) = "вып" Then
[/vba]


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Пятница, 27.04.2018, 18:58
 
Ответить
Сообщениемакрос на событие и сот. не отбражается так и должно быть
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
[/vba]причем рабочий
или часть этого слова
ну мож тогда так[vba]
Код
If Not Intersect(Target, [e:e]) Is Nothing And Left(Target.Value, 3) = "вып" Then
[/vba]

Автор - Nic70y
Дата добавления - 27.04.2018 в 18:57
Anis625 Дата: Суббота, 28.04.2018, 09:21 | Сообщение № 4
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Круууто, благодарю Вас. Точно все работает оказывается.
Он получается сразу сносит строку если увидел слово "вып".

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

А можно сделать чтобы все таки с кнопки переносилось?

Автор - Anis625
Дата добавления - 28.04.2018 в 09:21
Anis625 Дата: Суббота, 28.04.2018, 09:28 | Сообщение № 5
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
If Not Intersect(Target, [e:e]) Is Nothing And Left(Target.Value, 3) = "вып" Then


Правильно будет если заменю код так:
[vba]
Код
If Not Intersect(Target, [e:e]) Is U.Find("вып") Then
[/vba]

чтобы макрос находил слово "вып" внутри текста? Бывает, что слово "выполнено" или "вып" пишется после определенного описания.
 
Ответить
Сообщение
If Not Intersect(Target, [e:e]) Is Nothing And Left(Target.Value, 3) = "вып" Then


Правильно будет если заменю код так:
[vba]
Код
If Not Intersect(Target, [e:e]) Is U.Find("вып") Then
[/vba]

чтобы макрос находил слово "вып" внутри текста? Бывает, что слово "выполнено" или "вып" пишется после определенного описания.

Автор - Anis625
Дата добавления - 28.04.2018 в 09:28
Апострофф Дата: Суббота, 28.04.2018, 09:28 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
А можно сделать чтобы все таки с кнопки переносилось?

Перенесите процедуру в обычный модуль.
Уберите Private и параметры.
Вместо Target просто анализируйте [E:E]

ВСЁ!
 
Ответить
Сообщение
А можно сделать чтобы все таки с кнопки переносилось?

Перенесите процедуру в обычный модуль.
Уберите Private и параметры.
Вместо Target просто анализируйте [E:E]

ВСЁ!

Автор - Апострофф
Дата добавления - 28.04.2018 в 09:28
Апострофф Дата: Суббота, 28.04.2018, 09:36 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
Бывает, что слово "выполнено" или "вып" пишется после определенного описания.

[vba]
Код
If Not Intersect(Target, [e:e]) Is Nothing And INSTR(Target.Value, "вып") Then
[/vba]
 
Ответить
Сообщение
Бывает, что слово "выполнено" или "вып" пишется после определенного описания.

[vba]
Код
If Not Intersect(Target, [e:e]) Is Nothing And INSTR(Target.Value, "вып") Then
[/vba]

Автор - Апострофф
Дата добавления - 28.04.2018 в 09:36
Anis625 Дата: Суббота, 28.04.2018, 11:53 | Сообщение № 8
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Цитата Апострофф, 28.04.2018 в 09:36, в сообщении № 7 ()
If Not Intersect(Target, [e:e]) Is Nothing And INSTR(Target.Value, "вып") Then


Эта часть получилась =) Благодарю Вас
 
Ответить
Сообщение
Цитата Апострофф, 28.04.2018 в 09:36, в сообщении № 7 ()
If Not Intersect(Target, [e:e]) Is Nothing And INSTR(Target.Value, "вып") Then


Эта часть получилась =) Благодарю Вас

Автор - Anis625
Дата добавления - 28.04.2018 в 11:53
Anis625 Дата: Суббота, 28.04.2018, 11:55 | Сообщение № 9
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Цитата Апострофф, 28.04.2018 в 09:28, в сообщении № 6 ()
Перенесите процедуру в обычный модуль.
Уберите Private


Эту часть сделал. Теперь при вызове макроса его видно (+ к себе в копилку знаний).

Цитата Апострофф, 28.04.2018 в 09:28, в сообщении № 6 ()
Уберите ... и параметры.
Вместо Target просто анализируйте [E:E]


А с этой частью не справился =(
 
Ответить
Сообщение
Цитата Апострофф, 28.04.2018 в 09:28, в сообщении № 6 ()
Перенесите процедуру в обычный модуль.
Уберите Private


Эту часть сделал. Теперь при вызове макроса его видно (+ к себе в копилку знаний).

Цитата Апострофф, 28.04.2018 в 09:28, в сообщении № 6 ()
Уберите ... и параметры.
Вместо Target просто анализируйте [E:E]


А с этой частью не справился =(

Автор - Anis625
Дата добавления - 28.04.2018 в 11:55
Anis625 Дата: Суббота, 28.04.2018, 13:16 | Сообщение № 10
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Цитата Апострофф, 28.04.2018 в 09:28, в сообщении № 6 ()
Вместо Target просто анализируйте [E:E]

Убрал Target - выдает ошибку. Похоже не просто удалить нужно
 
Ответить
Сообщение
Цитата Апострофф, 28.04.2018 в 09:28, в сообщении № 6 ()
Вместо Target просто анализируйте [E:E]

Убрал Target - выдает ошибку. Похоже не просто удалить нужно

Автор - Anis625
Дата добавления - 28.04.2018 в 13:16
StoTisteg Дата: Суббота, 28.04.2018, 13:24 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
If ActiveCell.Column = 5 Then
[/vba]
То есть вместо Target у Вас теперь ActiveCell.


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Суббота, 28.04.2018, 13:26
 
Ответить
Сообщение[vba]
Код
If ActiveCell.Column = 5 Then
[/vba]
То есть вместо Target у Вас теперь ActiveCell.

Автор - StoTisteg
Дата добавления - 28.04.2018 в 13:24
Anis625 Дата: Суббота, 28.04.2018, 14:18 | Сообщение № 12
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
То есть вместо Target у Вас теперь ActiveCell.

[vba]
Код
Sub Worksheet_Change()
With Sheets("Задания")
    .Select
    If ActiveCell.Column = 5 Then Exit Sub
    If Not Intersect(ActiveCell, [e:e]) Is Nothing And InStr(ActiveCell.Value, "вып") Then
        .Rows(ActiveCell.Row).Copy Sheets("Архив").Rows(WorksheetFunction.CountA(Sheets("Архив").[a:a]) + 1)
        .Rows(ActiveCell.Row).Delete
    End If
End With
End Sub
[/vba]

не работает макрос =(
 
Ответить
Сообщение
То есть вместо Target у Вас теперь ActiveCell.

[vba]
Код
Sub Worksheet_Change()
With Sheets("Задания")
    .Select
    If ActiveCell.Column = 5 Then Exit Sub
    If Not Intersect(ActiveCell, [e:e]) Is Nothing And InStr(ActiveCell.Value, "вып") Then
        .Rows(ActiveCell.Row).Copy Sheets("Архив").Rows(WorksheetFunction.CountA(Sheets("Архив").[a:a]) + 1)
        .Rows(ActiveCell.Row).Delete
    End If
End With
End Sub
[/vba]

не работает макрос =(

Автор - Anis625
Дата добавления - 28.04.2018 в 14:18
Апострофф Дата: Суббота, 28.04.2018, 14:30 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
не работает макрос =(

А с чего он будет работать, если есть Exit Sub для любой активной ячейки из .Column = 5, т.е. из столбца [E:E]?
 
Ответить
Сообщение
не работает макрос =(

А с чего он будет работать, если есть Exit Sub для любой активной ячейки из .Column = 5, т.е. из столбца [E:E]?

Автор - Апострофф
Дата добавления - 28.04.2018 в 14:30
Anis625 Дата: Суббота, 28.04.2018, 14:47 | Сообщение № 14
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Цитата Апострофф, 28.04.2018 в 14:30, в сообщении № 13 ()
А с чего он будет работать, если есть Exit Sub для любой активной ячейки из .Column = 5, т.е. из столбца [E:E]?


Удалил - ошибку выдает
Убрал End With - опять ошибку выдает
 
Ответить
Сообщение
Цитата Апострофф, 28.04.2018 в 14:30, в сообщении № 13 ()
А с чего он будет работать, если есть Exit Sub для любой активной ячейки из .Column = 5, т.е. из столбца [E:E]?


Удалил - ошибку выдает
Убрал End With - опять ошибку выдает

Автор - Anis625
Дата добавления - 28.04.2018 в 14:47
StoTisteg Дата: Суббота, 28.04.2018, 14:53 | Сообщение № 15
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код

Sub Worksheet_Change()
Sheets("Задания").Activate
    If ActiveCell.Column = 5 And InStr(ActiveCell.Value, "вып") Then
        .Rows(ActiveCell.Row).Copy Destination:=Sheets("Архив").Rows(WorksheetFunction.CountA(Sheets("Архив").[a:a]) + 1)
        .Rows(ActiveCell.Row).Delete
    End If
End Sub
[/vba]
Так?


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение[vba]
Код

Sub Worksheet_Change()
Sheets("Задания").Activate
    If ActiveCell.Column = 5 And InStr(ActiveCell.Value, "вып") Then
        .Rows(ActiveCell.Row).Copy Destination:=Sheets("Архив").Rows(WorksheetFunction.CountA(Sheets("Архив").[a:a]) + 1)
        .Rows(ActiveCell.Row).Delete
    End If
End Sub
[/vba]
Так?

Автор - StoTisteg
Дата добавления - 28.04.2018 в 14:53
Anis625 Дата: Суббота, 28.04.2018, 15:00 | Сообщение № 16
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Так?

"ругается" на .Rows
 
Ответить
Сообщение
Так?

"ругается" на .Rows

Автор - Anis625
Дата добавления - 28.04.2018 в 15:00
StoTisteg Дата: Суббота, 28.04.2018, 15:05 | Сообщение № 17
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
А. Точки перед ними убрать забыл...
[vba]
Код
Sub Worksheet_Change()
Sheets("Задания").Activate
    If ActiveCell.Column = 5 And InStr(ActiveCell.Value, "вып") Then
        Rows(ActiveCell.Row).Copy Destination:=Sheets("Архив").Rows(WorksheetFunction.CountA(Sheets("Архив").[a:a]) + 1)
        Rows(ActiveCell.Row).Delete
    End If
End Sub
[/vba]


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеА. Точки перед ними убрать забыл...
[vba]
Код
Sub Worksheet_Change()
Sheets("Задания").Activate
    If ActiveCell.Column = 5 And InStr(ActiveCell.Value, "вып") Then
        Rows(ActiveCell.Row).Copy Destination:=Sheets("Архив").Rows(WorksheetFunction.CountA(Sheets("Архив").[a:a]) + 1)
        Rows(ActiveCell.Row).Delete
    End If
End Sub
[/vba]

Автор - StoTisteg
Дата добавления - 28.04.2018 в 15:05
Anis625 Дата: Суббота, 28.04.2018, 15:27 | Сообщение № 18
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Точки перед ними убрать забыл...


Я тоже пробовал убирать. Не срабатывает =(
 
Ответить
Сообщение
Точки перед ними убрать забыл...


Я тоже пробовал убирать. Не срабатывает =(

Автор - Anis625
Дата добавления - 28.04.2018 в 15:27
StoTisteg Дата: Суббота, 28.04.2018, 15:47 | Сообщение № 19
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Тогда колитесь, что именно пишет.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеТогда колитесь, что именно пишет.

Автор - StoTisteg
Дата добавления - 28.04.2018 в 15:47
StoTisteg Дата: Суббота, 28.04.2018, 15:51 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Попробуем эту головоломку упростить:
[vba]
Код
Sub Worksheet_Change()
    Sheets("Задания").Activate
    If ActiveCell.Column = 5 And InStr(ActiveCell.Value, "вып") Then
        With Sheets("Архив")
            Rows(ActiveCell.Row).Copy Destination:=.Rows(.Cells(Rows.Count,1).End(xlUp).row + 1)
        end with
        Rows(ActiveCell.Row).Delete
    End If
End Sub
[/vba]


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеПопробуем эту головоломку упростить:
[vba]
Код
Sub Worksheet_Change()
    Sheets("Задания").Activate
    If ActiveCell.Column = 5 And InStr(ActiveCell.Value, "вып") Then
        With Sheets("Архив")
            Rows(ActiveCell.Row).Copy Destination:=.Rows(.Cells(Rows.Count,1).End(xlUp).row + 1)
        end with
        Rows(ActiveCell.Row).Delete
    End If
End Sub
[/vba]

Автор - StoTisteg
Дата добавления - 28.04.2018 в 15:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос строк по условию (Макросы/Sub)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!