Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2011, 06:30   #1
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 370
По умолчанию Добавить макросом Module и Function

Здравствуйте, уважаемые программисты. Скажите пожалуйста как макросом добавить Module и в него записать Function
Код:
Function ВМЕОШ(Формула)

'*******************************************************
' Функция выдаёт вместо ошибки 0, и значение аргумента если ошибки нет
'*******************************************************

If IsError(Формула) = True Then
   ВМЕОШ = 0
Else
   ВМЕОШ = Формула
End If

End Function

Последний раз редактировалось agregator; 07.02.2011 в 06:37.
agregator вне форума Ответить с цитированием
Старый 07.02.2011, 08:30   #2
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 370
По умолчанию

Проблема такая. Надо, чтобы при перемещении/скопировании Листа1 в Новую книгу, в нём продолжала работать пользовательская (собственная) функция (Записанная в Модуле1 исходной Книги). Подскажите, как это можно сделать, чтобы не писало #ИМЯ?.
P.S. Сохранить пользовательскую функцию в Надстройке или в PERSONAL.XLS не подходит.
Вложения
Тип файла: zip Вопрос.zip (10.6 Кб, 7 просмотров)

Последний раз редактировалось agregator; 07.02.2011 в 08:40.
agregator вне форума Ответить с цитированием
Старый 07.02.2011, 09:26   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Не проще ли вместо пользовательской функции использовать встроенные возможности Excel?

Код:
  Ячейка: B1      Формула  (стиль A1):   =ЕСЛИ(ЕОШ(A1);0;A1)
                  Формула  (стиль R1C1): =ЕСЛИ(ЕОШ(RC[-1]);0;RC[-1])
В этом случае вместо ошибок будут выводиться нули - и никаких макросов не нужно.
EducatedFool вне форума Ответить с цитированием
Старый 07.02.2011, 09:37   #4
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 370
По умолчанию

В реальном документе слишком длинные формулы (=ЕСЛИ(ЕОШ(ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ. ТАБЛИЦЫ("Сумма по полю Время заказчика";Сводная!$A$5;"Цех";$A$6; "Вид топлива";$B23;"Месяц затрат";Данные!$C$3));0;ПОЛУЧИТЬ.ДА ННЫЕ.СВОДНОЙ.ТАБЛИЦЫ("Сумма по полю Время заказчика";Сводная!$A$5;"Цех";$A$6; "Вид топлива";$B23;"Месяц затрат";Данные!$C$3))-G11-G15-G19-ЕСЛИ(ЕОШ(ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТА БЛИЦЫ("Сумма по полю Время заказчика";'Сводная АРУ'!$A$6;"Вид топлива";"45";"Месяц затрат";Данные!$C$3;"№ справ.";2));0;ПОЛУЧИТЬ.ДАННЫЕ.СВОДН ОЙ.ТАБЛИЦЫ("Сумма по полю Время заказчика";'Сводная АРУ'!$A$6;"Вид топлива";"45";"Месяц затрат";Данные!$C$3;"№ справ.";2))-ЕСЛИ(ЕОШ(ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТА БЛИЦЫ("Сумма по полю Время заказчика";'Сводная АРУ'!$A$6;"Гар. №";1119;"Вид топлива";"45";"Месяц затрат";Данные!$C$3;"№ справ.";2));0;ПОЛУЧИТЬ.ДАННЫЕ.СВОДН ОЙ.ТАБЛИЦЫ("Сумма по полю Время заказчика";'Сводная АРУ'!$A$6;"Гар. №";1119;"Вид топлива";"45";"Месяц затрат";Данные!$C$3;"№ справ.";2))).
И много формул уже сделал, долго переделывать.
EducatedFool, а как я думал, это сложно?
agregator вне форума Ответить с цитированием
Старый 07.02.2011, 09:48   #5
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Посмотрите здесь
Как экспортировать все модули текущей книги
Экспортируйте в новую книгу Ваш модуль с функцией
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 07.02.2011, 09:51   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Можно упростить формулы (с использованием дополнительного столбца)
или ещё что-нибудь придумать

Покажите свой файл - авось, формулисты что-нибудь да изобретут...
EducatedFool вне форума Ответить с цитированием
Старый 07.02.2011, 10:10   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Есть еще такой вот, рабочий пример от John Walkenbach
Замена модуля VBA в книге, при небольшой доработке, вполне может подойти для Вашей задачи
Вложения
Тип файла: zip replace module.zip (16.9 Кб, 13 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 07.02.2011, 12:22   #8
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 370
По умолчанию

VictorM, не могу Экспортировать Module1 из текущей книги
Код:
Sub ReplaceModule()
'   Экспорт Module1 из текущей книги
    Filename = ThisWorkbook.Path & "\tempmodxxx.bas"
    ThisWorkbook.VBProject.VBComponents("Module1") _
      .Export Filename
      
End Sub
Пишет Debug на
Код:
ThisWorkbook.VBProject.VBComponents("Module1") _
      .Export Filename
Посоветуйте, что можно сделать.
agregator вне форума Ответить с цитированием
Старый 07.02.2011, 12:27   #9
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

А Вы все разрешения установили?
Цитата:
перед выполнением приведённых примеров, необходимо предварительно в меню Сервис выбрать пункт Макросы и команду Безопасность. Затем выделить закладку Надёжные источники и установить "флажок" Доверять доступ к Visual Basic Project. В противном случае, при попытке доступа к VBProject, Вы получите ошибку.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 07.02.2011, 12:31   #10
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 370
По умолчанию

VictorM, спасибо. Заработало!
agregator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
открытие нескольких книг одним макросом и закрытие книг другим макросом kursant95 Microsoft Office Excel 6 27.01.2011 16:54
Возможно ли заблокировать Module??? sasha_prof Microsoft Office Excel 5 09.09.2010 13:15
Добавить код макросом. agregator Microsoft Office Excel 4 02.12.2009 10:43
Remote Data Module Still_Learn БД в Delphi 0 30.05.2007 13:23