试图了解差异

我希望没有人会因为我提出一个关于工作代码的问题而感到不高兴。 不过,有人告诉我,这也是为了学习,所以我希望这样可以。

我想要的是试图理解我写的两个代码之间的区别,一个是工作的,一个是失败的。

此代码是一个失败的版本:

Sub Lowercase() Dim Seq As Range Set Seq = Range(Range("A2"), ActiveCell.SpecialCells(xlLastCell)) For Each cell In Seq cell.Value = LCase(cell.Value) Next cell End Sub 

它确实把事物放在小写字母中,但它会一直循环,直到closures或最小化Excel为止。 思考一个较旧的代码,我将代码更改为:

 Sub Lowercase() Dim Seq As Range, v As Variant Dim L As Long, i As Long Set Seq = Range(Range("A2"), ActiveCell.SpecialCells(xlLastCell)) For Each cell In Seq v = cell.Value L = Len(v) For i = 1 To L cell.Value = LCase(cell.Value) Next i Next cell End Sub 

这工作正常(有点慢,但还好),我也不明白为什么。

我试图转换的文件看起来像(A2行往往继续600至1200个字符):

在这里输入图像说明

但是,我仍然调用所有的单元格,我不知道为什么给单元格一个值,它实际上停止循环。 至于,但我确定我错了,我有这样的感觉,我仍然没有改变“对于每个细胞/下一个细胞”的部分编码。

编辑:它必须做一个xlLastCell错误的使用我的工作表,因为这不是第2行的最后一个单元格。在第二个代码中,一个值可以打到0,而在第一个不是。 该代码必须改变使用不同的方法来find最后一个单元格。

似乎有一些奇怪的互动(在我不知道之间)与您的电子表格进行。 以下将不会透露这些互动是什么,但可能会压制他们。 此外,您的代码的效果是用长度为零的stringreplace范围中的空白单元格。 我无法想象这有什么意义,所以我通过防范。 我还以更可靠的方式抓取了Row2中最后一个使用的单元格:

 Sub Lowercase() Dim Seq As Range, Cell As Range, LastCell As Range Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManual Set LastCell = Cells(2, Columns.Count).End(xlToLeft) 'last cell in Row 2 with data, assuming that not all cells in row have data Set Seq = Range("A2", LastCell) For Each Cell In Seq If Len(Cell.Value) > 0 Then Cell.Value = LCase(Cell.Value) Next Cell Application.ScreenUpdating = True Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic End Sub