Не работает макрос на другом компьютере
У меня у вам маленький вопрос. привожу фрагмент кода, считывается файл, и по каждой статье разносится по дополнительным листам, дело в том, что в некоторых Кейсах расписаны все счета,на которые относятся статьи, А ЕСТЬ такие кейсы где берется ВСЯ группа счетов, как в "аренде линий связи", как сделать так чтобы бралась так же вся группа счетов, но исключался один счет, например 6303017 ??=))
Sub splitting_text()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer
Dim tmpArr()
Dim flag As Boolean
Dim tmpStr As String
'Dim Left As Single
Dim tmpStrr As String
flag = False
k = 0
ReDim tmpArr(k)
For i = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(i).Select
Cells(1, 9).Value = "1.1. Расходы, связанные с технологическим развитием, в т.ч."
Cells(2, 9).Value = "1.1.1. Расходы, связанные с программным обеспечением"
Cells(3, 9).Value = "1.1.2. Расходы по сопровождению информационных систем"
Cells(4, 9).Value = "1.1.3. Расходы по услугам телекоммуникационных систем"
Cells(5, 9).Value = "1.1.4. Аренда линий связи"
Do While Cells(j, 1).Text <> ""
tmpStrr = Left(Cells(j, 5).Text, 4)
Select Case tmpStrr
'если список счетов
'"Расходы, связанные с программным обеспечением"
Case Is = "6304"
If (Right(Cells(j, 5).Text, 3) = "001") Or (Right(Cells(j, 5).Text, 3) = "002") Or (Right(Cells(j, 5).Text, 3) = "003") Or (Right(Cells(j, 5).Text, 3) = "004") Then
Cells(2, 10).Value = Cells(2, 10).Value + Cells(j, 7).Value
End If
Case Is = "6406"
'"Расходы по сопровождению информационных систем"
If (Right(Cells(j, 5).Text, 3) = "018") Or (Right(Cells(j, 5).Text, 3) = "019") Or (Right(Cells(j, 5).Text, 3) = "020") Or (Right(Cells(j, 5).Text, 3) = "021") Then
Cells(3, 10).Value = Cells(3, 10).Value + Cells(j, 7).Value
End If
'"Расходы по услугам телекоммуникационных систем"
If (Right(Cells(j, 5).Text, 3) = "014") Or (Right(Cells(j, 5).Text, 3) = "015") Or (Right(Cells(j, 5).Text, 3) = "016") Or (Right(Cells(j, 5).Text, 3) = "017") Then
Cells(4, 10).Value = Cells(4, 10).Value + Cells(j, 7).Value
End If
Case Is = "6303"
'"Аренда линий связи"
Cells(5, 10).Value = Cells(5, 10).Value + Cells(j, 7).Value
For m = 0 To k
If Cells(j, 5).Text = tmpArr(m) Then
flag = True
End If
Next
If flag = False Then
tmpArr(k) = Cells(j, 5).Text
k = k + 1
ReDim Preserve tmpArr(k)
End If
flag = False
Case Else
'MsgBox "Неизвестный счет :-(" + Chr(13) + Chr(13) + "Хвост счета: " + Cells(j, 5).Text, vbCritical, "АХТУНГ"
Rows(j).Interior.ColorIndex = 3
End Select
j = j + 1
Loop
Cells(18, 10).Value = Cells(19, 10).Value + Cells(20, 10).Value + Cells(21, 10).Value + Cells(22, 10).Value + Cells(23, 10).Value
Next
tmpStr = tmpArr(0)
For m = 1 To UBound(tmpArr)
tmpStr = tmpStr + ", " + tmpArr(m)
Next
End Sub
Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос - это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
-
Обычные модули - используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert - Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно.
Способ 2. Запись макросов макрорекордером
Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
- в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
- Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
- В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button) :
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Добрый день!
Подскажите, пожалуйста, из-за каких настроек один и тот же макрос работает по разному на разных компах?
Простой макрос, который восстанавливает автонумерацию:
[vba]Sub востановление_нумерации()
'
Sheets(1).Range("test[Столбец1]").ClearContents
Range("A3").FormulaR1C1 """, RC[3]<>""""),MAX(R2C:R[-1]C)+1,"""")"MsgBox ("Нумерация восстановлена!")
End Sub[/vba]
На одном компьютере все норм, а на другом не происходит автозаполнения формулы вниз.
На обоих компах офис 2010, у меня в 2013 все работает.Добрый день!
Подскажите, пожалуйста, из-за каких настроек один и тот же макрос работает по разному на разных компах?
Простой макрос, который восстанавливает автонумерацию:
[vba]Sub востановление_нумерации()
'
Sheets(1).Range("test[Столбец1]").ClearContents
Range("A3").FormulaR1C1 """, RC[3]<>""""),MAX(R2C:R[-1]C)+1,"""")"MsgBox ("Нумерация восстановлена!")
End Sub[/vba]
На одном компьютере все норм, а на другом не происходит автозаполнения формулы вниз.
На обоих компах офис 2010, у меня в 2013 все работает. LeprottoSub востановление_нумерации()
'
Sheets(1).Range("test[Столбец1]").ClearContents
Range("A3").FormulaR1C1 """, RC[3]<>""""),MAX(R2C:R[-1]C)+1,"""")"MsgBox ("Нумерация восстановлена!")
End Sub[/vba]
На одном компьютере все норм, а на другом не происходит автозаполнения формулы вниз.
На обоих компах офис 2010, у меня в 2013 все работает. Автор - Leprotto
Дата добавления - 24.11.2016 в 11:07Здравствуйте.
Посмотрите в параметрах Excel, установлено ли автозаполнение формулами в умных таблицах Pelena[/vba] в разных книгах может иметь разные наименования. И вы ожидаете результат не на том листе =))
Это только как предположение. =)[/vba] в разных книгах может иметь разные наименования. И вы ожидаете результат не на том листе =))
Это только как предположение. =) Timber_Wolf[/vba] в разных книгах может иметь разные наименования. И вы ожидаете результат не на том листе =))
Это только как предположение. =) Автор - Timber_Wolf
Дата добавления - 24.11.2016 в 11:56
да, помогло. СПАСИБО!
Если вдруг кому понадобится, то нашел тут:
Файл-Параметры-Правописание-Параметры автозамены. -Автоформат при вводе-Создать вычисляемые столбцы, заполнив таблицы формулами (поставить галочку)
да, помогло. СПАСИБО!
Если вдруг кому понадобится, то нашел тут:
Файл-Параметры-Правописание-Параметры автозамены. -Автоформат при вводе-Создать вычисляемые столбцы, заполнив таблицы формулами (поставить галочку) Leprotto
да, помогло. СПАСИБО!
Если вдруг кому понадобится, то нашел тут:
Файл-Параметры-Правописание-Параметры автозамены. -Автоформат при вводе-Создать вычисляемые столбцы, заполнив таблицы формулами (поставить галочку) Автор - Leprotto
Дата добавления - 24.11.2016 в 12:00Делаю робкие первые шаги. В файле пара кнопок с примитивными функциями. У меня на машине работает, но когда пересылаю на другой комп работать перестают. Подозреваю, что надо как-то прописать какие-то генеральные свойства, но не умею этого делать. Подскажите, плз.
Делаю робкие первые шаги. В файле пара кнопок с примитивными функциями. У меня на машине работает, но когда пересылаю на другой комп работать перестают. Подозреваю, что надо как-то прописать какие-то генеральные свойства, но не умею этого делать. Подскажите, плз. pabchek
У меня работает.
Можно ещё отключить обновление экрана, чтобы не моргалА "другой комп" часом не МАС?
У меня работает.
Можно ещё отключить обновление экрана, чтобы не моргалА "другой комп" часом не МАС? Pelena
А "другой комп" часом не МАС? Автор - Pelena
Дата добавления - 06.10.2015 в 16:39нет, не МАС, я посмотрел там на свойства - названия кнопок изменились
за мигалку спасибо!))
нет, не МАС, я посмотрел там на свойства - названия кнопок изменились
за мигалку спасибо!)) pabchek
"Учиться, учиться и еще раз учиться!"
WM: R399923528092за мигалку спасибо!)) Автор - pabchek
Дата добавления - 06.10.2015 в 16:56Виктор, в коде в Вашем файле нет ничего, что мешало бы работать ему практически на любом ПК в мире с Windows
[p.s.]Может у респондента макросы не включены?[/p.s.]
Виктор, в коде в Вашем файле нет ничего, что мешало бы работать ему практически на любом ПК в мире с Windows
[p.s.]Может у респондента макросы не включены?[/p.s.] Serge_007
[p.s.]Может у респондента макросы не включены?[/p.s.] Автор - Serge_007
Дата добавления - 06.10.2015 в 19:52
Включены, проверял. Проверил еще на двух машинах в офисе - не работает. На моем домашнем компе все норм. Обнаружил, что на "других" компьютерах у кнопок изменяется название на стандартное (CommandButton2). Поменять на название из VBA (в моем случае "ОчисткаA2") не дает.
Включены, проверял. Проверил еще на двух машинах в офисе - не работает. На моем домашнем компе все норм. Обнаружил, что на "других" компьютерах у кнопок изменяется название на стандартное (CommandButton2). Поменять на название из VBA (в моем случае "ОчисткаA2") не дает. pabchek
Включены, проверял. Проверил еще на двух машинах в офисе - не работает. На моем домашнем компе все норм. Обнаружил, что на "других" компьютерах у кнопок изменяется название на стандартное (CommandButton2). Поменять на название из VBA (в моем случае "ОчисткаA2") не дает. Автор - pabchek
Дата добавления - 08.10.2015 в 10:27Функционально возможно заменить кнопки на автофигуры в виде. в любом виде, а к ним привязать обычные макросы 1 и 2, которые выполняют эти Range("х5").ClearContents - будет надёжнее.
Кстати если локаль не русская или нет поддержки кириллицы - тоже может не сработать.
У меня правда работает и так (Эксель английский).Функционально возможно заменить кнопки на автофигуры в виде. в любом виде, а к ним привязать обычные макросы 1 и 2, которые выполняют эти Range("х5").ClearContents - будет надёжнее.
Кстати если локаль не русская или нет поддержки кириллицы - тоже может не сработать.
У меня правда работает и так (Эксель английский). HugoPelena, да, похоже, что это в самом деле причина моих невзгод. Админ сейчас лечит офисные компы
и. Hugo, да, Ваш метод оказался прекрасной альтернативой и даже быстрее и удобнее
всем по респекту[offtop]ПС
а Serge_007, не хочет плюсиков))))Pelena, да, похоже, что это в самом деле причина моих невзгод. Админ сейчас лечит офисные компы
и. Hugo, да, Ваш метод оказался прекрасной альтернативой и даже быстрее и удобнее
всем по респекту[offtop]ПС
а Serge_007, не хочет плюсиков)))) pabchek"Учиться, учиться и еще раз учиться!"
WM: R399923528092[offtop]ПС
а Serge_007, не хочет плюсиков)))) Автор - pabchek
Дата добавления - 08.10.2015 в 12:33Предположим, Вы скачали файл с данного сайта с примером макроса, открываете файл, но макросы в нем не работают! Как такое может быть? Неужели автор сайта выложил неработающий пример и не знает об этом? И тем более как может случиться такое, что Вы перенесли со своего ПК на другой ПК файл с рабочими макросами на флешке, запускаете, а он не работает. Почему? Вроде все правильно делаете, да ведь и у Вас работает на ПК. И начинает закрадываться мысль: "А чем же этот ПК и Excel на нем такие особенные?" . А ответ может быть прост - перед выполнением макроса не было разрешено выполнение этих самых макросов. Да, в большинстве случаев по умолчанию выполнение макросов в Excel отключено. И их надо включить. Для этого:
- Excel 2003:
Сервис-Безопасность-Уровень макросов "Низкий" - Excel 2007:
Кнопка Офис-Параметры Excel (Excel Options) -Центр управления безопасностью (Trust Centr) -Параметры центра управления безопасностью (Trust Centr Settings) -Параметры макросов (Macro Settings) -Разрешить все макросы (Enable All Macros) - Excel 2010-2016:
Файл (File) -Параметры (Options) -Центр управления безопасностью (Trust Centr) -Параметры центра управления безопасностью (Trust Centr Settings) -Параметры макросов (Macro Settings) -Разрешить все макросы (Enable All Macros)
Если макросы уже включены, но некоторые макросы отказываются работать (как правило те, которые записаны в модулях листов и книг и запускаются при наступлении определенного события - Worksheet_SelectionChange (выделение ячеек), Worksheet_Change (изменение значений ячеек) и т.п.), то скорее всего когда-то вы выполнили какой-нибудь макрос и он отключил отслеживание событий. Тогда надо в любую активную книгу добавить модуль(переходим в редактор VBA( Alt + F11 ) -Insert -Module), вставить в него приведенный ниже код и запустить:
Sub Reset_Events() Application.EnableEvents = True End Sub
чтобы запустить(выполнить) данный макрос макрос необходимо установить курсор в любое место между Sub и End Sub и нажать клавишу F5 .
Читайте также: