程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环?

开发过程中遇到无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环的问题如何解决?下面主要结合日常开发的经验,给出你关于无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环的解决方法建议,希望对你解决无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环有所启发或帮助; @H_772_2@好的,所以我最近进入了 VBA 编程,我一直在尝试编写一些代码来执行以下操作:

  • 循环浏览包含 True 或 false 陈述的列(在我的案例中为列“K”)
  • 如果为 True,则收集相应的名称(“C”列)并创建一个相应命名的工作表
@H_772_2@仅此而已

@H_772_2@这是我写的代码:

Sub Generate_Attribute_table()

    Dim LastRow As Long
    Dim i As Integer
    Dim Nom As String

    LastRow = Range("A1").End(xlDown).Row
    
    For i = 2 To LastRow
        
        If (Cells(i,"K").value) Then
            
            Nom = Worksheets(1).Cells(i,"C").Value
            ActiveWorkbook.Sheets.Add(After:=Worksheets(Sheets.Count)).name = Nom
            
        Else
        
            Cells(i,"K").SELEct
            
        End If
        
    Next i

End Sub
@H_772_2@它似乎工作得很好,但即使列中有其他 True,它在生成第一个工作表后也会停止。

@H_772_2@else case 是为了调试目的,因为我想看看发生了什么,它确认只要 if 语句被验证,循环就会停止。

@H_772_2@我尝试使用“Do until”循环来做同样的事情,但结果是一样的。

@H_772_2@我在这里错过了什么?我在网上找不到任何答案,所以任何帮助都会非常好。

@H_772_2@提前致谢。

解决方法

@H_772_2@根据 Sheets.Add method 文档。

@H_772_2@创建新的工作表、图表或宏表。新工作表成为活动工作表。

@H_772_2@您有对 ActiveSheet 的隐式引用,因此每次添加新工作表时,您的代码现在都在引用新工作表。

@H_772_2@添加一些对您打算使用的工作表的显式引用,例如:

LastRow = Sheets("Sheet1").Range("A1").End(xlDown).Row 
@H_772_2@和

Sheets("Sheet1").Cells(i,"K").Value
,

使用列表中的名称添加工作表@H_944_52@
  • 如果工作表名称无效,以下内容仍会引发错误。
Option Explicit

Sub Generate_Attribute_Table()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim sws As Worksheet: Set sws = wb.Worksheets(1) ' wb.Worksheets("Sheet1")
    ' This (usually preferred) way will allow empty cells in the column.
    Dim LastRow As Long: LastRow = sws.Cells(sws.Rows.Count,"A").End(xlUp).Row
    
    Dim dsh As Object
    Dim Nom As String
    Dim i As Long
    
    For i = 2 To LastRow
        ' If you use '(sws.Cells(i,"K").value)',an error will occur
        ' if there is not a Boolean in the cell.
        If sws.Cells(i,"K").Value = True Then
            Nom = sws.Cells(i,"C").Value
            ' Attempt to create a reference to the sheet named 'Nom'.
            Set dsh = Nothing
            On Error Resume Next
            Set dsh = wb.Sheets(Nom)
            On Error GoTo 0
            ' Test for existence.
            if Dsh Is Nothing Then ' A sheet named 'Nom' doesn't exist.
                wb.Worksheets.Add(After:=wb.Sheets(wb.Sheets.Count)).Name = Nom
            'Else ' A sheet named 'Nom' already exists.
            End If
        End If
    Next i

End Sub
, @H_772_2@想通了!现在我觉得自己很愚蠢,我所要做的就是准确地确定我的细胞参。简单地写:

If (ActiveWorkbook.Sheets(1).Cells(i,"K").value) Then
@H_772_2@它解决了一切。

, @H_772_2@试试这个:

Sub Generate_Attribute_Table()
Dim LastRow As Long
Dim i As Integer
Dim Nom As String
Dim Sh As Worksheet

Set Sh = ActiveWorkbook.Worksheets("Sheet1")
LastRow = Range("A1").End(xlDown).row

For i = 2 To LastRow
    If Sh.Cells(i,11).Value = True Then
        Nom = Sh.Cells(i,3).Value
        ActiveWorkbook.Sheets.Add(After:=Worksheets(Sheets.count)).Name = Nom
    Else
        'Cells(i,11).SELEct 'Commented because I don't see why you'd need it
    End If
Next i
@H_772_2@结束子

大佬总结

以上是大佬教程为你收集整理的无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环全部内容,希望文章能够帮你解决无法弄清楚为什么在验证 If 语句时 VBA 会退出我的 For-Next 循环所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。