VBA UDF работает при тестировании, но не при использовании в Excel

Я уже отчаялся!

Я построил функцию ниже. Cday относится к ячейке в Excel с датой, например 01/01/2017.

он сопоставляет и находит строку и столбец набора данных и вводит их в массив (dpricebase), который я заранее заполнил данными через подпрограмму

Я написал небольшой подпункт, который вызывает это, и он работает. Я пытаюсь использовать его прямо в Excel, но это не так!

Пожалуйста, помогите!

благодарю вас!

Function findprice (cday, commno)

cday = DateValue(cday)

price1 = 0

If cday > lastday Then ‘last day is a date xx/xx/xxxx at a cell in the excel
    price1 = 0
    GoTo result
End If

Windows("m.xls").Activate
Sheets("Daily").Activate

‘find the matching row
For x = 5 To lastrow
    If DateValue(Cells(x, 2)) = cday Then
        datarow = Cells(x, 2).Row - 5
        GoTo Continue1
    End If
Next x

MsgBox "No data for " & cday & " for " & commno

Continue1:

'find the matching column 
For y = 3 To totalcomm
    If Cells(2, y) = commno Then
        datacol = Cells(2, y).Column - 3
        GoTo Continue2
    End If
Next y

MsgBox "No Daily data for No." & commno

Continue2:

price1 = dpricebase(datarow, datacol)
GoTo result

result:
findprice = price1 
End Function

person VassilisR    schedule 05.01.2017    source источник
comment
Я написал тестовый Sub:   -  person VassilisR    schedule 05.01.2017
comment
Sub Tester () cday = 02/01/2017 commno = 4 Отладка. Распечатать findprice (cday, commno) Конец подписки   -  person VassilisR    schedule 05.01.2017
comment
вы не можете ссылаться на объекты и пытаться изменить их состояния / свойства при вызове функции из ячейки Excel. Поэтому вам нужно удалить такие строки, как Windows....Activate, Sheets...Activate, а также удалить msgbox... и т. Д.   -  person Kazimierz Jawor    schedule 05.01.2017
comment
вам нужно передать lastrow и totalcomm, чтобы этот код функционировал как UDF   -  person Shai Rado    schedule 05.01.2017


Ответы (1)


Есть несколько проблем с вашим UDF:

  • lastday lastrow и totalcomm нигде не определены
  • Вы не можете использовать sheet.activate или window.activate внутри UDF
  • вы должны использовать Option Explicit
person Charles Williams    schedule 05.01.2017