【问题标题】:VBA Compile errorVBA 编译错误
【发布时间】:2014-12-29 00:26:57
【问题描述】:

我对 VBA 的经验很少,我最后一次使用它是几年前的事了。 这是我的 VBA:

Function MacIDGen(total, current)
If total - current = 0 Then
    current -1
Else
    current 1
End If
    Macro1 (current)
End Function

Sub Macro1(cur)
    Sheets("Donations").Cells(I2).Value = cur & "Test"
End Sub

它是它自己的模块,根本没有其他代码。

所以我有一个调用 MacIDGen() 的单元格。它向 MacID 传递了另外两个单元格值。每当执行时都会出现错误,“编译错误:预期的子、函数或属性”并突出显示函数方法签名。

我不知道它为什么在这里提出这个问题,我猜是因为我要么错过了一个重要步骤,要么是因为在这种情况下你不能拥有一个功能或其他一些类似的问题。

编辑 作为一些额外的信息,我正在 Excel 中创建这些电子表格,作为随机数据生成表,以导入到 drupal 站点。我遇到了一个不使用循环就无法解决的问题(我也无法对迭代次数进行硬编码),而这是公式无法做到的。

【问题讨论】:

  • 有很多错误,但主要错误是您不能使用 UDF 写入另一个单元格。
  • 这就是我调用宏的原因。错误也发生在第一行,离写作还差得很远:/

标签: vba excel compiler-errors


【解决方案1】:

关于Compile Error,您之所以知道是因为您忘记使用= 登录current -1current 1

就像我提到的,有很多错误,但主要错误是您不能使用 UDF 写入另一个单元格。将该函数分解为函数或子函数并不重要。您根本无法写入任何其他单元格。您将在使用该功能的单元格中获得#Value

Function 用于当您想要返回某些东西时。现在,由于您将其用作 UDF(用户定义函数),它应该返回一些内容并返回到该特定单元格。

如果您正在写入调用函数的同一单元格,则将您的代码更改为

Function MacIDGen(total, current)     
    If total - current = 0 Then
        current = -1
    Else
        current = 1
    End If

    MacIDGen = current & "Test"
End Function

【讨论】:

  • 这已经解决了这个问题。但是,当您说不能使用 UDF 更改单元格值时;我不能调用 Macro1,并让它改变值(如上所述)吗?
  • 不,你不能 :) 同样在你编辑之后,你不需要 Dim 语句,所以我已经从我的代码中删除了它。
【解决方案2】:

如果要更改单元格,可以使用子过程而不是 UDF,在这种情况下,您将需要一种从电子表格中执行它的方法,例如命令按钮、功能区按钮或组合键快捷方式。 如果是这样,您的第一行应该是:

Sub MacIDGen(total, current)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多