массивы vba - несоответствие типов: ожидается массив или пользовательский тип

У меня проблема с передачей массива в подпрограмму (несоответствие типа получения: ожидается массив или пользовательский тип). Я работал со структурами массивов на других языках, и мне, должно быть, что-то не хватает здесь, в vba, так как я не могу заставить это работать. Я разместил фрагменты кода ниже для комментариев:

Private Sub x()
    Dim ssn_vals(1 To 9) As String
    Dim ssn_cells(1 To 9) As String

    'define employee object
     Dim emp As Employee

     'create new employee foreach row
      Set emp = New Employee

    'ssn values
        ssn_vals(1) = cell.Offset(0, 60)
        ssn_vals(2) = cell.Offset(0, 61)
        ssn_vals(3) = cell.Offset(0, 62)
        ssn_vals(4) = cell.Offset(0, 63)
        ssn_vals(5) = cell.Offset(0, 64)
        ssn_vals(6) = cell.Offset(0, 65)
        ssn_vals(7) = cell.Offset(0, 66)
        ssn_vals(8) = cell.Offset(0, 67)
        ssn_vals(9) = cell.Offset(0, 68)



        'ssn cell addresses
        ssn_cells(1) = cell.Offset(0, 60).Address
        ssn_cells(2) = cell.Offset(0, 61).Address
        ssn_cells(3) = cell.Offset(0, 62).Address
        ssn_cells(4) = cell.Offset(0, 63).Address
        ssn_cells(5) = cell.Offset(0, 64).Address
        ssn_cells(6) = cell.Offset(0, 65).Address
        ssn_cells(7) = cell.Offset(0, 66).Address
        ssn_cells(8) = cell.Offset(0, 67).Address
        ssn_cells(9) = cell.Offset(0, 68).Address

        emp.setSSN = ssn_vals
        emp.setSSN_cells = ssn_cells

        'validate ssn
        emp.validateSSN (ssn_vals)

end sub

у меня есть подчиненный, определенный внутри класса сотрудников

'validate SSN
Public Sub validateSSN(ssn() As Variant)
    Dim i As Integer
    'Dim orig_array(1 To 9) As Variant
    Dim multipler_array(1 To 9) As Integer
    Dim summation_array(1 To 9) As Integer


    multipler_array(1) = 1
    multipler_array(2) = 2
    multipler_array(3) = 1
    multipler_array(4) = 2
    multipler_array(5) = 1
    multipler_array(6) = 2
    multipler_array(7) = 1
    multipler_array(8) = 2
    multipler_array(9) = 1



    If Me.getSinOrT = "sin" Then
        For i = LBound(ssn(i)) To UBound(ssn(i))
           summation_array(i) = (Int(ssn(i)) * Int(multipler_array(i)))
           Debug.Print summation_array(i)
    Next i

    Else


     End If

 End Sub

Любые предложения о том, как исправить эту тривиальную вещь, будут очень признательны. Заранее спасибо, Михаил


person Michael    schedule 19.08.2015    source источник
comment
Это должно быть emp.validateSSN ssn_vals без круглых скобок, и подпрограмма должна принимать массив String, а не Variant. Поскольку вы уже установили SSN как свойство сотрудника, я не уверен, почему вам нужно снова передать массив для его проверки.   -  person Rory    schedule 19.08.2015


Ответы (2)


Вы используете ячейку в качестве диапазона, но не затемняете ее или задаете ее. Могут быть другие проблемы

person Gary's Student    schedule 19.08.2015

спасибо за полезные комментарии - это заставило меня понять, что мне не нужно снова передавать массив ssn объекту сотрудника, поскольку его данные уже были сохранены внутри сотрудника. Чтобы исправить проблему, я создал метод внутри Employee, который проверял SIN на основе существующего SIN сотрудника. Огромное спасибо...

person Michael    schedule 20.08.2015