编译错误:标签未定义

我有一个代码,在D列的主表中查找某些内容,如“1x Daily”或“2x Month”(以及其他)。 如果单元格匹配工作表名称,则会将其粘贴到该工作表中。 问题是Master工作表中的每一行都是唯一的,因此不能在每张工作表上重复。 每次运行代码时,都会重新添加行,所以我最终得到了这样的结果

Coubourn,Stephen | A | 201 | Q4hours Eudy,Donna | A | 202 | Q4hours Potts,Betty | A | 203 | Q4hours Coubourn,Stephen | A | 201 | Q4hours Eudy,Donna | A | 202 | Q4hours Potts,Betty | A | 203 | Q4小时Coubourn,Stephen | A | 201 | Q4小时Eudy,Donna | A | 202 | Q4hours波茨,贝蒂| A | 203 | Q4小时

下面是我到目前为止,我正在尝试这个代码,但是,它不工作。 我收到错误消息“编译错误,标签没有定义”的行上说:“On Error GoTo SetFirst”

Dim cell As Range Dim cmt As Comment Dim bolFound As Boolean Dim sheetNames() As String Dim lngItem As Long, lngLastRow As Long Dim sht As Worksheet, shtMaster As Worksheet Dim MatchRow As Variant Set shtMaster = ThisWorkbook.Worksheets("Master Vitals Data") ReDim sheetNames(0) For Each sht In ThisWorkbook.Worksheets If sht.Name <> shtMaster.Name Then sheetNames(UBound(sheetNames)) = sht.Name ReDim Preserve sheetNames(UBound(sheetNames) + 1) End If Next sht ReDim Preserve sheetNames(UBound(sheetNames) - 1) For Each cell In shtMaster.Range("D1:D" & shtMaster.Cells(shtMaster.Rows.Count, "D").End(xlUp).Row) bolFound = False MatchRow = Application.Match(cell.Offset(, -3).Value, sht.Range("A:A"), 0) If Not IsError(MatchRow) Then shtMaster.Rows(cell.Row).EntireRow.Copy Destination:=sht.Cells(MatchRow, 1) Else On Error GoTo SetFirst lngLastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1 On Error GoTo 0 shtMaster.Rows(cell.Row).EntireRow.Copy Destination:=sht.Cells(lngLastRow, 1) End If If bolFound = False Then For Each cmt In shtMaster.Comments If cmt.Parent.Address = cell.Address Then cmt.Delete Next cmt cell.AddComment "no sheet found for this row" ActiveSheet.EnableCalculation = False ActiveSheet.EnableCalculation = True End If Set sht = Nothing Next End Sub 

 On Error GoTo SetFirst 

这条指令告诉VBA运行时,如果有错误,直接跳到SetFirst子例程来处理错误。

当您编译代码时,VBA会发现有一个条件跳转到该SetFirst标签,但是没有这样的标签可以跳转到,所以VBA无法parsingSetFirst并且编译失败。

不知道你的意图是什么,但事情通常是这样的:

  Exit Sub SetFirst: '<<<<<<<< that's your line label Debug.Print "Error " & Err.Number & ": " & Err.Description Err.Clear 'comment-out or remove before distributing: Stop Resume 'step through (F8) here to jump back to error-causing instruction End Sub 

行标签/子例程在本地范围内,这意味着您不能跳转到位于另一个过程中的行标签。 如果您在另一个程序中有SetFirst ,并且在出现错误的情况下打算在那里跳转,那么您会遇到一些严重的SetFirst情况。