gpt4 book ai didi

excel - VBA 2016中的错误处理程序

转载 作者:行者123 更新时间:2023-12-03 08:53:25 25 4
gpt4 key购买 nike

我已经阅读了有关VBA中错误处理的多个问答,但是由于某些原因,我的代码无法正常工作。我正在尝试过滤特定的单词(变量名“item”),如果过滤范围内没有该单词,则必须跳过代码并跳转到错误处理程序(并转到下一个单词)。必须继续进行直到完成for。我的代码如下:

Sub Group_Button1_Click()

Worksheets("Grouping_Name").Select
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
lastrow_grouping = Selection.Count + 1


Dim filterRange As Range
Dim copyRange As Range
Dim lastrow_To_be_grouped As Long

For grouping_counter = 2 To lastrow_grouping

' on to_be_grouped sheet turn off any autofilters that are already set Sheets("To_be_grouped").AutoFilterMode = False
' find the last row with data in column A of To_be_grouped sheet
lastrow_To_be_grouped = Sheets("To_be_grouped").Range("A" & Sheets("To_be_grouped").Rows.Count).End(xlUp).Row
' the range that we are auto-filtering (all columns)
Set filterRange = Sheets("To_be_grouped").Range("A1:B" & lastrow_To_be_grouped)
' Copy filtered data (exclude header) in To_be_grouped sheet
Set copyRange = Sheets("To_be_grouped").Range("A2:B" & lastrow_To_be_grouped)

' Assign variable "item" which is the word to filter
Item = Sheets("Grouping_Name").Range("A" & grouping_counter).Value
' Filter column with variable item
filterRange.AutoFilter field:=2, Criteria1:="=*" & Item & "*", Operator:=xlAnd

' copy the visible cells to Final_Grouping sheet
' determine first row with no data in Final Grouping sheet and copy to sheet
On Error GoTo errorhandler
' This is where I need help, if there is no line with the filtered word the code must jump to errorhandler
If IsNumeric(copyRange.SpecialCells(xlCellTypeVisible).Count) = True Then
copyRange.SpecialCells(xlCellTypeVisible).Copy Sheets("Final_Grouping").Range("A" & item_counter_total)
' delete the tables
Sheets("To_be_grouped").Range("$A$1:$B$" & lastrow_To_be_grouped).Offset(1, 0).SpecialCells _
(xlCellTypeVisible).EntireRow.Delete

' Count the number of rows added
item_counter = copyRange.SpecialCells(xlCellTypeVisible).Count / 2
' ------------------------------------------

For group_table_counter = item_counter_total To item_counter_total + item_counter - 1 Step 1
Sheets("Final_Grouping").Range("C" & group_table_counter).Value = Item
Next group_table_counter
' ------------------------------------------
item_counter_total = item_counter_total + item_counter
End If
errorhandler:
Next grouping_counter
End Sub

任何帮助将不胜感激。谢谢

最佳答案

我无法确定您的代码到底在做什么,或者您试图捕获的错误是什么,但是您遇到的问题之一是您无法在错误处理程序中放置“Next grouping_counter”。

我认为您的误解是基于以下事实:如果您输入“On Error GoTo ErrorHandler”语句,则在发生错误的情况下将运行ErrorHandler中的代码。

但是,在编译代码时,VBA试图确定代码是否有意义,并给您一个错误,即您的下一条语句没有For循环,这是因为,即使发生错误的地方,您也会将在for循环内,程序不知道这一点。

正如sous2817在评论中提到的那样,您可能不需要在这里进行错误处理,但是我将介绍两种方法,以便您可以更好地理解如何进行错误处理。

在这种情况下,您可以通过两种方式使用ErrorHandling,假设您的代码中发生了错误:

1。

For grouping_counter = 2 To lastrow_grouping
'some code here

On Error GoTo ErrorHandler
'code that has error you are trying to handle
'more code to run
NextGroupingCounter: 'label to jump to from error handler

Next grouping_counter


Exit Sub

ErrorHandler:

GoTo NextGroupingCounter

End Sub

当然,这是您除了跳过其余代码之外,实际上不希望对错误执行任何操作。如果这是您想要的,则只需将“错误代码”更改为GoNext_GroupGroup。

2。
For grouping_counter = 2 To lastrow_grouping
'some code here

On Error GoTo NextGroupingCounter
'code that has error you are trying to handle
'more code to run
NextGroupingCounter: 'label to jump to from error handler

Next grouping_counter

当然,您甚至可能不需要错误处理

3。
For grouping_counter = 2 To lastrow_grouping
'some code here
If [*insert text to check condition needed for no error*] Then
'code to run if no error
End If
'If the condition needed for no error is false, this will just go to the next one.
Next grouping_counter

如果可能,首选选项3。如果您的代码中确实发生错误,那么选项2可以正常工作。如果要捕获错误然后跳回到循环中,则选项3有效。

此外,请注意,我在ErrorHandler上方放置了“Exit Sub”。 ErrorHandler标签只是一个标签,因此,如果程序运行到最后,它将运行ErrorHandler部分中的代码。 Exit Sub结束该过程以避免此情况。

另请注意,在其他情况下,您可以使用“On Error Resume Next”在出现错误的情况下继续操作,甚至可以将“Resume Next”放入错误处理程序中以返回到错误之一之后的行。这有点超出问题的范围,但是可能会添加一些有用的信息。

关于excel - VBA 2016中的错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34663648/

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