Меню

Ссылка должна указывать на лист макросов ошибка

ГЛАВНАЯ

ТРЕНИНГИ

   Быстрый старт
   Расширенный Excel
   Мастер Формул
   Прогнозирование
   Визуализация
   Макросы на VBA

КНИГИ

   Готовые решения
   Мастер Формул
   Скульптор данных

ВИДЕОУРОКИ

ПРИЕМЫ

   Бизнес-анализ
   Выпадающие списки
   Даты и время
   Диаграммы
   Диапазоны
   Дубликаты
   Защита данных
   Интернет, email
   Книги, листы
   Макросы
   Сводные таблицы
   Текст
   Форматирование
   Функции
   Всякое
PLEX

   Коротко
   Подробно
   Версии
   Вопрос-Ответ
   Скачать
   Купить

ПРОЕКТЫ

ОНЛАЙН-КУРСЫ

ФОРУМ

   Excel
   Работа
   PLEX

© Николай Павлов, Planetaexcel, 2006-2022
info@planetaexcel.ru


Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

Техническая поддержка сайта

ООО «Планета Эксел»

ИНН 7735603520


ОГРН 1147746834949
        ИП Павлов Николай Владимирович
        ИНН 633015842586
        ОГРНИП 310633031600071 

Привет, у меня есть этот простой код, следующий за гиперссылкой, и я пытаюсь назначить его кнопке, но получаю

Ссылка должна быть на лист макросов

Ошибка. В модуле нет ссылок на какие-либо листы, поскольку это простая команда, открывающая IE через cmd. Что я делаю не так?

Sub CAV2()
  'For MAGCRD1 (link is for illustration)
   Shell "CMD.EXE /C START """" """ & "www.google.com" & """"
End Sub

2 ответа

Лучший ответ

CAV2 — ссылка на ячейку юридического листа. Выберите другое название для процедуры.


2

JohnyL
6 Фев 2018 в 16:26

Имя подпроцедуры (CAV2) не разрешено VBA. Цифра «2» виновата, поменяйте ее и все будет нормально работать


1

victor ubong
22 Ноя 2019 в 14:13

Hi I have this simple code that follows a hyperlink, and I am trying to assign it to a button but I get

Reference must be to a macro sheet

error. In the module there are no references to any sheets as this is just a simple command opening up IE via cmd. What am I doing wrong?

Sub CAV2()
  'For MAGCRD1 (link is for illustration)
   Shell "CMD.EXE /C START """" """ & "www.google.com" & """"
End Sub

braX's user avatar

braX

11.4k5 gold badges20 silver badges33 bronze badges

asked Feb 6, 2018 at 16:00

Rhyfelwr's user avatar

CAV2 is legal sheet’s cell reference. Choose another name for procedure.

answered Feb 6, 2018 at 16:26

JohnyL's user avatar

JohnyLJohnyL

6,6673 gold badges21 silver badges41 bronze badges

the name of the subprocedure (CAV2) is not permitted by VBA. The number «2» is the culprit, change it and everything will work fine

answered Nov 22, 2019 at 14:13

victor ubong's user avatar

Hi I have this simple code that follows a hyperlink, and I am trying to assign it to a button but I get

Reference must be to a macro sheet

error. In the module there are no references to any sheets as this is just a simple command opening up IE via cmd. What am I doing wrong?

Sub CAV2()
  'For MAGCRD1 (link is for illustration)
   Shell "CMD.EXE /C START """" """ & "www.google.com" & """"
End Sub

braX's user avatar

braX

11.4k5 gold badges20 silver badges33 bronze badges

asked Feb 6, 2018 at 16:00

Rhyfelwr's user avatar

CAV2 is legal sheet’s cell reference. Choose another name for procedure.

answered Feb 6, 2018 at 16:26

JohnyL's user avatar

JohnyLJohnyL

6,6673 gold badges21 silver badges41 bronze badges

the name of the subprocedure (CAV2) is not permitted by VBA. The number «2» is the culprit, change it and everything will work fine

answered Nov 22, 2019 at 14:13

victor ubong's user avatar

Microsoft Excel. Ошибка #ССЫЛКА!, как исправить?

Исправить ошибку #ССЫЛКА! в Excel можно только непосредственно после того как она была замечена, т.к., чаще всего, она возникает, если был удален диапазон (обычно через удаление строк или столбцов) на который ссылалась некая формула.

Пример: в диапазоне B4:B9 находятся числа, которые нам нужно просуммировать. Пишем формулу =СУММ(B4:B9) и получаем их сумму. Если же удалить (предварительно выделив) строки с 4-й по 9-ю, то удалятся все значения в этих строках, а также во всех формулах, в которых этот диапазон был использован полностью (именно с 4-й по 9-ю строку) появится ошибка #ССЫЛКА!. То есть, удалив строки — получим вместо СУММ(B4:B9) уже =СУММ(#ССЫЛКА!)

Соответственно, исправить можно только сразу. Если мы видим, что в каких-то ячейках

появилось значение ошибки #ССЫЛКА! сразу же отменяем удаление строк (или столбцов).

Исправить эту ошибку через какое-то время намного сложнее, так как уже будет непонятно на какие ячейки ссылалась формула.

В некоторых случаях исправить эту ошибку невозможно даже сразу обнаружив ее. Если удалить лист, то также возникнет эта ошибка, только рядом будет еще идти адрес (ячейки или диапазона). Пример: =#ССЫЛКА!A2. Однако, так как удаление листа невозможно отменить, то, соответственно, исправить эту ошибку тоже не получится. (как вариант, можно закрыть файл без сохранения, а потом открыть его — тогда удаленный лист еще будет на своем месте и ошибка #ССЫЛКА! просто не возникнет)

Также ошибка #ССЫЛКА! может возникать, если мы пытаемся сослаться на ячейки, которых нет на листе Excel.

результат работы этой формулы — #ССЫЛКА! так как ячейки выше A1 в Excel не существует, а эта формула, как раз пытается сгенерировать ссылку на ячейку выше A1.

Исправление ошибки #REF! #BUSY!

Ошибка #ССЫЛКА! указывает на то, что формула ссылается на недопустимую ячейку. Чаще всего это происходит потому, что формула ссылается на ячейки, которые были удалены или заменены другими данными.

Пример ошибки #ССЫЛКА! из-за удаления столбца

В следующем примере в столбце E используется формула =СУММ(B2;C2;D2).

Формула, использующая явные ссылки на ячейки, например =СУММ(B2;C2;D2), может привести к #REF! при удалении столбца.

Если удалить столбец B, C или D, это приведет к #REF! ошибку «#ВЫЧИС!». В этом случае удалим столбец C (Продажи 2007), а в формуле отсчитываем формулу =СУММ(B2;#REF!;C2). При использовании явных ссылок на ячейки ,таких как эта (при ссылке на каждую ячейку по отдельности, разделенной запятой) и удалении строки или столбца, на которые ссылается ссылка, Excel не может устранить эту проблему, поэтому она возвращает #REF! ошибку «#ВЫЧИС!». Это главная причина, по которой использование явных ссылок на ячейки в функциях не рекомендуется.

Пример ошибки #ССЫЛКА! из-за удаления столбца.

Если вы случайно удалили строки или столбцы, вы можете немедленно нажать кнопку «Отменить» на панели быстрого доступа (или нажать клавиши CTRL+Z), чтобы восстановить их.

Измените формулу так, чтобы она ссылалась на диапазон, а не на отдельные ячейки, например =СУММ(B2:D2). Теперь можно удалить любой столбец в диапазоне суммирования, и Excel автоматически скорректирует формулу. Чтобы вычислить сумму значений в строках, также можно использовать формулу =СУММ(B2:B5).

Пример функции ВПР с неправильными ссылками на диапазоны

В следующем примере =ВРОТ(A8;A2:D5;5;ЛОЖЬ) возвращает #REF! из-за того, что она ищет значение из столбца 5, но диапазон ссылок — A:D, который составляет всего 4 столбца.

Пример формулы ВЛП с неправильным диапазоном. Формула = ВЛОКУ(A8;A2:D5;5;ЛОЖЬ). Пятого столбца в диапазоне В ПРОСМОТР нет, поэтому 5 вызывает #REF! ошибку "#ВЫЧИС!".

Расширьте диапазон или уменьшите значение столбца для поиска так, чтобы он попадал в указанный диапазон. Формулы =ВПР(A8;A2:E5;5;ЛОЖЬ) будет работать правильно, так же как и формула =ВПР(A8;A2:D5;4;ЛОЖЬ).

Пример функции ИНДЕКС с неправильной ссылкой на строку или столбец

В этом примере формула =ИНДЕКС(B2:E5;5;5) возвращает #REF! поскольку диапазон ИНДЕКС составляет 4 строки и 4 столбца, но формула запрашивает возврат данных в 5-й строке и 5-м столбце.

Пример формулы ИНДЕКС с недопустимой ссылкой на диапазон. Формула имеет вид =ИНДЕКС(B2:E5;5;5), но диапазон содержит всего 4 строки и 4 столбца.

Измените ссылки на строки и столбцы так, чтобы они попадали в диапазон поиска функции ИНДЕКС. Формула =ИНДЕКС(B2:E5;4;4) вернет правильный результат.

Пример ссылки на закрытую книгу с использованием функции ДВССЫЛ

В следующем примере функция INDIRECT пытается создать ссылку на закрытую книгу, что приводит к #REF! ошибку «#ВЫЧИС!».

Пример ошибки #ССЫЛКА! из-за использования функции ДВССЫЛ для ссылки на закрытую книгу.

Откройте книгу, на которые ссылается ссылка. Эта же ошибка будет возникнуть при ссылке на закрытую книгу с динамической функцией массива.

Проблемы с OLE

Если вы использовали ссылку OLE, возвращая #REF! и запустите программу, в которую будет звонить ссылка.

Примечание. OLE — это технология, которая используется для обмена информацией между приложениями.

Проблемы dDE

Если вы использовали динамический Exchange DDE, возвращающий #REF! сначала убедитесь, что вы ссылаетесь на правильный раздел. Если вы по-прежнему получаете #REF! проверьте в центре управления Параметры на внешнее содержимое, как описано в Office документах.

Примечание. Динамические Exchange (DDE)— это протокол, который позволяет обмениваться данными между Windows программами Майкрософт.

Проблемы с макросами

Если макрос вводит на сайте функцию, которая ссылается на ячейку над функцией, а ячейка с этой функцией находится в строке 1, функция возвращает #REF! поскольку над строкой 1 нет ячеек. Проверьте функцию, не ссылается ли аргумент на не допустимую ячейку или диапазон ячеек. Для этого может потребоваться изменить макрос в редакторе Visual Basic (VBE).

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

Как исправить ошибку #ССЫЛКА! в Excel

При работе в Excel можно столкнуться с ошибкой #ССЫЛКА!. Эта ошибка возникает тогда, когда функция ссылается на ячейку, которой не существует. В этой статье мы разберем основные способы, как исправить эту ситуацию.

Как исправить ошибку #ССЫЛКА! в Excel

Вариант 1. Исправление формул

Представим такую ситуацию. У нас есть файл с базой данных, где хранятся данные по продажам за январь — февраль (лист в файле назван «БД янв — фев») и файл со сводными данными, который суммирует выручку по месяцам. Мы открыли файл с базой данных, внесли в него данные по продажам за март и внимание(!) переименовали лист в «БД янв — март», после этого открываем файл со сводом и видим там вместо данных по выручке за январь, февраль, что мы делали раньше, ошибку #ССЫЛКА!. Это произошло из-за того, что функция ссылается на данные в листе «БД янв — фев», которого нет, так как мы его переименовали.

Как исправить ошибку #ССЫЛКА! в Excel

Что бы исправить эту ситуацию, закрываем файл со сводом, не сохраняя изменения (!), если вы сохраните изменения — то формулы будут навсегда испорчены и вам придется писать их заново. Далее в файле с базой данных переименовываете лист так, как он назывался ранее, т.е. «БД янв — фев» и снова открываете файл со сводом. Ошибка пропала, функции снова работают. Теперь при открытых двух файлах, вы можете переименовать лист в базе данных и ошибка не появится, так как Excel изменит ссылки в функциях (он умеет это делать только в открытых книгах).

Как исправить ошибку #ССЫЛКА! в Excel

Вариант 2. Функция ЕСЛИОШИБКА

При помощи функции ЕСЛИОШИБКА можно обработать ошибки, которые возникают при написании формул, в том числе ошибку #ССЫЛКА!.

Синтаксис функции ЕСЛИОШИБКА следующий: первым аргументом идет функция, которая может вызвать ошибку, вторым аргументом функционал, который будет вызван, если ошибка произошла.

Как исправить ошибку #ССЫЛКА! в Excel

В данном случае мы оставили напоминание себе о том, что листы, при закрытой книге со сводом переименовывать нельзя. Это позволит быстро сориентироваться в ситуации и исправить формулы, как описано в варианте 1.

Запрет выполнение макроса, если нет числа в ячейке

SergejSor

Дата: Среда, 05.09.2012, 20:46 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Добрый вечер. При помощи добрых людей с данного форума создал файлик учета рабочего времени. При помощи кнопок вводятся значения и время. Как сделать чтобы при нажатии двух кнопок «Приладка» или «Печать тиража», если не стоит кол-во листов в столбце G , макрос с кнопки не выполнялся, то есть ничего не происходило, а лучше вылазило окно предупреждения? И соответственно если есть число, то кнопка работала. Заранее спасибо!

 

Ответить

vikttur

Дата: Среда, 05.09.2012, 22:09 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

[vba]

Code

If G1=»» Then Exit Sub

[/vba]
Вместо Exit Sub можно сообщение — MsgBox

Сообщение отредактировал viktturСреда, 05.09.2012, 22:19

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 22:16 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


это понятно, но задача такова, что если стоит «Приладка» или Печать тиража, то нельзя нажать другие кнопки, пока не поставлена цифра рядом…

 

Ответить

vikttur

Дата: Среда, 05.09.2012, 22:18 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Как попробовать нажать кнопки без Вашего примера?

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 22:28 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Эхх блин … вроде файл прикреплял….

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 22:29 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


размер большой…

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 22:33 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Вот…

К сообщению приложен файл: Test.rar(59.8 Kb)

 

Ответить

vikttur

Дата: Среда, 05.09.2012, 22:40 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Quote (SergejSor)

если стоит «Приладка» или Печать тиража, то нельзя нажать другие кнопки, пока не поставлена цифра рядом…

А теперь по порядку: почему не стоит и где цифры рядом?
Нужно определять последнюю заполненную строку? Если да, то по какому столбцу?
Нужна любая строка? Если да, как ее определять?

Сообщение отредактировал viktturСреда, 05.09.2012, 22:42

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 22:53 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


По порядку… Если нажать какую нибудь кнопку, наверху, то произойдет закрытие предыдущей операции и начало следующей с постановкой текущего времени, и времени сколько эта операция выполнялась. В столбец G проставляются количество листов (например сколько отпечатал), так вот если последней в столбце I стоит «Приладка» или «Печать тиража», то пока не проставлено количество листов в столбец G, (например I4 последний, G4 куда должно быть поставлено кол-во листов), не одна кнопка сверху не должна работать, или выводить сообщение об ошибке. Проще пока не проставлено количество листов, 2 этих операции нельзя было закрыть…

 

Ответить

vikttur

Дата: Среда, 05.09.2012, 23:11 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Такой кусочек кода:
[vba]

Code

Sub verification()
Dim lRws As Long
        With Worksheets(«Лист2»)
            lRws = .Cells(Rows.Count, «I»).End(xlUp).Row
            If .Range(«I» & lRws).Value = «Приладка» Or _
                    .Range(«I» & lRws).Value = «Печать тиража» Then
                If .Range(«G» & lRws).Value = «» Then
                    MsgBox «Таки надо вписать!»
                  —здесь какие-то действия (игнорировать кнопку, уничтожить файл и монитор)—
                End If
            End If
        End With
End Sub

[/vba]
Вызов этого кода прицепить к процедурам выполнения действий по каждой кнопке.

Сообщение отредактировал viktturСреда, 05.09.2012, 23:22

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 23:16 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Спасибо!!! Есть только один нюанс, при нажатии кнопки ОК, кнопка все таки выполняет макрос, чего то я не правильно сделал…
Sub Приладка()

Sub verification()
Dim lRws As Long
With Worksheets(«Лист2»)
lRws = .Cells(Rows.Count, «I»).End(xlUp).Row
If .Range(«I» & lRws).Value = «Приладка» Or _
.Range(«I» & lRws).Value = «Печать тиража» Then
If .Range(«G» & lRws).Value = «» Then
MsgBox «Таки надо вписать!»
—здесь какие-то действия (игнорировать кнопку, уничтожить файл и монитор)—
End If
End If
End With

Range(«R1»).Value = «приладка»
Range(«K2»).Select
ActiveCell.FormulaR1C1 = Now — Date
Range(«K2»).Select
ActiveWorkbook.Save

End Sub

Сообщение отредактировал SergejSorСреда, 05.09.2012, 23:20

 

Ответить

vikttur

Дата: Среда, 05.09.2012, 23:20 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Естественно, после закрытия сообщения процедура продолжает выполняться.
Код подправил (см. сообщение выше)

Оформляйте код тэгами (кнопка-диез (решеточка))

Сообщение отредактировал viktturСреда, 05.09.2012, 23:24

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 23:26 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Не хочет работать…(

[vba]

Code

Sub Приладка()

Sub verification()
Dim lRws As Long
With Worksheets(«Лист2»)
lRws = .Cells(Rows.Count, «I»).End(xlUp).Row
If .Range(«I» & lRws).Value = «Приладка» Or _
.Range(«I» & lRws).Value = «Печать тиража» Then
If .Range(«G» & lRws).Value = «» Then
MsgBox «Таки надо вписать!»

End If
End If
End With

Range(«R1»).Value = «Приладка»
Range(«K2»).Select
ActiveCell.FormulaR1C1 = Now — Date
Range(«K2»).Select
ActiveWorkbook.Save

End Sub

[/vba]

 

Ответить

nerv

Дата: Среда, 05.09.2012, 23:31 |
Сообщение № 14

Группа: Редакторы

Ранг: Обитатель

Сообщений: 431

[vba]

Code

lRws = .Cells(Rows.Count, «I»).End(xlUp).Row

[/vba]
=
[vba]

Code

Set cell = .Cells(.Rows.Count, «I»).End(xlUp)

[/vba]
что позволяет избавиться от лишней порнографии

Проверку лучше вынести в отдельную функцию и назвать ее, например, IsValid().
(если предполагается, что ее код будет расти)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 23:35 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Чего то я запутался… При выполнении макроса он говорит compile error: Expected End Sub

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 23:39 |
Сообщение № 16

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Вот код : [vba]

Code

Sub Приладка()

Sub verification()
Dim cell As Long
With Worksheets(«Лист2»)
Set cell = .Cells(.Rows.Count, «I»).End(xlUp)
If .Range(«I» & cell).Value = «Приладка» Or _
.Range(«I» & cell).Value = «Печать тиража» Then
If .Range(«G» & cell).Value = «» Then
MsgBox «Òàêè íàäî âïèñàòü!»
Exit Sub
End If
End If
End With

Range(«R1»).Value = «приладка»
Range(«K2»).Select
ActiveCell.FormulaR1C1 = Now — Date
Range(«K2»).Select
ActiveWorkbook.Save
Exit Sub
End Sub

[/vba]

 

Ответить

vikttur

Дата: Среда, 05.09.2012, 23:47 |
Сообщение № 17

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Так неправильно.
Или вставлять код без Sub/End Sub в другую процедуру, или вызывать выполнение макроса.

Недостаток первого варианта: к коду каждой кнопки нужно добавлять одинаковый фрагмент.
Недостаток второго: нужно как-то передать в вызывающую процедуру сигнал о том, что данные не заполнены.
Можно в общем модуле, перед макросами задать переменную:
[vba]

[/vba]

В коде проверки добавить пару строк после вызова сообщения:
[vba]

Code

MsgBox «Таки надо вписать!»
verif=1
Exit Sub

[/vba]

В вызывающей процедуре тоже добавить пару строк:
[vba]

Code

Sub Приладка()    
         Call verification
         If verif=1 Then
              verif=0
              Exit Sub
         End If
…………………..

[/vba]

не оптимально, но… как придумалось.

Сообщение отредактировал viktturСреда, 05.09.2012, 23:51

 

Ответить

SergejSor

Дата: Среда, 05.09.2012, 23:53 |
Сообщение № 18

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Чего то я не понимаю… и много.. Если не трудно Как будет выглядеть полный код?

 

Ответить

SergejSor

Дата: Четверг, 06.09.2012, 00:07 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 49


Репутация:

0

±

Замечаний:
0% ±


Вот такой код вроде работает….
[vba]

Code

Sub Приладка()

Dim lRws As Long
With Worksheets(«Лист2»)
lRws = .Cells(Rows.Count, «I»).End(xlUp).Row
If .Range(«I» & lRws).Value = «Приладка» Or _
.Range(«I» & lRws).Value = «Печать тиража» Then
If .Range(«G» & lRws).Value = «» Then
MsgBox «Что надо ниписать»
Exit Sub
End If
End If
End With

Range(«R1»).Value = «Приладка»
Range(«K2»).Select
ActiveCell.FormulaR1C1 = Now — Date
Range(«K2»).Select
ActiveWorkbook.Save
Exit Sub
End Sub

[/vba]

 

Ответить

vikttur

Дата: Четверг, 06.09.2012, 11:44 |
Сообщение № 20

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Так работает, но при таком варианте блок кода нужно вставлять в макрос выполнения каждой команды.

В приложении пример с пользовательской функцией.
Одинаковый код со всех макросов вынес в отдельную процедуру. Так намного компактнее.
Не проверял все значения, вводимые в ячейки (в теме автор пишет «Печать тиража», проверка по «Печать Тиража», «Простой» и «Постой»…)
В макросах вставки фамилий: в ссылках типа Range(«R3»).Value = «Плотников Е» лучше указывать лист, иначе при выполнении макроса при другом активном листе фамилия будет вставлена на этот лист.
Если уж заполнение поручено макросам, нужно запретить ручной ввод данных в столбец I.
Посмотрите варианты оформления сообщений.

Функцию и общий макрос можно было объединить в одну процедуру, но это для меня тренировочное задание, так показалось интереснее. Критические замечания спецов приветствуются.
Правильно ли размещение сообщения в теле UDF? Оно работает… Но ведь назначение функций — выдача определенного результата, а здесь получается промежуточная остановка.

Quote (nerv)

lRws = … заменить на Set cell = …
что позволяет избавиться от лишней порнографии

Так лучше, но не сообразил, как проверить ячейку G, кроме как через Offset.

К сообщению приложен файл: Test.xlsm(36.8 Kb)

Сообщение отредактировал viktturЧетверг, 06.09.2012, 12:03

 

Ответить

danpot3

0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 9

1

Передача ссылки на лист в процедуру

28.03.2016, 18:28. Показов 6502. Ответов 7

Метки нет (Все метки)


Добрый день, нужно передать ссылку на лист в процедуру, делаю так:

Visual Basic
1
2
3
4
5
6
7
Set my_book = Workbooks("книга777.xls").sheet(1)
my_book.activate
FFF ActiveWorkbook.AxtiveSheet 
 
Public Sub FFF (ByRef sheet_name as WorkSheet)
    sheet_name.cells(1,1)=100
End Sub

Пишет ошибку 1004 Application-defined or object-defined error

Если напрямую подставлять в процедуру FFF ссылку на my_book, то выдает byref method …. что-то там не поддерживает. Где я не прав? Спасибо за помощь!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Shersh

Заблокирован

28.03.2016, 18:36

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Всё работает, если не в блокноте программы писать —

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub mmm()
'Set my_book = Workbooks("книга777.xls").Sheet(1)
Set my_book =Workbooks("книга777.xls").SheetS(1)
my_book.Activate
'FFF ActiveWorkbook.aXtiveSheet
FFF ActiveWorkbook.aCtiveSheet
 
End Sub
 
Public Sub FFF(ByRef sheet_name As Worksheet)
    sheet_name.Cells(1, 1) = 100
End Sub



0



1329 / 303 / 71

Регистрация: 13.11.2008

Сообщений: 628

28.03.2016, 18:38

3

AxtiveSheet — нет такого.
Есть ActiveSheet.
А остальное должно работать.



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 9

28.03.2016, 18:45

 [ТС]

4

Ребята, пишу «в блокноте», т.к. из дома), а макрос на работе. Естественно все правильно было написано, программа запустилась, но дебагер выдает ошибку на строчке sheet_name.Cells(1, 1) = 100



0



Shersh

Заблокирован

28.03.2016, 18:52

5

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



0



1329 / 303 / 71

Регистрация: 13.11.2008

Сообщений: 628

28.03.2016, 18:57

6

Цитата
Сообщение от danpot3
Посмотреть сообщение

Естественно все правильно было написано

если бы было именно так — то все бы работало.
Это тоже правильно?
Set my_book = Workbooks(«книга777.xls»).sheet(1)

Ошибка 1004 обычно означает отсутствие объекта. Поэтому если уж клянетесь, что синтаксис верный — указывайте теперь на какой строке эта ошибка. Может книга «книга777.xls» не открыта? Или опечатка в имени именно книги?



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 9

28.03.2016, 19:04

 [ТС]

7

завтра пришлю, а если напрямую my_book подставить в процедуру тоже должно работать?



0



The_Prist

1329 / 303 / 71

Регистрация: 13.11.2008

Сообщений: 628

28.03.2016, 19:35

8

Вы для начала определитесь что внутри процедуры делать будете. А потом уже и надо решать, что передавать.
Если аргумент процедуры объявлен как Worksheet, то и передавать надо объект Worksheet. Чтобы передать книгу надо будет записывать примерно так:

Visual Basic
1
2
3
4
5
6
7
Sub ttt()
Set my_book = Workbooks("книга777.xls")
FFF my_book
End Sub
Public Sub FFF(ByRef wb As Workbook)
    wb.Sheets(1).Cells(1, 1).Value = 100
End Sub



0



0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Сталкер аномалия ошибка msvcp140 dll
  • Ссылка для восстановления доступа устарела или содержит ошибку авито что значит