【问题标题】:VBA userform: application-defined or object-defined errorVBA 用户窗体:应用程序定义或对象定义的错误
【发布时间】:2019-05-14 13:13:32
【问题描述】:

我将在 VBA 模块中运行良好的代码复制到了用户窗体,因为我需要组合用户窗体中定义的一些操作。现在我在执行以下部分时卡住了,出现错误消息“应用程序定义或对象定义错误”

Sub test()
    Dim Myworkbook As workbook
    Dim Myid As Variant

    Set Myworkbook = ThisWorkbook

    Myid=1

    Myref=FinRef(Myworkbook, "Ref", Myid)
End Sub

    Function FinRef(myfile As Workbook, InputSheet As String, Ref_ID As Variant) 

        Dim I, k, LinkFrom, Description As Integer
        Dim Linkdescrip As String

        FinRef = ""

        LinkFrom = 1           
        Description = 8             
        Linkdescrip = 7             
        For I = 2 To 3000
            k = myfile.Sheets(InputSheet).Cells(I, LinkFrom)

            If k = Ref_ID Then
                FinRef = FinRef & myfile.Sheets(InputSheet).Cells(I, Linkdescrip) & myfile.Sheets(InputSheet).Cells(I, Description)
            End If
        Next I

    End Function

虽然有很多人遇到过同样的问题,但我找不到适合我的解决方案。有什么建议吗?

非常感谢!

【问题讨论】:

  • 你在哪一行得到错误?
  • 前5行是什么程序?它们在程序之外是无效的。
  • @Dave 这是行' FinRef = FinRef & myfile.Sheets(InputSheet).Cells(I, Linkdescrip) & myfile.Sheets(InputSheet).Cells(I, Description)'
  • @DarrenBartrup-Cook 前 5 行定义在子过程中,函数定义在子过程之外。
  • Dim I, k, LinkFrom, Description As Integer 声明了 3 个变体并且只有 1 个整数。我怀疑那是你的意图。另外,请发布minimal reproducible example,人们可以实际运行它以查看您的确切错误。您的问题与实际问题之间似乎存在脱节。

标签: excel vba runtime-error userform worksheet


【解决方案1】:

正如约翰所说 - 您发布的代码不会产生您报告的错误。

我认为您的代码的问题是:
Dim Linkdescrip As String 应该是 Dim Linkdescrip As Long

变成工作代码:
?thisworkbook.Worksheets("Ref").cells(2,"7") 返回您的错误。
?thisworkbook.Worksheets("Ref").cells(2,7) 返回范围 G2 中的值。


话虽如此,我想我可以看到你在追求什么:
A 工作表的 A 列填充了数字,您希望在该列中搜索特定数字,如果找到,则返回该行上 GH 列的值。

此代码将在包含代码 (ThisWorkbook) 的工作簿中名为 Ref 的工作表的 A 列中找到数值 1。然后它将返回该行的G:H 列中的值,或者返回一个空字符串。

Sub Test()

    Dim MyRef As String

    MyRef = FinRef(ThisWorkbook.Worksheets("Ref"), 1)

End Sub

Public Function FinRef(InputSheet As Worksheet, Ref_ID As Long) As String

    Dim rFound As Range

    With InputSheet
        Set rFound = .Columns(1).Find( _
            What:=Ref_ID, After:=.Cells(1, 1), _
            LookIn:=xlValues, LookAt:=xlWhole, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext)

        If Not rFound Is Nothing Then
            FinRef = rFound.Offset(, 6) & rFound.Offset(, 7)
        End If

    End With

End Function

【讨论】:

  • 非常感谢!我已经宣布 Linkdescrip As Long 并且有效!
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多