Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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_Date_For Loop_Selection - Fatal编程技术网

Excel 希望提高宏处理循环和将日期转换为其他格式的速度

Excel 希望提高宏处理循环和将日期转换为其他格式的速度,excel,vba,date,for-loop,selection,Excel,Vba,Date,For Loop,Selection,我下面的代码工作正常,但速度非常慢……事实上,这段代码将我的工作表(称为“测试”)的C列和D列中的日期从格式day.month.year转换为格式day/month/year(例如,请参见下图,第1-2-3-4-5行已经转换,而第1183行的其他行尚未转换) 我正在寻找一个解决方案来提高这个宏的速度,因为如果我在C列和D列中有很多行要转换,那么这个宏的速度真的很慢 如果碰巧有人知道如何提高这个宏的速度,那就太棒了 在带的块中,立即引用整个范围(以前的选择),而不是循环。这被合并到一个子项中,尽

我下面的代码工作正常,但速度非常慢……事实上,这段代码将我的工作表(称为“测试”)的C列和D列中的日期从格式day.month.year转换为格式day/month/year(例如,请参见下图,第1-2-3-4-5行已经转换,而第1183行的其他行尚未转换)

我正在寻找一个解决方案来提高这个宏的速度,因为如果我在C列和D列中有很多行要转换,那么这个宏的速度真的很慢

如果碰巧有人知道如何提高这个宏的速度,那就太棒了


在带的
块中,立即引用整个
范围
(以前的
选择
),而不是循环。这被合并到一个子项中,尽管您决定用一个独立的过程声明范围并没有错

Option Explicit

Sub convert()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Test")
Dim LRow As Long, MyCell As Range, MyRange As Range

LRow = ws.Range("D" & ws.Rows.Count).End(xlUp).Row
Set MyRange = ws.Range("D2:E" & LRow)

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    With MyRange
        .Value = Format(.Value, "dd/mm/yyyy")
        .Replace "/", ".", xlPart, xlByRows
        .NumberFormat = "@"
    End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

不确定您的工作簿中是否有Calc,但您可以尝试将Calc设置为手动,然后在sub
应用程序的末尾将Calc设置为自动。Calculation=xlCalculationManual
很抱歉,我在上面的评论中说了一句,造成了混淆,宏将C列和D列中的所有行从格式day.month.year转换为格式day/month/year,但事实恰恰相反,宏将C列和D列中的所有行从格式day/month/year转换为格式day.month.year是否验证了
selectallmylinesctrlshift
获取的内容?如果您的工作表上有空数据,它可能会在比需要的范围大得多的范围内循环。您之所以如此缓慢,是因为您一次循环一个单元格并应用数字格式。而且,
选择
并不是最好的选择。如果您手动选择某个内容,那么在代码开始时就将其设置为var-如果您在代码中使用选择,请从一开始就使用var,不要使用该方法。非常感谢,我在代码开始时编写了application.Calculation=xlCalculationManual,在代码结束时编写了application.Calculation=xlAutomatic,现在速度真的更快了…最好保留以前的屏幕更新-更改计算设置的宏会让许多用户感到烦恼。将CalcMethod设置为布尔值CalcMethod=Application.Screenupdating Do stuff Application.Screenupdating=CalcMethod不确定您的意思。我从未见过有人抱怨在最后还原时更改了calc设置(假设初始设置是
自动的
)@owlssleeping我同意如果初始设置是自动的,就没有问题。这不是保证。
Option Explicit

Sub convert()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Test")
Dim LRow As Long, MyCell As Range, MyRange As Range

LRow = ws.Range("D" & ws.Rows.Count).End(xlUp).Row
Set MyRange = ws.Range("D2:E" & LRow)

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    With MyRange
        .Value = Format(.Value, "dd/mm/yyyy")
        .Replace "/", ".", xlPart, xlByRows
        .NumberFormat = "@"
    End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub