Power BI的长期用户,但是首次发布者-在这种情况下是VBA!
我不是程序员,对VBA还是很陌生,并且(真是尴尬)花了整整一天的时间来寻找答案。我要删除字符串中的空白行,如下所示:
“第一部分
第二部分
第三部分”
上下文是我正在创建一个滚动索引,该索引显示在每个内容幻灯片上,因此当您单击幻灯片时,索引会突出显示您所在的部分。我不想显示小节,因此我尝试替换节名称以“-”开头,以“”开头,但这意味着我有空白行。所以现在我要删除空白行。
我尝试使用: -IIF语句,但替换为“”不会删除空白行 -正则表达式,另一个链接建议使用以下模式:@“ ^ \ s + $ [\ r \ n] *”但@引发错误,在任何情况下均不起作用
我已经进行了拖网捕捞,并阅读了许多有关如何引导正则表达式的指南,但我无法破解它。
我尝试使用以下内容:
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
With RE
.Multiline = True
.Global = True
resultString = .Replace(subjectString, "\s\n", string.empty)
MsgBox resultString
End With
我在stackoverflow上发现的另一个可能的解决方案是
Dim xArr() as string
xArr = Split(TextBox1.Value, vbCrLf)
TextBox1.Value = ""
for i = 0 to Ubound(xArr)
If Trim(xArr(i)) <> "" Then
TextBox1.value = TextBox1.value & xArr(i) & vbCrLf
End If
Next
但是我也无法正常工作。
任何帮助将不胜感激!谢谢
答案 0 :(得分:1)
您的RegEx代码实际上是为VB.Net而不是VBA设计的,下面的代码将 n 空行替换为VBA中的1。
Dim RE As Object: Set RE = CreateObject("VBScript.RegExp")
With RE
.MultiLine = True
.Global = True
.Pattern = "(\r\n)+"
resultString = .Replace(subjectString, vbCrLf)
MsgBox resultString
End With
当然,如果您只有 2 个空行,您可以:
resultString = replace$(subjectString, vbcrlf & vbcrlf, vbcrlf)
答案 1 :(得分:1)
我知道这是旧的,但这是我用来帮助的正则表达式公共函数。可能有更好的方法,但这对我来说很简单并且有效。
'=================================================================================='
Public Function RegExReplace(TextContent As String, SearchEx As String, Optional ReplaceEx As String = "", Optional _
EmptyLines As Boolean = False, Optional TrimLines As Boolean = True) As String
Dim regEx As Object, strOutput As String
Set regEx = CreateObject("vbscript.regexp")
With regEx: .Global = True: .IgnoreCase = False: .MultiLine = True: .Pattern = SearchEx: End With
TextContent = regEx.Replace(TextContent, ReplaceEx)
If EmptyLines = False Then TextContent = RegExReplace(TextContent, "\r\n\r\n", "", True, False)
If TrimLines = True Then TextContent = Trim(TextContent)
RegExReplace = TextContent: Set regEx = Nothing
End Function
'=================================================================================='
答案 2 :(得分:0)
如果您出于某种原因不想使用 RegEx(例如,在无法使用 VBScript 的 Mac 上工作),这里是一种纯 VB 方法:
Sub Test()
Call TakeOutTheEmpties(ActiveWindow.Selection.ShapeRange(1))
End Sub
Sub TakeOutTheEmpties(oSh As Shape)
Dim oPara As TextRange
Dim x As Long
If oSh.HasTextFrame Then
If oSh.TextFrame.HasText Then
For x = oSh.TextFrame.TextRange.Paragraphs.Count To 1 Step -1
Set oPara = oSh.TextFrame.TextRange.Paragraphs(x)
If oPara.Text = vbCr Then
oPara.Delete
End If
Next
End If
End If
End Sub