【问题标题】:Sub works from "Book1" but not from "PERSONAL.XLSB子作品来自“Book1”,但不是来自“PERSONAL.XLSB”
【发布时间】:2017-07-01 12:01:20
【问题描述】:

我使用 Excel 2016,此 Sub 复制自:VBA to remove numbers from start of string/cell

Sub RemoveNonDigits()
  Dim X As Long, Z As Long, LastRow As Long, CellVal As String
  Const StartRow As Long = 1
  Const DataColumn As String = "A"

  Application.ScreenUpdating = False

  LastRow = Cells(Rows.Count, DataColumn).End(xlUp).Row
  For X = StartRow To LastRow
    CellVal = Cells(X, DataColumn)
    While IsNumeric(Left(CellVal, 1))   ' Here
      CellVal = Mid(CellVal, 2)         ' all digits at the start
    Wend                                ' are removed
    Cells(X, DataColumn) = trim(CellVal)
  Next

  Application.ScreenUpdating = True
End Sub

当我从您的站点复制此子内容并将其粘贴到新模块中的新工作簿 (Book1) 中时,它可以正常工作。

当我从 Book1 复制 sub 并将其粘贴到 PERSONAL.XLSB 的新模块中时,我收到此错误:

"编译错误: 参数数量错误或属性分配无效”。

“Sub RemoveNonDigits()”以黄色突出显示,“trim”以蓝色突出显示。

谁能告诉我为什么 Sub 可以在“Book1”中工作,而不是“PERSONAL.XLSB”?

非常感谢任何帮助。 提前谢谢你。

【问题讨论】:

  • 如果从 PERSONAL.XSLB 运行代码应该可以工作(我对其进行了测试,它对我有用。问题很可能是包含数据的工作表当前未处于活动状态。跨度>
  • 谢谢@Jane 这很有道理,但我该怎么做呢?我对 VBA 很陌生。工作簿一直被复制(新名称),工作表有一个链接到这个子的按钮。
  • 你会检查在另一个工作簿中是否有一个名为trim 的自定义函数吗?或者它是一个空白的工作簿?尝试用= VBA.Trim(CellVal) 替换您的陈述以查看。
  • 谢谢@A.S.H 没有“修剪”功能。它与“= VBA.Trim(CellVal)”一起使用!这只是我清理互联网数据的代码的一部分。我也必须对其他一些陈述做同样的事情。您能解释一下为什么会这样吗?

标签: vba excel-2016


【解决方案1】:

您似乎在某处有另一个名为 trim 的函数,它接受其他参数,或者可能是某个其他模块、引用的库或加载项中的属性或变量。

VBA.Trim 调用通过消除歧义函数名称解决了您的问题。通过在函数名称前加上 VBA. 前缀,您明确告诉编译器您要调用 VBA 内置的函数 Trim,而不是任何其他函数。

通常不需要使用 VBA. 前缀,但有时它有助于消除名称解析的歧义。

【讨论】:

  • 非常感谢@A.S.H,我明白了,现在一切正常:)
  • @Soidog 不客气,很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 2017-05-06
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多