'引用两个Dll
Function ResultABC(strSource As String) As String
Dim objRegexp As New RegExp
With objRegexp
.Global = True
.MultiLine = False
.IgnoreCase = True
'-----去掉一句话最后的标点符号 需要后面补充
.Pattern = "(\.|\?)$"
strSource = .Replace(strSource, "")
'-----获取所有非空值
.Pattern = "[^\s]{1,}"
If .test(strSource) Then
'Debug.Print .Execute(strSource).Count
'------一些声明与设置
ReDim Arr(0 To .Execute(strSource).Count - 1)
Dim lgI As Long
Dim objDic As New Dictionary
objDic.CompareMode = BinaryCompare '区分大小写
'------单词储存在数组中
For lgI = 0 To .Execute(strSource).Count - 1
Dim strWord As String: strWord = .Execute(strSource)(lgI)
If Not objDic.Exists(strWord) Then objDic.Add strWord, ""
Arr(lgI) = strWord
Next
'------排除特殊情况
If objDic.Count = 1 Then ResultABC = "仅有一个单词": GoTo EXIT_FUNCTION
'------打乱数组
Dim Arr2: Arr2 = Arr
Do While Join(Arr, " , ") = Join(Arr2, " , ")
Arr2 = Arr
ExchangeArr Arr
Loop
ResultABC = Join(Arr, " , ")
Else
ResultABC = "无单词": GoTo EXIT_FUNCTION
End If
End With
EXIT_FUNCTION:
End Function
Function ExchangeArr(Arr)
Dim lgI As Long
For lgI = LBound(Arr) To UBound(Arr)
Dim lgNumber As Long: lgNumber = WorksheetFunction.RandBetween(LBound(Arr), UBound(Arr))
If lgI <> lgNumber Then
Dim strTemp As String: strTemp = Arr(lgI)
Arr(lgI) = Arr(lgNumber)
Arr(lgNumber) = strTemp
End If
Next
End Function
我是在Excel里做的
你尝试下把它弄到Word中
如果哪里不清晰的 可以直接问我
2019-7-2 07:54 上传