2014-01-06 4 views
2

Я пытаюсь вызвать рабочий лист первенствовать на функцию, однако я получаю сообщение об ошибке 438 "OBJECT DOESN'T SUPPORT THIS PROPERTY OR METHOD"Как ссылаться на Excel Worksheet в функции

ниже код делает вызов applyStyle1

Dim wkb7 As Excel.Workbook 
Set wkb7 = Excel.Application.Workbooks.Open(strDir&"\NEXTDAY.xls") 
wkb7.ActiveSheet.Cells.Select 
Selection.Copy 
Set wks7 = wkb.Sheets.Add 

applyStyle1 (wks7) 

The функция:

Function applyStyle1(wksContainer As Excel.Worksheet) 
    With wksContainer 
       ...... 
    End With 
End Function 

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

ответ

5

Первая проблема

Линия strDir&"\NEXTDAY.xls" должна быть strDir & "\NEXTDAY.xls". Должно быть место до и после знака &.

Вторая проблема

Вы объявили wkb7 но используют wkb в Set wks7 = wkb.Sheets.Add. Я бы рекомендовал использовать Option Explicit

Третья проблема

Измените строку, как предложено @MarkHone Set wks7 = wkb.Sheets.Add к

Set wks7 = wkb7.Worksheets.Add 

Четвертая проблема (Ваша актуальная проблема!)

applyStyle1 - это функция, которая должна что-то вернуть. Если вы ничего не возвращаете, используйте вместо этого Sub.

Например

Sub Sample() 
    Dim wkb7 As Excel.Workbook 
    Dim wks7 As Excel.Worksheet 

    Set wkb7 = Excel.Application.Workbooks.Open(strDir & "\NEXTDAY.xls") 
    wkb7.ActiveSheet.Cells.Copy 

    Set wks7 = wkb7.Worksheets.Add 

    applyStyle1 wks7 
End Sub 

Sub applyStyle1(wksContainer As Excel.Worksheet) 
    With wksContainer 

    End With 
End Sub 
+0

Хороший и подробный ответ, и я согласен Вариант Явный рекомендуется. Я не уверен, почему вы разделили 5-ю строку на два утверждения? – MarkHone

+0

@MarkHone: Извините, я что-то тестировал и забыл обновить это.Я упомянул правильный в четвертой проблеме, хотя :) –

+0

О да, так вы и сделали; никаких жалоб тогда :-) – MarkHone

3

Пожалуйста, попробуйте изменить 5-й линии от:

Set wks7 = wkb.Sheets.Add 

к:

Set wks7 = wkb.Worksheets.Add 

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

+0

Спасибо за помощь @MarkHone – KSM

+0

Нет проблем; Добро пожаловать в @KSM! – MarkHone

Смежные вопросы