【问题标题】:User-defined type not defined error用户定义类型未定义错误
【发布时间】:2011-06-10 16:37:55
【问题描述】:

您好,我是 VBA Excel 编程的新手。我不断收到“未定义用户定义的类型”错误。我到处搜索,找不到我的具体问题的答案。很多解决方案都需要添加引用,这似乎不适用于我的情况。计算正确返回,但错误消息让我发疯!最后的宏调用也没有发生。

    Function MinutesOver(duration, start_time, end_time)

      If Not (duration = "") Then
        If ((duration * 60) > 600) Or (((duration * 60) + (start_time * 24 * 60)) >    (TimeValue("17:00:00") * 24 * 60)) Then
          MinutesOver = (duration * 60) - ((end_time - start_time) * 24 * 60)
        Else
          MinutesOver = ""
        End If
      Else
        MinutesOver = ""
      End If

      Call AddRowDeleteConstants

    End Function

我什至尝试制作一个更简单的版本,但仍然遇到同样的错误。

    Function MinutesOver(duration As Integer)
      MinutesOver = duration
     'Call AddRowDeleteConstants
    End Function

任何反馈都将不胜感激。谢谢。

    Sub AddRowDeleteConstants() 
      'On Error GoTo NoConstants 
      With ActiveCell.EntireRow
        .Copy 
        .Insert Shift:=xlDown 
        .SpecialCells(xlCellTypeConstants).ClearContents 
      End With 
    Exit Sub 

     'NoConstants: 
     'MsgBox "There were no constants to delete"
    End Sub 

【问题讨论】:

  • 什么是 AddRowDeleteConstants ?错误在哪一行? (如果你看不出来,在 Function MinutesOver(.. 行设置断点,运行调用,中断时按 F8 运行下一行)上按 f9
  • 我用 F8 逐步完成它,直到它完成(在它到达 End Function 行之后)才发生错误。 AddRowDeleteConstants 看起来像这样:

标签: excel vba


【解决方案1】:

我运行你的函数没有错误,但是...

用户定义的函数不能修改其他单元格。在对AddRowDeleteConstants 的调用中,无论是否出错,命令CopyInsertPasteSpecial 都不执行任何操作,因为它们实际上是从用户定义的函数中调用的。

【讨论】:

  • 感谢您提供此信息。我本可以忍受这个错误,但由于无法从用户定义的函数中修改其他单元格,我将不得不想出一个不同的计划。
【解决方案2】:

您的代码没有任何错误,但也许您需要为您的函数指定一个类型?

Function MinutesOver(duration As Integer) as Integer

只是猜测...

【讨论】:

  • 这似乎也不起作用,仍然出现相同的错误。 :(
  • 这个“猜测”完全无关紧要,根本没用……-1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多