Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 尝试使用动态范围删除字符串的一部分,但循环失败';不要停止跑步_Excel_Vba_Loops_Dynamic - Fatal编程技术网

Excel 尝试使用动态范围删除字符串的一部分,但循环失败';不要停止跑步

Excel 尝试使用动态范围删除字符串的一部分,但循环失败';不要停止跑步,excel,vba,loops,dynamic,Excel,Vba,Loops,Dynamic,正如标题所示,我有一个动态范围,其中每个单元包含“XXXX-XXXXX-#######”,我的代码(atm)删除了具有动态范围的“XXXX-XXXXX”部分,但在到达最后一个单元后不会停止运行 Sub removestring() 'To Find The Last Row Dim LRow As Double LastRow = Cells(Rows.Count, "A").End(xlUp).Row Dim x As Variant x = Last

正如标题所示,我有一个动态范围,其中每个单元包含“XXXX-XXXXX-#######”,我的代码(atm)删除了具有动态范围的“XXXX-XXXXX”部分,但在到达最后一个单元后不会停止运行

Sub removestring()
    'To Find The Last Row
    Dim LRow As Double
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Dim x As Variant
    x = LastRow
'To Remove "XXXX-XXXXXX-"
row_number = 1
Do
DoEvents
row_number = row_number + 1
    the_description = Sheet1.Range("E" & row_number)
    the_description = Replace(the_description, "XXXX-XXXXXX-", " ")
    Sheet1.Range("E" & row_number) = the_description

Loop Until row_number = LastRow
'Can't Get Loop To Stop
End Sub

首先,最好声明所有变量

我将Do循环更改为for循环。这两种方法都有效,但正如您所知,循环的末尾(LastRow),我认为在这种情况下,for循环是更好的选择

确保在右列中查找最后一行

Sub removestring()
    Dim LastRow As Integer
    Dim row_number As Integer
    Dim wks As Worksheet
    Dim the_description As String

    Set wks = Sheets(1) 'Refer to sheet number
    'Set wks=ActiveSheet 'Refer to active sheet
    'Set wks=Sheets("Name of the sheet") 'Refer to named sheet

    LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row 
    'Are you sure you are searching the last row in column A? 
    'Below you are referring to column E.


    'To Remove "XXXX-XXXXXX-"

    For row_number = 1 To LastRow
        DoEvents
        the_description = wks.Range("E" & row_number)
        the_description = Replace(the_description, "XXXX-XXXXXX-", " ")
        wks.Range("E" & row_number) = the_description
    Next row_number

End Sub

抛出一个中断,在进入循环之前检查LastRow的值。如果LastRow为0或更小,它将永远不会等于row_number。我对VBA非常陌生-您能否对如何检查LastRow的值进行一点扩展?@Joseph我现在知道了-谢谢!)在LastRow代码中的文本上添加鼠标。它应该告诉你这个值是多少。我猜A列中没有数据,因此最后一行是0。将行更改为
LastRow=Cells(Rows.Count,“E”).End(xlUp)。Row
可能会起作用。。但请使用断点检查您的值:)您将
LRow声明为Double
,但之后您将使用
LastRow
。确保正确声明所有变量。行可以声明为
Ìnteger
,因为它没有十进制数字。