Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
vdekameron111
0 / 0 / 1
Регистрация: 19.01.2016
Сообщений: 141
#1

Работа макроса при добавлении/удалении строк

15.09.2016, 10:12. Просмотров 387. Ответов 11
Метки нет (Все метки)

Добрый день уважаемые! Столкнулся с такой проблемой. В книге были реализованы макросы. Но после добавления строк все улетело в трубу.
Visual Basic
1
2
3
4
5
6
7
8
9
Range("U84").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
    Range("B83").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("U84:U95").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
        :=False, Transpose:=False
Подскажите пожалуйста на данном примере как мне избавиться от этой проблемы в будущем. Т.е. чтобы не было жесткой привязки к ячейкам и при добавлении строк все работало.
Заранее большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2016, 10:12
Ответы с готовыми решениями:

Запуск макроса при добавлении строк
Есть лист. Разделен условно на несколько диапазонов. Например: Range(Cells(n,...

Бесконечная работа макроса при объемах больше 100 000 строк
Господа, доброго времени суток. Есть проблема с макросом, макрос сравнивает...

Два макроса в Excel. Один перестает работать при добавлении другого
Всем доброе утро. Прошу помощи в проблеме, суть которой заключается в...

Увеличение диапазона при добавлении новых строк
Имеется диапазон, например A4:B27, с заполненными данными, то есть в строке 28...

работа макроса при отображении формы
Доброго времени суток форумчане. Помогите кто знает как сделать так чтобы...

11
Hugo121
6277 / 2380 / 401
Регистрация: 19.10.2012
Сообщений: 7,030
15.09.2016, 13:19 #2
Так там и нет жёской привязки к ячейкам, там есть привязка к диапазону.
Если вставили строки и ячейка сдвинулась ниже - код это не увидит, т.к. он не привязан к ячейке!
Ну а если нужно решение - показывайте задачу!
0
vdekameron111
0 / 0 / 1
Регистрация: 19.01.2016
Сообщений: 141
15.09.2016, 13:49  [ТС] #3
Вот это и есть реальная задача, только в упрощенном виде.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Макрос1()
Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
    Range("B1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A1:A10").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
        :=False, Transpose:=False
End Sub
Вот этот код повесить на кнопку в файле.
1) Копируем все числа "100"
2) Нажимаем на кнопку - они все вставятся в область для вставки с применением коэф. и стилей.
3) Добавляем перед первой строкой еще например 2 строки....повторяем пункт 1 и 2....все сломалось!! Уже не вставится в область вставки а соответственно в ту область, которая указана в макросе "А1:А10"

Вопрос...как сделать, чтобы при добавлении сверху строк все работало как надо(данные вставлялись именно в область для вставки).

Спасибо за помощь заранее.
P.S. Надеюсь понятно объяснил....есть грешок в этом плане.
0
Вложения
Тип файла: xlsx Лист Microsoft Excel.xlsx (12.2 Кб, 3 просмотров)
pashulka
2399 / 1223 / 497
Регистрация: 01.12.2010
Сообщений: 2,474
15.09.2016, 14:09 #4
Как вариант, используйте имена диапазонов.
0
Вложения
Тип файла: zip Sample_for_VDekameron111.zip (8.0 Кб, 1 просмотров)
Narimanych
281 / 242 / 129
Регистрация: 23.03.2015
Сообщений: 832
15.09.2016, 14:13 #5
vdekameron111,
Вместо 8-ой строки попробуйте
Range(Cells(1,1),Cells(10,1)).Select
0
vdekameron111
0 / 0 / 1
Регистрация: 19.01.2016
Сообщений: 141
15.09.2016, 15:26  [ТС] #6
Не работает ваш вариант.

Добавлено через 34 секунды
Цитата Сообщение от pashulka Посмотреть сообщение
Как вариант, используйте имена диапазонов.
Спасибо!!! Врубился! очень даже помогло

Добавлено через 31 минуту
Цитата Сообщение от pashulka Посмотреть сообщение
Как вариант, используйте имена диапазонов.
Беда теперь в том, что когда из другой книги копирую диапазон source-
Visual Basic
1
2
 Range("source").Select
    Selection.Copy
и пытаюсь вставить в другую вот так

Visual Basic
1
2
3
With Application
         Range("dest") = .Transpose(.Evaluate(Range("source").Address(, , .ReferenceStyle) & "/" & Range("KOEF")))
    End With
то выдает ошибку.

Как это подправить. Извините за назойливость и может за смешные вопросы...но не сильно знаком с VBA
0
pashulka
2399 / 1223 / 497
Регистрация: 01.12.2010
Сообщений: 2,474
15.09.2016, 15:39 #7
В моём примере нет копирования и даже нет необходимости в оном.
0
vdekameron111
0 / 0 / 1
Регистрация: 19.01.2016
Сообщений: 141
15.09.2016, 15:53  [ТС] #8
Цитата Сообщение от pashulka Посмотреть сообщение
В моём примере нет копирования и даже нет необходимости в оном.
Visual Basic
1
2
3
With Application
         Range("dest") = .Transpose(.Evaluate(Range("source").Address(, , .ReferenceStyle) & "/" & Range("KOEF")))
    End With
Как тогда быть, если я диапазон "dest" беру из другой книги?
0
pashulka
2399 / 1223 / 497
Регистрация: 01.12.2010
Сообщений: 2,474
15.09.2016, 16:05 #9
Разумеется указать имя книги, например, Application.Range("'Имя книги1.xls'!DEST")
0
vdekameron111
0 / 0 / 1
Регистрация: 19.01.2016
Сообщений: 141
15.09.2016, 16:23  [ТС] #10
Цитата Сообщение от pashulka Посмотреть сообщение
Разумеется указать имя книги, например, Application.Range("'Имя книги1.xls'!DEST")
Я конечно нарываюсь на грубость... куда мне ткнуть это название книги...уже все перепробовал не получается
Visual Basic
1
2
3
With Application
         Range("dest") = .Transpose(.Evaluate(Application.Range("'Источник.xlsm'!source").Address(, , .ReferenceStyle) & "/" & Range("KOEF")))
    End With
Вот так он тупо нули вставляет.

Добавлено через 2 минуты
Цитата Сообщение от pashulka Посмотреть сообщение
Разумеется указать имя книги, например, Application.Range("'Имя книги1.xls'!DEST")
Я конечно нарываюсь на грубость... куда мне ткнуть это название книги...уже все перепробовал не получается
Visual Basic
1
2
3
With Application
         Range("dest") = .Transpose(.Evaluate(Application.Range("'Источник.xlsm'!source").Address(, , .ReferenceStyle) & "/" & Range("KOEF")))
    End With
Вот так он тупо нули вставляет.
0
pashulka
2399 / 1223 / 497
Регистрация: 01.12.2010
Сообщений: 2,474
15.09.2016, 16:39 #11
Вы бы определились какой именно диапазон принадлежит другой книге, а то сначала DEST, теперь SOURCE, а ведь это важно. В первом случае - достаточно просто указать имя книги, а во втором, нам нужен полный адрес, т.е. либо так (см.далее), либо менять родителя у метода Evaluate.

Visual Basic
1
2
3
4
5
Private Sub Макрос1()
    With Application
         Range("DEST") = .Transpose(.Evaluate(.Range("'Источник.xlsm'!SOURCE").Address(, , .ReferenceStyle, True) & "/" & Range("KOEF")))
    End With
End Sub
P.S. Если не получится, то выкладывайте обе книги, только без оверквотинга.
1
vdekameron111
0 / 0 / 1
Регистрация: 19.01.2016
Сообщений: 141
15.09.2016, 16:46  [ТС] #12
Цитата Сообщение от pashulka Посмотреть сообщение
P.S. Если не получится, то выкладывайте обе книги, только без оверквотинга.
Прошло!
Вы мой спаситель!!!
Очень благодарен!!! Для работы надо! а то заеб...(извините) после каждой добавленной строчки делать replace всех диапазонов....
0
15.09.2016, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2016, 16:46

Как сместить формулы в VBA при добавлении новых строк в Excel
Имеется очень много формул в таблице, что бы избежать их нечаянного удаления...

Добавление строк на одном листе, и такого же количества на другом, при добавлении на первом
Добрый день, форумчане! Нужна ваша помощь. Допустим, есть два листа: лист 1...

Неправильная работа макроса при запуске с панели инструментов
Уважаемые форумчане,кто может подсказать почему макрос при запуске с кнопки...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru