2013-05-31 3 views
4

Как вернуть ссылку на объект Worksheets? Я просматривал различные поисковые запросы Google с результатами nada.VBA: Возвращение ссылки на объекты рабочего листа из функции

Например, у меня есть действующий код. wSheet уже dim'ed:

Public wSheet As Worksheet 
... 
Set wSheet = ActiveWorkbook.Worksheets("ExampleSheet") 
wSheet.Range("A1").Value = "Hello" 

Однако, я хочу, чтобы wSheet теперь называет модуль, который подает его в правильное обращение. Что-то вроде этого:

Public wSheet As Worksheet 
... 
Set wSheet = myModule.get_ExampleSheet 
wSheet.Range("A1").Value = "Hello" 

А затем функцию в модуле MyModule

Function get_ExampleSheet() As Worksheets 
    get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet") 
End Function 

Все Стараюсь дает мне различные ошибки во время выполнения. Есть ли способ заставить это работать?

Спасибо и заранее!

ответ

11

Вы возвращаете неправильный тип объекта в функции.

Function get_ExampleSheet() As Worksheets 
    get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet") 
End Function 

В настоящее время это число ошибок.

Function get_ExampleSheet() As Worksheet 
    Set get_ExampleSheet = ActiveWorkbook.Sheets("Sheet1") 
End Function 

Примечание Я изменил:

  1. типа Вернуться к Worksheet (вы пытаетесь установить переменную, wSheet, который имеет тип Worksheet переменной с Worksheets типа)
  2. Добавлено set ключевое слово
  3. Изменено на .Worksheets по .Sheets, чтобы вернуть конкретный лист, который вас интересует
+0

poy-fect! Спасибо – user1275094

1

Для того, чтобы вернуть объект из функции, вы должны предоставить Set ключевое слово:

Function get_ExampleSheet() As Worksheet 
    Set get_ExampleSheet = ActiveWorkbook.Worksheets("ExampleSheet") 
End Function 
+0

Я пробовал это, но получаю ошибку «несоответствие типа». – user1275094

+0

Проблема заключалась в том, что функция (в вашем вопросе и в моем ответе перед тем, как я ее отредактировала) имела тип «WorksheetS» как возвращаемый тип, который представляет собой коллекцию объектов «Worksheet»! Таким образом, удалите 's', так что возвращается« Worksheet »(и по-прежнему используйте ключевое слово' Set')! –

1
Sub Lookup() 
Dim state As Variant 
Dim PodName As Variant 
Set state = ThisWorkbook.Worksheets("Sheet1").Range("E:E") 
Sheets("Sheet1").Activate 
PodName = WorksheetFunction.VLookup(state, Range("A1:C55"), 2, False) 
ThisWorkbook.Worksheets("Sheet1").Range("F:F") = PodName 
End Sub 

Macro должен остановиться, как только клетка-мишень является пустым

1

http://excelmacromastery.com/Blog/index.php/the-complete-guide-to-worksheets-in-excel-vba/

в обычной части кода

Dim issues_sheet As Worksheet 
    Set issues_sheet = create_working_sheet("Issues") 
    issues_sheet.Range("A1").Value = "bssssbb" 

функция может быть что-то вроде

Function create_working_sheet(sheet_name As String) As Worksheet 


For i = 1 To Worksheets.Count 
    If Worksheets(i).Name = sheet_name Then 
     exists = True 
    End If 
Next i 

If Not exists Then 
    Worksheets.Add.Name = sheet_name 
    'if we want it at the end 
    'Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheet_name 
End If 
Set create_working_sheet = ThisWorkbook.Sheets(sheet_name) 
End Function 
-1

Полный обзор способов установки рабочего листа с помощью VBA можно найти здесь: http://codevba.com/excel/set_worksheet.htm

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259), чтобы включить здесь основные части ответа и предоставить ссылку для справки. – Tunaki

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