我正在阅读如何使用On Error Resume Next,我正在试图找出该行将适用于该程序的时间.在Microsoft站点上,我发现这句话:"An On Error Resume Next语句在调用另一个过程时变为非活动状态." 这到底是什么意思?什么被认为是一个程序?
我问,因为我在我的程序中使用了这行,但是我不希望它出现Resume Next所有发生的运行时错误,只是下一行中的明显错误.
代码:Dim zRange As Range
Dim zRange As Range
Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum"))
On Error Resume Next
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible)
zRange.Formula = "target"
Call FilterTableFor(fieldNameColumn)
Run Code Online (Sandbox Code Playgroud)
我也发现(并且已知有一段时间)On Error或者GoTo行被认为是编码不好.有没有Try-Catch我可以用于这样的线?
我在想这样的事情:
Dim zRange As Range
Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum"))
Try
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible)
zRange.Formula = "target"
Catch()
Call FilterTableFor(fieldNameColumn)
Run Code Online (Sandbox Code Playgroud)
我甚至没有做任何事情,因为我觉得不需要.
谢谢你的时间.
我有两种方法,我认为如果文件是打开的话应该告诉我.
方法1(错误:下标超出范围):
If Not Workbooks(filename) Is Nothing Then
Workbooks.Open (filename)
End If
Run Code Online (Sandbox Code Playgroud)
方法2:
If Not IsWorkbookOpen(filename) Then
Workbooks.Open (filename)
End If
Run Code Online (Sandbox Code Playgroud)
在哪里IsWorkbookOpen():
Private Function IsWorkbookOpen(wbname) As Boolean
Dim wBook As Workbook
Set wBook = Nothing
On Error Resume Next
Set wBook = Workbooks(wbname)
If wBook Is Nothing Then
IsWorkbookOpen = False
Else: IsWorkbookOpen = True
End If
End Function
Run Code Online (Sandbox Code Playgroud)
除此之外On Error Resume Next,方法1似乎与方法2几乎相同.
任何人都可以解释为什么方法1给出错误吗?
谢谢.
我已经为此寻找了一些解决方案,但无法找到可以直接使用的东西。因此,通过尝试编辑别人的代码供我自己使用,我遇到了一个问题。
我正在尝试使用该线路RemoveSpecialChars("$C$1"),但出现Object required错误。
函数如下:
Function RemoveSpecialChars(ByVal mfr As Range)
Const splChars As String = "!@#$%^&()/"
Dim ch As Characters
For Each ch In splChars
mfr.Replace What:=ch, Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next ch
End Function
Run Code Online (Sandbox Code Playgroud)
这是一个简单的问题,但是“$C$1”不被认为是一个范围吗?
感谢您的帮助。
编辑:如果我使用Function RemoveSpecialChars(mfr As Range)(不带ByVal),则会收到Type mismatch错误。
这进一步让我相信“$C$1”不被视为一个范围。
编辑2:
@sous2817
这就是我设置mfr与您的函数一起使用的字符串的方法。
Range("C1").FormulaR1C1 = mfr
Run Code Online (Sandbox Code Playgroud)
这就是我尝试应用它的方式。
Range("C1").FormulaR1C1 = RemoveSpecialChars(C1)
Run Code Online (Sandbox Code Playgroud)