gpt4 book ai didi

vba - 在为范围单元格的每个循环运行时避免错误?

转载 作者:行者123 更新时间:2023-12-02 13:11:38 24 4
gpt4 key购买 nike

我写了下面的函数。通常它工作得很好。但是,当 r 为 Nothing 时,我在 For Each c In r.Cells 行上收到一条错误消息,告诉我“未设置对象变量或 With block 变量”。

我不知道为什么会发生这种情况。我想象如果 r 是 Nothing,循环就不会运行。

Function CSVFromRange(r As Range) As String
Dim sTemp As String
Dim c As Range

'Append value and comma
For Each c In r.Cells
sTemp = sTemp & "," & c.value
Next c

'Remove first comma
If Len(sTemp) > 0 Then
sTemp = Right(sTemp, Len(sTemp) - 1)
End If

CSVFromRange = sTemp
End Function

请告诉我一种优雅的方法来使该函数不会抛出错误,如果可以的话,请告诉我它为什么会抛出错误。

最佳答案

为什么会抛出错误?

因为它期望传递一个有效范围。请参阅此示例

Sub Sample()
Dim r As Range
Dim ret

ret = CSVFromRange(r)

End Sub

Function CSVFromRange(r As Range) As String
CSVFromRange = r.Value
End Function

这是在您的情况下创建错误的最短方法。传递了范围对象但未初始化它,因此您将收到错误。您需要确保您通过了有效范围。例如

Sub Sample()
Dim r As Range
Dim ret

Set r = ThisWorkbook.Sheets("Sheet1").Range("A1")
ret = CSVFromRange(r)

End Sub

我们如何处理这个错误?

您可以在调用子函数或函数本身中处理它。我将向您展示两者

在子目录中

Sub Sample()
Dim r As Range
Dim ret

If Not r Is Nothing Then ret = CSVFromRange(r)

End Sub

Function CSVFromRange(r As Range) As String
CSVFromRange = r.Value
End Function

在函数中

Sub Sample()
Dim r As Range
Dim ret

ret = CSVFromRange(r)
End Sub

Function CSVFromRange(r As Range) As String
If Not r Is Nothing Then
CSVFromRange = r.Value
End If
End Function

Sub Sample()
Dim r As Range
Dim ret

ret = CSVFromRange(r)
End Sub

Function CSVFromRange(r As Range) As String
On Error GoTo ExitGracefully

CSVFromRange = r.Value

Exit Function
ExitGracefully:
MsgBox Err.Description '<~~ comment this if you do not want any alerts
End Function

关于vba - 在为范围单元格的每个循环运行时避免错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com