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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2009, 09:20   #1
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
Вопрос Надстройка...

Всем Привет!
Написал макрос в книге Excel, затем сохранил как надстройку и макрос перестал работать. Суть следующая: есть листы надстройки на которые мне нужно вносить данные и брать их для анализа. Проблемы начинаются в следующих строках:
Код:
Usheet.Select
или
Код:
ra = Usheet.Range(Cells(1, 1), Cells(R, 1)).Value
Кто может подсказать как работать с листами надстройки и данными содержащимися на них?

Вот моя надстройка:
Справочники Excel 2007.rar
nikolai_P вне форума Ответить с цитированием
Старый 07.05.2009, 09:46   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Нет никакой разницы, работать с листом рабочей книги или с листом надстройки.
При объявлении переменных в макросе надстройки, используйте полные ссылки. Например:
Код:
Dim Usheet As Worksheet
    Set Usheet = Workbooks("MyAddIns.xla").Sheets("Лист1")
В Вашем втором примере ошибки не будет только в том случае, если лист Usheet является активным (а если это лист файла надстройки, то вряд ли он когда-либо активен). Ссылку на лист нужно обязательно повторять при каждом обращении к ячейке. Например:
Код:
With Usheet
    ra = .Range(.Cells(1, 1), .Cells(R, 1)).Value
End With
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 07.05.2009, 10:03   #3
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию Не совсем понял разницы

Не совсем уловил разницу между своим и Вашим вариантами. Так можно писать
Код:
ra = Usheet.Range(.Cells(1, 1), .Cells(R, 1)).Value
или только так
Код:
With Usheet
    ra = .Range(.Cells(1, 1), .Cells(R, 1)).Value
End With
nikolai_P вне форума Ответить с цитированием
Старый 07.05.2009, 10:25   #4
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию

Почему-то в надстройке не сработал Ваш вариант.
Код:
Dim Usheet As Worksheet
    Set Usheet = Workbooks("MyAddIns.xla").Sheets("Лист1")
но сработал такой
Код:
NameSheet = "Тип"
Set Usheet = ThisWorkbook.Sheets(NameSheet)
Еще возник один вопрос:
Можно ли файл надстройки превратить (сохранить) в обычный?
nikolai_P вне форума Ответить с цитированием
Старый 07.05.2009, 10:30   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
ra = Usheet.Range(.Cells(1, 1), .Cells(R, 1)).Value
Это что такое? Точка перед обращением к ячейке означает то, что якобы перед ней вводится то, что прописано в With.
Цитата:
Можно ли файл надстройки превратить (сохранить) в обычный?
Переименуйте из "*.xla" в "*.xls" и всего делов.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 07.05.2009, 10:35   #6
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию

Формат моей надстройки *.xlam (Excel 2007).
Пробовал *.xls, *.xlsx, *.xlsm не получилось!!!
nikolai_P вне форума Ответить с цитированием
Старый 07.05.2009, 10:47   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Ничем не могу помочь. У меня нет Excel 2007.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работаем надстройка xla в 2007 excel (созданная в 2003-м) gysek Microsoft Office Excel 2 19.11.2008 12:06
Надстройка PLEX для Microsoft Excel PLEX for free Microsoft Office Excel 0 28.05.2008 17:19
Надстройка над Си emperio Win Api 2 26.04.2008 12:58