【问题标题】:arrays vba - type mismatch: array or user-defined type expected数组 vba - 类型不匹配:需要数组或用户定义的类型
【发布时间】:2015-08-19 14:49:18
【问题描述】:

我在将数组传递给子时遇到问题(接收类型不匹配:预期为数组或用户定义类型)。我曾使用其他语言的数组结构,我必须在 vba 中遗漏一些东西,因为我无法让它工作。我在下面发布了代码 sn-ps 以供评论:

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

任何关于如何解决这个小问题的建议将不胜感激。 提前致谢, 迈克尔

【问题讨论】:

  • 应该是不带括号的emp.validateSSN ssn_vals,并且例程需要采用String数组,而不是Variant。由于您已经将 SSN 设置为员工的属性,我不确定您为什么需要再次传递数组来验证它。

标签: vba excel


【解决方案1】:

您将 cell 用作 Range,但尚未将其变暗设置它。可能还有其他问题

【讨论】:

    【解决方案2】:

    感谢您提供有用的 cmets - 这让我意识到我不必再次将 ssn 数组传递给员工对象,因为它的数据已经保存在 Employee 中。为了更正问题,我在 Employee 中创建了一个方法,该方法根据 Employee 的现有 SIN 验证 SIN。非常感谢...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多