Функция Excel VBA не может установить диапазон - PullRequest
0 голосов
/ 06 декабря 2018

Я написал функцию VBA, которая принимает два параметра: первый - строка, а второй - диапазон, указанный на листе как:

=strPack(B1,G3)

В коде эта процедура объявленакак:

Public Function strPack(ByVal strHex As String, ByRef rngCnt As Range) As String
    On Error Goto ErrHandler
    If False Then
ErrHandler:
        MsgBox Err.Description
        Exit Function
    End If
    Dim intCnt As Integer
    intCnt = 0
    '...do something with strHex and increment intCnt whilst we go
    rngCnt.Value = CStr(intCnt)
    'strPack is populated by the body of the function
    strPack = "Hello World"
End Function

Я пробовал .Value, .Value2 и .Text, все приводит к ошибке:

Application-defined or object-defined error

Когда я смотрю в отладчике, и strHex, и rngCntдействительны и правильны.Почему я не могу назначить диапазон и как его исправить?

Обработчик ошибок не проблема, попробуйте его, он отлично работает и является стандартным способом выявления ошибок и отменыФункция при возникновении ошибки.

[Edit] Я только что попробовал следующее:

Public Sub updateCount()
    Worksheets("Sheet1").Range("G3").Value = CStr(intProcessed)
End Sub

intProcessed является глобальным для модуля и является целым числом, результат такой же, точнота же ошибка.

[Edit2] Я хочу удалить этот пост, так как теперь я изменил подход к вызову другой подпрограммы, которая возвращает значение, которое помещается в ячейку.Я не могу удалить это!Спасибо всем за помощь.

1 Ответ

0 голосов
/ 06 декабря 2018

см. Код комментария:

Public Function strPack(ByVal strHex As String, ByVal rngCnt As Range) As String

   Dim lRes     As Long

   On Error GoTo errHandler

     lRes = 1000 '==> Your business logic goes here

     '/ This is the gymnastics you do to update range from an UDF
     Application.Evaluate ("UpdateRange(" & rngCnt.Address & "," & lRes & ")")
     strPack = "SUCCESSFULL"

errHandler:
   If Err.Number <> 0 Then
    strPack = "FAILED"
   End If

End Function

'/ Helper to allow range update from UDF
Private Function UpdateRange(rngDest As Range, val As Variant)
    rngDest.Value = val
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...