Помогите пожалуйста разобраться в основах. Есть код часть которого я написал сам. Он работает. Вторая часть записана макросом. Отдельно она тоже работает. Я хотел запихать данный макрос в свой код. Но так он перестаёт работать. При этом обнаружил что, если закрыть другие книги - код начинает работать. Сейчас код с листа перенёс в module. Там и мой код и добавленный код макроса. Если открыт только этот файл то всё работает. Но стоит открыть другой файл. Вылетает ошибка. Run-time error '9': Subscript out of range.
Помогите пожалуйста разобраться в основах. Есть код часть которого я написал сам. Он работает. Вторая часть записана макросом. Отдельно она тоже работает. Я хотел запихать данный макрос в свой код. Но так он перестаёт работать. При этом обнаружил что, если закрыть другие книги - код начинает работать. Сейчас код с листа перенёс в module. Там и мой код и добавленный код макроса. Если открыт только этот файл то всё работает. Но стоит открыть другой файл. Вылетает ошибка. Run-time error '9': Subscript out of range.fairylive
[/vba]вставьте в начало кода, который изначально должен работать внутри своей книги, а обращается к активной (последней открытой, в которой нет Sheets("Каркас")). Звание колдуна надо оправдывать
[vba]
Код
THISWORKBOOK.ACTIVATE
[/vba]вставьте в начало кода, который изначально должен работать внутри своей книги, а обращается к активной (последней открытой, в которой нет Sheets("Каркас")). Звание колдуна надо оправдывать Апострофф
Апострофф, а где должен быть сам код? В module или в листе?
Сейчас попробовал добавить THISWORKBOOK.ACTIVATE затем добавил записанный код макроса. При этом все другие файлы закрыты. Код находится в листе. (в том файле что я выложил я код перенёс в модуль). Вылетает другая ошибка
Run-time error '1004': Application-defined or object-defined error.
При этом жёлтым ошибка не выделяется. Но если идти по шагам (F8) то спотыкается на том куске с которого начинается код записанного макроса [vba]
Код
Columns("A:D").select ...
[/vba]
Апострофф, а где должен быть сам код? В module или в листе?
Сейчас попробовал добавить THISWORKBOOK.ACTIVATE затем добавил записанный код макроса. При этом все другие файлы закрыты. Код находится в листе. (в том файле что я выложил я код перенёс в модуль). Вылетает другая ошибка
Run-time error '1004': Application-defined or object-defined error.
При этом жёлтым ошибка не выделяется. Но если идти по шагам (F8) то спотыкается на том куске с которого начинается код записанного макроса [vba]
Апострофф, а где должен быть сам код? В module или в листе?
Сам спросил. Сам ответил. Кажется я понял где он должен быть. Вставил код в окно Эта книга. Работает! Проверил с другими открытыми книгами - работает. Всем спасибо! Немного разобрался)))
Апострофф, а где должен быть сам код? В module или в листе?
Сам спросил. Сам ответил. Кажется я понял где он должен быть. Вставил код в окно Эта книга. Работает! Проверил с другими открытыми книгами - работает. Всем спасибо! Немного разобрался)))fairylive
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка._Boroda_
fairylive, верните код в модуль, так правильней! Поправила немного макрос: добавила [vba]
Код
Set wb = ThisWorkbook
[/vba] и везде обращалась к wb, все селекты Ваши убрала, можно без них. И сортировку посмотрите, добавилось определение последней строчки на листа каркас.
fairylive, верните код в модуль, так правильней! Поправила немного макрос: добавила [vba]
Код
Set wb = ThisWorkbook
[/vba] и везде обращалась к wb, все селекты Ваши убрала, можно без них. И сортировку посмотрите, добавилось определение последней строчки на листа каркас.Manyasha
Да да я знаю. Причёсывал в другом коде такие макросы. Но там какой-то один select не убрался у меня. Видимо поэтому ошибка и оставалась. Потом я решил ничего не причёсывать.
Да да я знаю. Причёсывал в другом коде такие макросы. Но там какой-то один select не убрался у меня. Видимо поэтому ошибка и оставалась. Потом я решил ничего не причёсывать.fairylive
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.
Спасибо! Вот они основы основ про которые я не знал.
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.
Спасибо! Вот они основы основ про которые я не знал.
fairylive, поскольку я чайником был не так давно, как все эти зубры выше и не успел ещё позабыть все грабли, попробую объяснить популярно. 1) Select(ed) есть абсолютное зло, которого следует избегать. Он не даёт ничего, кроме скачков выделения. VBA прекрасно работает без выделения. То есть [vba]
Код
Range("A1").Select Selected.Value = "Это ячейка"
[/vba] абсолютно тождественно [vba]
Код
Range("A1").Value = "Это ячейка"
[/vba]
[vba]
Код
Worksheets(1)
[/vba] всегда относится к активной книге, если хотим описать лист неактивной — [vba]
Код
Workbooks("Имя_книги").Worksheets(1)
[/vba]
[vba]
Код
Range("A1")
[/vba] относится к активному листу активной книги, иначе [vba]
Код
Workbooks("Имя_книги").Worksheets(1).Range("A1")
[/vba](если не уверены в активности книги) или [vba]
Код
Worksheets(1).Range("A1")
[/vba], если книга точно активна, а лист — неизвестно.
Это приёмы ускорения работы кода. Отключает запросы типа "Вы уверены, что хотите закрыть книгу без сохранения" и вывод на экран изменений.
fairylive, поскольку я чайником был не так давно, как все эти зубры выше и не успел ещё позабыть все грабли, попробую объяснить популярно. 1) Select(ed) есть абсолютное зло, которого следует избегать. Он не даёт ничего, кроме скачков выделения. VBA прекрасно работает без выделения. То есть [vba]
Код
Range("A1").Select Selected.Value = "Это ячейка"
[/vba] абсолютно тождественно [vba]
Код
Range("A1").Value = "Это ячейка"
[/vba]
[vba]
Код
Worksheets(1)
[/vba] всегда относится к активной книге, если хотим описать лист неактивной — [vba]
Код
Workbooks("Имя_книги").Worksheets(1)
[/vba]
[vba]
Код
Range("A1")
[/vba] относится к активному листу активной книги, иначе [vba]
Код
Workbooks("Имя_книги").Worksheets(1).Range("A1")
[/vba](если не уверены в активности книги) или [vba]
Код
Worksheets(1).Range("A1")
[/vba], если книга точно активна, а лист — неизвестно.
StoTisteg, Спасибо! Но возникает нубский вопрос, а что значит активно не активно? Мне надо чтобы код работал независимо от того на каком листе я открываю файл и независимо от того открыты другие файлы или нет. От куда мне знать должны ли те ячейки, диапазоны, листы быть в коде активными или нет? Или если код с ними что-то делает то получается обязаны быть активными?
StoTisteg, Спасибо! Но возникает нубский вопрос, а что значит активно не активно? Мне надо чтобы код работал независимо от того на каком листе я открываю файл и независимо от того открыты другие файлы или нет. От куда мне знать должны ли те ячейки, диапазоны, листы быть в коде активными или нет? Или если код с ними что-то делает то получается обязаны быть активными?fairylive
Но возникает нубский вопрос, а что значит активно не активно?
Это просто фокус внимания. Объясняю популярно. Представьте себе, что Вы ведёте семинар в группе студентов. Это вся совокупность книг. Если Вы вызвали к доске студента Васю Пупкина и беседуете с ним, Вы можете обращаться к нему "студент Пупкин" (Workbooks("Пупкин")), если Вы на него сердиты (то есть не уверены, что он у доски). Можете обращаться на "ты" (ActiveWorkbook), будто Вам всё равно, кто у доски. Когда Вы хотите обсудить с ним его домашку, Вы вообще не употребляете апеллятивов — "это что тут вообще за хрень понаписана?" Это Worksheets("Домашка"). Или "что значат вот эти вот буквы вот в этой домашке?" — это Range("A1:B2"). А когда Вы хотите поговорить не с Васей Пупкиным, стоящим у доски, а с сидящим Пусей Вапкиным, Вы вынуждены либо сказать "студент Вапкин, подойдите" (это будет Workbooks("Вапкин").Activate), либо всё время говорить "вот, Пупкин, а Вапкин в своей третьей домашке эту формулу написал правильно", то есть Workbooks("Вапкин").Worksheets(3).Range("A1:B2"). И имейте в виду, что к студентам относится запрет Паули — как только Вы вызвали Пусю Вапкина, Вася Пупкин тут же сел на место. И выяснить, на какое именно не проще, чем решить уравнение Шрёдингера
Но возникает нубский вопрос, а что значит активно не активно?
Это просто фокус внимания. Объясняю популярно. Представьте себе, что Вы ведёте семинар в группе студентов. Это вся совокупность книг. Если Вы вызвали к доске студента Васю Пупкина и беседуете с ним, Вы можете обращаться к нему "студент Пупкин" (Workbooks("Пупкин")), если Вы на него сердиты (то есть не уверены, что он у доски). Можете обращаться на "ты" (ActiveWorkbook), будто Вам всё равно, кто у доски. Когда Вы хотите обсудить с ним его домашку, Вы вообще не употребляете апеллятивов — "это что тут вообще за хрень понаписана?" Это Worksheets("Домашка"). Или "что значат вот эти вот буквы вот в этой домашке?" — это Range("A1:B2"). А когда Вы хотите поговорить не с Васей Пупкиным, стоящим у доски, а с сидящим Пусей Вапкиным, Вы вынуждены либо сказать "студент Вапкин, подойдите" (это будет Workbooks("Вапкин").Activate), либо всё время говорить "вот, Пупкин, а Вапкин в своей третьей домашке эту формулу написал правильно", то есть Workbooks("Вапкин").Worksheets(3).Range("A1:B2"). И имейте в виду, что к студентам относится запрет Паули — как только Вы вызвали Пусю Вапкина, Вася Пупкин тут же сел на место. И выяснить, на какое именно не проще, чем решить уравнение Шрёдингера StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Пятница, 25.03.2016, 22:04
- не всегда. Бывает что некоторые начинающие помещают код в модуль книги :) И соответственно читайте и вникайте в Сообщение № 9, только с поправкой на книгу.
- не всегда. Бывает что некоторые начинающие помещают код в модуль книги :) И соответственно читайте и вникайте в Сообщение № 9, только с поправкой на книгу.Hugo
Вариантов можно придумать до фига. Понятное дело, что если особо одарённый преподаватель затеет переписку с Васей Пупкиным из 101 группы в лабораторном журнале Пуси Вапкина из 102, то Пуся нифига не поймёт, а до Васи нифига не дойдёт
Вариантов можно придумать до фига. Понятное дело, что если особо одарённый преподаватель затеет переписку с Васей Пупкиным из 101 группы в лабораторном журнале Пуси Вапкина из 102, то Пуся нифига не поймёт, а до Васи нифига не дойдёт StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Пятница, 25.03.2016, 21:39