2015-01-22 4 views
0

Следующий код создает время компиляции сообщение об ошибке "Несоответствие типов":Несоответствие типа с использованием ByRef

Private Sub Example 
    JustAdd(Sheet1.ListObjects("Table6")) 
End Sub 

Public Sub JustAdd(ByRef tableN As ListObject) 
    tableN.ListRows.Add 
End Sub 

Также попробовал:

Private Sub Example 
    Dim tmp As ListObject 
    Set tmp = Sheet1.ListObjects("Table6") 
    JustAdd(tmp) 
End Sub 

Public Sub JustAdd(ByRef tableN As ListObject) 
    tableN.ListRows.Add 
End Sub 

Также:

Private Sub Example 
    Dim tmp As ListObject 
    tmp = Sheet1.ListObjects("Table6") 
    JustAdd(tmp) 
End Sub 

Public Sub JustAdd(ByRef tableN As ListObject) 
    tableN.ListRows.Add 
End Sub 

Просто нужно быстро подталкивать в правильном направлении, чтобы получить эту подпрограмму JustAdd

+0

возможно дубликат [Передача массива в качестве аргумента к классу сеттер с помощью VB 6.0] (http://stackoverflow.com/ вопросы/19538094/pass-array-as-argument-to-a-class-setter-using-vb-6-0) – GSerg

+0

Стоит прочитать: http://www.cpearson.com/excel/byrefbyval.aspx –

ответ

0

Я попробовал только ваш первый пример, но я считаю, что любой из них должен работать с этой небольшой модификацией.

Call JustAdd(Sheet1.ListObjects("Table6")) 

EDIT¹: ОК, может быть, не третий один.

EDIT²: Более подробная информация по адресу: Calling Sub and Function Procedures (Применимо к: Office 2013. | VBA)

+4

Don Вы думаете, что было бы лучше сказать OP опустить скобки, а не использовать устаревшее ключевое слово из древней версии Excel Macros? (Это даже не VBA .....) Возможно, какое-то объяснение о том, что происходит, и * почему * это работает? – RubberDuck

+1

@ RubberDuck - Хороший совет. Я добавил ссылку на текущую документацию MSDN по этому вопросу. – Jeeped

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