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

Добрый вечер, То ли лыжи не едут, то ли я . . В общем, проблема весьма удивительная (во всяком.
Next Windows.Activate
Здравствуйте форумчане! Какой код отвечает за переключение книг? мне нужно что то типа следующая.
Событие Activate не срабатывает
Событие Activate не срабатывает если форма становится активной при переходе в нее из окна другой.
Заменить метод Activate
WPF(Не mvvm) Переношу приложение с WF на WPF. В открытом partial классе объявляется public.
хм. теперь забавнее ситуация. теперь такая проблема исчезла, но спецвставкой не копирует. вообщем истина где-то рядом. ну со спецвставкой я разберусь.
Добавлено через 55 секунд
попробовал — не работает.
так чуть похимичил. и опять не активирует окно.. WTF? но типа копирует.
Добавлено через 38 секунд
эксели одинаковые.
Добавлено через 49 секунд
офис 2007. спецвставка прекрасно работает в других макросах.
а что значит «эксели разные»?
Добавлено через 34 секунды
я подозреваю под разными разные версии экселя например 2003 и 2007. поэтому решил уточнить правильно ли я понял вопрос.
Добавлено через 2 минуты
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Сломался Object.activate
Все утро туплю, не пойму в чем дело. Не срабатывает Activate. То есть вообще не открывается, даже.
Не срабатывает Form.Activate()
Добрый день киберфорум! Нуждаюсь в вашей помощи — есть 2 формы, после операций в первой необходимо.

Здравствуйте все ツ Вопрос. Нужно после старта сделать окно активным и фокусным. Это на некоторых.

Поскажите плз, как например обозначить текущий открытый файл не именем, а возможно переменной или.
Select и Activate — зачем нужны и нужны ли?
Все начинающие изучать VBA сталкиваются с тем, что записанные через макрорекордер коды пестрят методами Select и Activate.
Если не знакомы с работой макрорекордера — Что такое макрос и где его искать?
Это значительно ухудшает читабельность кода и, как ни странно — быстродействие. Но есть недостатки и куда более критичные. Если код выполняется достаточно долго и он постоянно что-то выделяет — пользователь может заскучать и забыться и начнет тыкать мышкой по листам и ячейкам, выделяя не то, что выделил ранее код. Что повлечет ошибки логики. Т.е. код может и выполнится, но совершенно не так, как ожидалось. Поэтому избавляться от Select и Activate необходимо везде, где это возможно.
Для начала рассмотрим два кода, выполняющие одни те же действия — запись в ячейку А3 листа Лист2 слова «Привет». При этом сам код запускается с Лист1 и после выполнения код Лист1 должен остаться активным. Чтобы сделать эти действия вручную потребуется сначала перейти на Лист2, выделить ячейку А3, записать в неё слово «Привет» и вернуться на Лист1. Поэтому запись макрорекордером этих действий приведет к такому коду:
Sub Макрос1() Sheets(«Лист2»).Select ‘выделяем Лист2 Range(«A3»).Select ‘выделяем ячейку А3 ActiveCell.FormulaR1C1 = «Привет» ‘записываем слово Привет Range(«A4»).Select ‘после нажатия Enter автоматически выделяется ячейка А4 Sheets(«Лист1»).Select ‘возвращаемся на Лист1 End Sub
Нигде не говорится, что в большинстве случаев все эти Select и Activate в кодах не нужны. Однако вышеприведенный код можно значительно улучшить, если убрать все ненужные Select и Activate:
Sub Макрос1() Sheets(«Лист2»).Range(«A3»).FormulaR1C1 = «Привет» End Sub
Как видно, вместо 5-ти строк кода получилась одна строка. Которая выполняет ту же задачу, что и код из 5-ти строк.
Прежде чем понять как правильно избавляться от лишнего давайте разберемся зачем же тогда VBA записывает эти Select и Activate? Как ни странно, но здесь все очень просто. VBA просто не знает, что Вы будете делать после того, как выделили Лист2. И когда Вы переходите на Лист2 — VBA записывает именно переход(его активацию, выделение). Когда выделяете ячейку — так же именно это действие записывает VBA. Захотите ли Вы затем выделить еще что-то, или закрасить ячейку, или записать в неё формулу/значение — VBA не знает. Поэтому в дальнейшем VBA работает именно с выделенным объектом Selection на активном листе.
Но при написании кода вручную или при правке записанного рекордером мы уже вольны в выборе и знаем, чего хотели добиться и какие действия нам точно не нужны.
Итак, чтобы записать в ячейку слово «Привет» рекордер предложит нам такой код:
Sub Макрос1() Range(«A3»).Select ‘выделяем ячейку А3 ActiveCell.FormulaR1C1 = «Привет» ‘записываем слово Привет Range(«A4»).Select ‘после нажатия Enter автоматически выделяется ячейка А4 End Sub
однако выделять ячейку( Range(«A3»).Select ) совершенно необязательно. Значит один Select уже лишний. После этого идет обращение к активной ячейке — ActiveCell . .FormulaR1C1 = «Привет» означает запись значения «Привет» в эту ячейку.
Пусть не смущает FormulaR1C1 — VBA всегда так указывает запись и значения и формулы. Т.к. перед словом «Привет» нет знака равно — то это значение.
Т.к. ActiveCell является обращением к выделенной ячейке, а выделили мы до этого А3, значит их можно просто «сократить»:
Sub Макрос1() Range(«A3»).FormulaR1C1 = «Привет» Range(«A4»).Select ‘после нажатия Enter автоматически выделяется ячейка А4 End Sub
Теперь у нас код получился короче и понятнее. Однако остался один Select: Range(«A4»).Select . Если нет необходимости выделять ячейку А4 после записи в А3 значения, то надо просто удалить эту строку и после выполнения кода активной будет та ячейка, которая была выделена до выполнения(т.е. выделенная ячейка просто не изменится). Таким образом мы с трех строк сократим код до 1-ой:
Sub Макрос1() Range(«A3»).FormulaR1C1 = «Привет» End Sub
Теперь несложно догадаться, что с листами все в точности так же. Sheets(«Лист2»).Select — Select хоть и не нужен, но и ActiveSheet после него нет. Здесь необходимо знать некоторую иерархию в Excel. Сначала идет сам Excel — Application, потом книга — Workbook. В книгу входят рабочие листы(Worksheets), а уже в листах — ячейки и диапазоны — Range и Cells(Application ->Workbook ->Worksheet ->Range). Если перед Range или Cells не указывать явно лист: Range(«A3»).FormulaR1C1 = «Привет» , то значение будет записано на активный лист. Подробнее можно прочесть в статье: Как обратиться к диапазону из VBA
Маленький нюанс: если сокращаем обращение к объектам, то Select-ов быть не должно вообще. Иначе есть шанс получить ошибку «Subscript out of range»:
буквально это означает, что указанный индекс вне досягаемости. А появляется эта ошибка потому, что нельзя выделить ячейку НЕактивного листа или лист НЕактивной книги. Легко эту ошибку получить например в таком коде:
Sub Макрос2() Windows(«Книга3»).Activate ‘здесь появится ошибка, т.к. пытаемся выделить лист в Книга2 ‘а на данный момент активной является Книга3 Windows(«Книга2»).Sheets(«Лист3»).Select End Sub
Ошибка обязательно появится, т.к. сначала мы активировали кодом книгу «Книга3», а потом пытаемся активировать лист НЕактивной на этот момент книги «Книга2». А это сделать невозможно без активации той книги, в которой активируемый лист. Т.е. активация должна происходить именно последовательно: Книга ->Лист ->Ячейка. И никак иначе, если мы хотим активировать именно конкретную ячейку конкретного листа в конкретной книге.
И пример с ячейками:
Sub Макрос2() Sheets(«Лист3»).Select ‘здесь появится ошибка, т.к. пытаемся выделить ячейку на листе «Лист1» ‘а на данный момент активным является Лист3 Sheets(«Лист1»).Range(«C7»).Select End Sub
Так же такая ошибка может появиться и по той простой причине, что указанного листа или книги нет(листа с указанным именем нет в данной книге или книга, к которой обращаемся просто закрыта).
Еще небольшой пример оптимизации:
Sub Макрос2() Windows(«Книга3»).Activate Sheets(«Лист3»).Select Range(«C7»).Select ActiveCell.FormulaR1C1 = «Привет» Range(«C7»).Select Selection.Font.Bold = True With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub
Этот код записывает в ячейку С7 Лист3 книги «Книга3» слово «Привет», потом делает жирным шрифт и назначает желтый цвет заливке. Убираем активацию книги, листа и ячейки, заменив их прямым обращением:
далее делаем для ячейки жирный шрифт:
With Workbooks(«Книга3»).Sheets(«Лист3»).Range(«C7»).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With
Тут есть нюанс. Windows необходимо всегда заменять на Workbooks — в кодах я сделал именно так. Если этого не сделать, то получите ошибку 438 — объект не поддерживает данное свойство или метод(object dos’t support this property or metod), т.к. коллекция Windows не содержит определения для Sheets.
Важный момент: лучше всегда указать имя книги вместе с расширением(.xlsx, xlsm, .xls и т.д.). Если в настройках ОС Windows(Панель управления —Параметры папок -вкладка Вид —Скрывать расширения для зарегистрированных типов файлов) указано скрывать расширения — то указывать расширение не обязательно — Workbooks(«Книга2»). Но и ошибки не будет, если его указать. Однако, если пункт «Скрывать расширения для зарегистрированных типов файлов» отключен, то указание Workbooks(«Книга2») обязательно приведет к ошибке.
Вместо Workbooks(«Книга3.xlsx») можно использовать обращение к активной книге или книге, в которой расположен код. Обращение к Лист3 активной книги, когда активен Лист2 или другой:
Но бывают случаи, когда необходимо производить действия исключительно в той книге, в которой сам код. И не зависеть при этом от того, какая книга активна в данный момент и как она называется. Ведь в процессе книга может быть переименована. За это отвечает ThisWorkbook:
ActiveWorkbook — действия с активной на момент выполнения кода книгой
ThisWorkbook — действия с книгой, в которой записан код
Однако так же бывают случаи, когда необходимо обращаться к новой книге или листу, которые были созданы в процессе работы кода. В таком случае необходимо использовать переменные:
Sub NewBook() ‘объявляем переменную для дальнейшего обращения Dim wbNewBook As Workbook ‘создаем книгу Set wbNewBook = Workbooks.Add ‘теперь можно обращаться к wbNewBook как к любой другой книге ‘но уже не указывая её имя wbNewBook.Sheets(1).Range(«A1»).Value = «Привет» ‘Sheets(1) — обращение к листу по его порядковому номеру ‘(отсчет с начинается с 1 слева) End Sub Sub NewSheet() ‘объявляем переменную для дальнейшего обращения Dim wsNewSheet As Worksheet ‘добавляем новый лист в активную книгу Set wsNewSheet = ActiveWorkbook.Sheets.Add ‘теперь можно обращаться к wsNewSheet как к любому другому листу ‘но уже не указывая его имя или индекс wsNewSheet.Range(«A1»).Value = «Привет» End Sub
Не везде Activate лишний
Но есть и такие свойства и методы, которые требуют обязательной активации книги/листа. Одним из таких свойств является свойство окна FreezePanes(Закрепление областей):
Sub Freeze_Panes() ThisWorkbook.Activate Sheets(2).Activate Range(«B2»).Select ActiveWindow.FreezePanes = True End Sub
В этом коде нельзя убирать Select и Activate, т.к. свойство FreezePanes применяется исключительно к активному листу и активной ячейке, потому что является оно именно методом окна, а не листа или ячейки.
Так же сюда можно отнести свойства: Split, SplitColumn, SplitHorizontal и им подобные. Иными словами все свойства, которые работают исключительно с активным окном приложения, а не с объектами напрямую.
Статья помогла? Поделись ссылкой с друзьями!
Не работает activate
имя проверял, формат, файла менял, монитор протирал, по системнику стучал. бубна увы нет. может бубен купить и потанцевать с ним.

Добрый вечер, То ли лыжи не едут, то ли я . . В общем, проблема весьма удивительная (во всяком.
Next Windows.Activate
Здравствуйте форумчане! Какой код отвечает за переключение книг? мне нужно что то типа следующая.
Событие Activate не срабатывает
Событие Activate не срабатывает если форма становится активной при переходе в нее из окна другой.
Заменить метод Activate
WPF(Не mvvm) Переношу приложение с WF на WPF. В открытом partial классе объявляется public.
сделать так чтоб разные сессии не создавались самое простое
Добавлено через 1 минуту
где то стоит лишний CreateObject(«Excel.Application»)
я так думаю™
логично. объявил двумя переменными книгу источника и целевую книгу
Добавлено через 58 секунд
и не морочиться с активацией. наверно все дело в том, что макрорекордер предлагает вариант активации книги…
файлы открываются по дабл клику. никакой createobject Не стоит.
активация нужна исключительно для копирования данных.
процесс: открыты оба файла, активен любой из них, активируем заданный файл и копируем из него в другой файл предварительно его активировал. всё примитивно.
Добавлено через 48 секунд
хм. а объявить переменными это выход.
«активируем заданный файл и копируем из него в другой файл» — активация лишнее действие
«предварительно его активировал. » — активация лишнее действие
«всё примитивно. » — тут согласен
Но всё равно — если файлы открыты в разных процессах, то никакие переменные не помогут.
странно, почему тогда в другой сессии
Добавлено через 3 минуты
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Сломался Object.activate
Все утро туплю, не пойму в чем дело. Не срабатывает Activate. То есть вообще не открывается, даже.
Не срабатывает Form.Activate()
Добрый день киберфорум! Нуждаюсь в вашей помощи — есть 2 формы, после операций в первой необходимо.

Здравствуйте все ツ Вопрос. Нужно после старта сделать окно активным и фокусным. Это на некоторых.

Поскажите плз, как например обозначить текущий открытый файл не именем, а возможно переменной или.

