如何开发一个包含正则表达式的Excel宏,使其在Windows和Mac上都能工作

17
我已开发了一个利用VBScript.RegExp的Excel 2010 VBA宏。其中一个用户显然正在使用支持VBA但不支持VBScript.RegExp的Excel Mac 2011。
我看到了几篇文章提到可以使用AppleScript创建自己的RegEx函数,这些函数可以被VBA宏调用。但似乎需要Mac版本的Excel文件和Windows版本的文件,这并不理想。
是否有另一种在VBA中实现正则表达式的方法,可与Windows和Mac兼容?

7
您可以使用 If-Endif 来检查操作系统,然后决定是否要运行 RegExp 或 AppleScript。在这种情况下,我建议在 Windows 上使用 RegExp 的 Late Binding。另外,您可能想阅读此文章 (http://www.computerworld.com.au/article/304149/10_applescripts_make_love_your_mac_even_more_/),其中提到 AppleScript 不是特别适合大量的文本操作。它没有内置的正则表达式支持;甚至作为核心 AppleScript 的一部分,也没有简单的查找和替换功能。 - Siddharth Rout
2
这个评论只适用于纯粹的AppleScript,而任何使用AppleScript来做除了“beep”之外的事情的人都不会使用。下载Satimage.osax,并使用change命令以获得各种风格的完整RegEx支持。 - Aesthir
如果您已经解决了这个问题,我很想知道您是如何解决的。 - JDB
2
不幸的是,我没有找到解决方案,只有一个变通方法。我只是用一系列“替换”调用替换了我的正则表达式。 - Brian
3个回答

2

很遗憾,当前没有找到解决此问题的方法——目前的解决方法是将正则表达式替换为一系列Replace调用(或其他所需操作)。


@Aesthir的评论似乎值得一试,有些时候“替换”功能就不再管用了。 - Mathieu Guindon

2
我在尝试使用正则表达式库从单元格中删除HTML标记时遇到了这个问题。
我知道这并没有在问题中被注明为所需的用途,但是,以防万一或者未来的访客想要用一个正则表达式函数替换掉Mac Excel 2011中单元格内的标签,这个用户自定义函数将起作用。对原作者表示歉意,我只是找到它了,但不幸的是无法找到源代码。
Public Function StripHTML(zDataIn As String) As String

  Dim iStart As Integer
  Dim iEnd   As Integer
  Dim iLen   As Integer

  Do While InStr(zDataIn, "<") > 0
    iStart = InStr(zDataIn, "<")
    iEnd = InStr(iStart, zDataIn, ">")
    iLen = Len(zDataIn)
    If iStart = 1 Then
      zDataIn = Right(zDataIn, iLen - iEnd)
    Else
      If iLen = iEnd Then
        zDataIn = Left(zDataIn, iStart - 1)
      Else
        zDataIn = Mid(zDataIn, 1, iStart - 1) & _
                  Right(zDataIn, iLen - iEnd)
      End If
    End If
  Loop

  StripHTML = zDataIn

End Function

0

如果您不介意支付99美元,可以使用Aivosto RegExpr。显然,这是一个纯VBA解决方案,应该可以在PC和Mac VBA上运行。

或者,为PC和Mac编写单独的解决方案,然后使用编译器指令来区分每个平台上运行的代码部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接