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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 11:20   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Ошибка пр обращении к макросу

Похоже опять налетел на проблему типизированости данных. :(
Ни как не могу понять почему не вот эта конструкция выдает ошибку...
Код:
Sub Постобработка(Лист As Worksheets)
    'Постобработка.
    With Лист
        'Приводим ссылки на переменные в рабочее положение путем замены на листе "^п" на "=п".
        Cells.Replace What:="^п", Replacement:="=п", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        With .PageSetup                            'Задаем отступы листа.
            .LeftMargin = Application.InchesToPoints(0.78740157480315)
            .RightMargin = Application.InchesToPoints(0.393700787401575)
            .TopMargin = Application.InchesToPoints(0.78740157480315)
            .BottomMargin = Application.InchesToPoints(0.78740157480315)
            .HeaderMargin = Application.InchesToPoints(0.511811023622047)
            .FooterMargin = Application.InchesToPoints(0.511811023622047)
        End With
    End With
    Участки.Activate                             'Делаем актиным лист Участки.
    Application.ScreenUpdating = True            'Включаем отображение изменений на экран.
End Sub

Sub test()
    tab_name = "Test"
    
    Application.ScreenUpdating = False            'Отключаем отображение текущих изменений на экран.
    Set Книга = Worksheets.Add                    'Создаем новый лист.
    Книга.Name = tab_name                         'Присваиваем ему имя.
    ActiveSheet.Move After:=Sheets(Sheets.Count)  'Перемещаем его в конец.
    Книга.Tab.ColorIndex = -4142                  'Обнуляем цвет ярлычка.
    Книга.Cells.ColumnWidth = 2                   'Ширина всех столбцов = 2.

'Что-то делаем
    
    Постобработка (Книга)
    
End Sub
Вложения
Тип файла: rar Книга2.rar (8.0 Кб, 11 просмотров)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 04.04.2009, 11:48   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

предложу варианты:
1)
Sub Постобработка(Лист As Worksheets) заменить на Sub Постобработка(Лист As Worksheet) Worksheets - это коллекция а не лист. в процедуре test обьявить переменную Книга того же типа что и Лист - все покатит

2)
Sub Постобработка(Лист As Worksheets) заменить на Sub Постобработка(Лист)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.04.2009, 12:26   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуй так:
Код:
Sub Постобработка(Лист As Worksheet)    'Постобработка.
    With Лист
        .Cells.ColumnWidth = 2                   'Ширина всех столбцов = 2.
        'Приводим ссылки на переменные в рабочее положение путем замены на листе "^п" на "=п".
        .Cells.Replace What:="^п", Replacement:="=п", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        With .PageSetup                            'Задаем отступы листа.
            .LeftMargin = Application.InchesToPoints(0.78740157480315)
            .RightMargin = Application.InchesToPoints(0.393700787401575)
            .TopMargin = Application.InchesToPoints(0.78740157480315)
            .BottomMargin = Application.InchesToPoints(0.78740157480315)
            .HeaderMargin = Application.InchesToPoints(0.511811023622047)
            .FooterMargin = Application.InchesToPoints(0.511811023622047)
        End With
    End With
End Sub

Sub test()
    Application.ScreenUpdating = False            'Отключаем отображение текущих изменений на экран.
    tab_name = "Test": Dim Книга As Worksheet
    Set Книга = Worksheets.Add(, Sheets(Sheets.Count))    'Создаем новый лист и Перемещаем его в конец.
    Книга.Name = tab_name                          'Присваиваем ему имя.

    'Что-то делаем
    Постобработка Книга
    Участки.Activate                             'Делаем актиным лист Участки.
End Sub
PS: Application.ScreenUpdating = True в конце макроса ставить необязательно (в отличии от Application.DisplayAlerts и т.п.)

Последний раз редактировалось EducatedFool; 04.04.2009 в 13:48.
EducatedFool вне форума Ответить с цитированием
Старый 04.04.2009, 14:38   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Попробуй так:
Код:
Sub Постобработка(Лист As Worksheet)    'Постобработка.
......  
End Sub
PS: Application.ScreenUpdating = True в конце макроса ставить необязательно (в отличии от Application.DisplayAlerts и т.п.)
Спасибо! Все работает.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь по макросу VBA corematt Microsoft Office Word 14 27.02.2009 11:03
Ошибка при обращении к интернет странице Alter Свободное общение 2 06.08.2008 22:25
Пользовательская форма к макросу Flangini Microsoft Office Excel 6 23.04.2008 13:39
Связанные таблицы - проблема при обращении к полю БД nataly_ukr БД в Delphi 7 13.11.2007 10:47
Пропадает картинка на форме при обращении к цвету dimfil Общие вопросы Delphi 1 10.11.2007 11:58