2015-08-14 3 views
2

Я был с этим со вчерашнего дня, но, похоже, не нашел своего пути.Excel VBA - Передача правильных аргументов в процедуры

В приведенной ниже процедуре я создаю объект. dropdownRange для передачи в качестве аргумента в процедуру внизу. Однако оба аргумента выводятся пустым в «ближайшее окно», когда я отлаживаю их.

Я не получаю ошибку на линии -> С curCell.Validation, однако, я получаю следующее сообщение об ошибке на следующей строке -> .Add Тип ...

Ошибка: 1004: Application- или объекта определяется ошибка

Dim mainTab As Object 'Tab 'main' 
    Dim tranTypeSize As Integer 'Length of entries for transaction type 
    Dim dropdownRange As Range 'Dynamic range for dropdown 
    Set mainTab = Sheets("Main") 

     tranTypeSize = Sheets("Misc").Cells(Rows.Count, 1).End(xlUp).Row 
     Set dropdownRange = Sheets("Misc").Range("A1:A" & tranTypeSize) ' <- problem 

    Call createDropdownList(mainTab.Range("G8"), dropdownRange) '<- arguments passed are wrong obj? 
    ---------------------------------------------------------------- 
Sub createDropdownList(ByRef curCell As Range, _ 
    ByVal targetList As Range) 

    With curCell.Validation ' <- I think error, though it passes this line 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:=targetList ' <- error 

***** UPDATE: ***** в дополнение к @ ExcelDeveloper свой комментарий, я пытаюсь следующие, я думаю, что близко, но до сих пор не работает (ошибка: ошибка приложения или объекта) Sub createDropdownList (ByRef curCell As Range, _ ByVal TargetList Как Range)

Dim targetAddress As String 
targetAddress = "Misc!" & targetList.Address 
        Debug.Print targetAddress 
With curCell.Validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:=targetAddress 
+0

вы пытались использовать записи макросов, чтобы проверить код для метода 'validaton.add' – psychicebola

+1

Да, я записал, затем скопировал и отредактировал 'targetList' в качестве своего диапазона – Kayote

+0

. Я нашел аналогичную проблему в stackoverflow, может быть, это тоже может вам помочь: http://stackoverflow.com/questions/6786540/vba-excel-codecannot-give-named-range-to-formula1-in-validation – psychicebola

ответ

1

Formula1 свойство должно быть адрес диапазона вы ссылаетесь, которому предшествует знак равенства:

Formula1 := "=" & targetList.Address 
1

Я полагаю, что формула1 требует одной ссылки, что может привести к диапазону, или разделенный запятыми список (согласно MSDN). Но он не может обрабатывать непосредственно заданный диапазон, как вы это делали.

give named range to formula1 in validation.add

+0

Спасибо, Psychicebola, я пытаюсь сделать это через маршрут динамического диапазона. Если это не работает, я перейду к именованным диапазонам. – Kayote

+0

пожалуйста, не забудьте поставить вопрос как ответ (зеленый тик), если он сработает, в противном случае дайте мне знать, и я отредактирую свой ответ. – psychicebola