现在我使用的方法是为了避免进入for循环,循环通过当前为空的数组如下:
如果len(join(array,“”)> 0则 for i = 1 to ubound(array) 码 下一个 结束如果
但这不是开玩笑,我刚刚使用了那行代码,如果len(join(array,“”)> 0然后导致删除数组并且它连续5次崩溃我的程序。我知道这听起来很难相信,但这里是一个屏幕截图
由于某种原因,代码len(join(array,“”)> 0会破坏variables2数组。这是一个屏幕截图,显示变量数组在我转到错误代码之前显然已满:{ {0}}所以现在我正在尝试使用我尝试的其他代码:
如果不是isempty(数组)那么
但那不起作用。有什么想法吗?
If Len(Join(greek_act, "")) > 0 Then
For i = 1 To UBound(greek_act)
For j = 1 To UBound(variables2)
If greek_act(i) = variables2(j) Then
variables2(j) = ""
Exit For
End If
Next
Next
variables2 = remove_blanks(variables2)
End If
'variables2 array is full
If Len(Join(greek_letters, "")) > 0 Then
'variables2 array gets destroyed and program crashes here.
For i = 1 To UBound(greek_letters)
rightres1 = Replace(rightres1, greek_letters(i), variables2(i))
Next
End If
答案 0 :(得分:0)
没关系,我决定继续使用以下解决方案,因为该程序似乎暂时起作用
On Error Resume Next
For i = 1 To UBound(greek_letters)
rightres1 = Replace(rightres1, greek_letters(i), variables2(i))
Next
On Error GoTo 0``
答案 1 :(得分:0)
要使加入()技术可靠地运作,您必须完成调光/重新调整过程:
Sub dural()
Dim greek_ary(1 To 3) As String
s = Join(greek_ary, "")
MsgBox Len(s)
End Sub
如果没有填充数组, Len 将报告 0
答案 2 :(得分:0)
由于这是一个常见的测试,我喜欢使用这样的可重用函数:
Function IsArrayEmpty(anArray As Variant)
Dim i As Integer
On Error Resume Next
i = UBound(anArray, 1)
If Err.Number = 0 Then
IsVarArrayEmpty = False
Else
IsVarArrayEmpty = True
End If
End Function
现在在您的主要Sub中执行此操作:
If Not IsArrayEmpty(greek_act) Then
For i = 1 To UBound(greek_act)
For j = 1 To UBound(variables2)
If greek_act(i) = variables2(j) Then
variables2(j) = ""
Exit For
End If
Next
Next
variables2 = remove_blanks(variables2)
End If