小编Taw*_*awm的帖子

VBA:On Error Resume Next工作多长时间了?

我正在阅读如何使用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)

我甚至没有做任何事情,因为我觉得不需要.

谢谢你的时间.

vba try-catch onerror

6
推荐指数
2
解决办法
8631
查看次数

VBA:查看文件是否打开的两种方法

我有两种方法,我认为如果文件是打开的话应该告诉我.

方法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给出错误吗?

谢谢.

excel file-io vba excel-vba

2
推荐指数
1
解决办法
2502
查看次数

VBA:删除所有特殊字符的函数

我已经为此寻找了一些解决方案,但无法找到可以直接使用的东西。因此,通过尝试编辑别人的代码供我自己使用,我遇到了一个问题。

我正在尝试使用该线路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)

excel vba

0
推荐指数
1
解决办法
2万
查看次数

标签 统计

vba ×3

excel ×2

excel-vba ×1

file-io ×1

onerror ×1

try-catch ×1