2013-09-18 4 views
0

у меня есть процедура:процедура вызова с аргументами

Sub a_fillValueByCells(sheet As Worksheet, v As String) 
    Set cellNames = produceCellNames(Row, cs) 
    For Each cell In cellNames 
     MsgBox cell 
    Next 
End Sub 

И я хочу, чтобы назвать это:

Set localSheet = ActiveSheet 
Dim v As String 
Set v = dataSheet.Range(cellName("B", Row))  
a_fillValueByCells (localSheet, v) 

Но я получаю ошибку на последней строке времени edittion:

Ожидаемые: =

Если я удалю последний аргумент:

a_fillValueByCells (localSheet) 

Почему я получаю сообщение об ошибке и как его исправить? Благодаря

+0

Я думаю, что ваши имена методов сбивают с толку. Подумайте об изменении 'a_fillValueByCells' в' FillValueByCells'. Кроме того, подчеркивание '_' делает его похожим на этот метод - обработчик события для события« fillValueByCells »объекта' WithEvents' 'a', объявленного на уровне экземпляра; это соглашение VB6/VBA использует для обработки обработчика событий. –

ответ

1

Я решить мою проблему, изменив:

a_fillValueByCells (localSheet, v) 

в

a_fillValueByCells sheet:=localSheet, v:=v 

Update

я нашел еще одно решение - просто удалите скобки:

a_fillValueByCells localSheet, v 
+0

Если вы хотите сохранить скобку, вы также можете добавить 'Call' перед вызовом метода, но это архаично и довольно уродливо. Kudos (+1) для того, чтобы найти все самостоятельно :) –

0

Изменить Set v = dataSheet.Range(cellName("B", Row)) в

v = dataSheet.Range(cellName("B", Row)).Text

С вами возвращает диапазон вместо строки.

+0

Я изменил его, но ошибка остается. – demas

+0

извините, строки не нужны ... 'v = dataSheet.Range (cellName (" B ", Row)). Текст должен делать. – PatricK

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