【问题标题】:PC Excel macros doesn't work on MacPC Excel 宏在 Mac 上不起作用
【发布时间】:2016-12-16 12:56:48
【问题描述】:

我写了一个宏,它从物流代码中删除所有非数字字符,并将剩下的数字相乘。 pc上没问题,mac上不行。

这里是代码,可能有人可以建议我为什么宏在 mac 上不起作用:

   Function Bek(s)
Static re As Object
Dim x
  If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "[0-9.,]+"
    re.Global = True
  End If
  If re.test(s) Then
    Bek = 1
    For Each x In re.Execute(s)
      Bek = Bek * Val(Replace(x, ",", "."))
    Next
  End If
End Function

我也可以根据您的要求附上一个文件。

附:发现一些信息,mac os可能不支持正则表达式。

非常感谢您的帮助。

【问题讨论】:

  • 安德烈亚斯,也许你是对的,但如果你能帮助我就更好了。谢谢。
  • 如果你能给我们输入数据和预期输出,我们可以帮助你,但现在有点不清楚。
  • 所以我有一些代码,例如:S10 2000*6000, 114,3*6,3。宏会删除所有非数字符号,例如 S、*、空格,并将剩下的所有数字相乘:10x2000x6000。在 pc 上很好,在 mac 上没有,我想是由于不支持的正则表达式或其他原因。
  • @andreas 你显然错了,至少就包括支持成本在内的大多数事情而言。但是,如果您将 Mac 的使用限制为使用 Microsoft 软件,尤其是 Excel,那么您是对的。 Excel 的范围从在 Mac 上更好(最初开发它的地方)到几乎无法使用(Excel 2016 没有用于编辑宏的 VBE!!!但以前的版本大部分都可以)。
  • 您的宏失败,因为 VBscript 正则表达式库在 Mac 上不可用。

标签: macos vba excel macros


【解决方案1】:

试试这个。

它拆分并查看字符串的每个部分,并按照我认为您想要的方式处理它。
试试看是否有效

Sub ApplesWayOfRegex()


    Str1 = "S10 2000*6000"

    ReDim chars(Len(Str1) - 1)
    For i = 1 To Len(Str1)
        If (IsNumeric(Mid$(Str1, i, 1))) And i <> 1 Then
            chars(i - 1) = Mid$(Str1, i, 1)
        ElseIf (Not IsNumeric(Mid$(Str1, i, 1))) And i = 1 Then
            chars(i - 1) = ""
        Else
            chars(i - 1) = "*"
        End If
    Next

    Mathstr = Join(chars, "")
    MsgBox Application.Evaluate(Mathstr)
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多