首 页 行业热点 新车 试驾评测 养车用车 车型库

请大神帮忙用Excel宏解决excel固定操作自动化的难题?

发布网友

我来回答

1个回答

热心网友

凡事有利必有弊,在用时较长的循环中,可能会造成假死现象。

DoEvents可以把控制权转让给操作系统,程序转到后台运行,可以避免假死,让你可以在你的电脑上做一些其他的事情。

但是隐患也很大,在程序未执行完之前,请不要对EXCLE工作簿进行任何操作,如括不要切换工作表、不要对表格进行编辑等等,以免造成不可预知的错误。

另外,专心做一件事,肯定比三心二意更省时间,让系统专心运行程序,比你在运行程序的同时再在电脑上做其他的事情更节省时间。

还有就是,你说每次重算需要45秒,这样每单次的循环需要重算三次,大约需要2至3分钟,你要循环360次的话,需要12至18小时,这个是硬伤,你要有心理准备,能打持久止战就行。

代码和图片如下:

Sub 循环重算处理()

    Dim i&, iZhi1$, iZhi2$, iCs$

    '索要初始值1

    Application.Speech.Speak "请输入第一个初始数值"

    iZhi1 = InputBox("请输入第一个初始数值", "初始数值1")

    If iZhi1 = "" Then Exit Sub

    '索要初始值2

    Application.Speech.Speak "请输入第二个初始数值"

    iZhi2 = InputBox("请输入第二个初始数值", "初始数值2")

    If iZhi2 = "" Then Exit Sub

    '索要循环次数

    Application.Speech.Speak "请输入循环次数"

    iCs = InputBox("请输入循环次数", "循环次数")

    If iCs = "" Then

        Exit Sub

    ElseIf Val(iCs) < 1 Then

        MsgBox "循环次数不能<1,程序已中止!", , "提示"

        Exit Sub

    End If

    '确认参数,如果参数有误,给予取消执行的机会

    Application.Speech.Speak "请确认参数,若参数有误可取消执行"

    If MsgBox("请确认仨参数:" & vbLf & vbLf & _

        "初始值1:" & iZhi1 & vbLf & "初始值2:" & iZhi2 & vbLf & _

        "循环次数:" & iCs, vbOKCancel, "请确认参数") = vbCancel Then Exit Sub

    '开始循环

    For i = 1 To Val(iCs) '遍历1到iCs

        Range("D3") = iZhi1 '把第一个值写入D3

        Application.Calculate '所有工作簿重算

        If Not Application.CalculationState = xlDone Then DoEvents '转让控制权

        Application.Calculate '所有工作簿重算

        If Not Application.CalculationState = xlDone Then DoEvents '转让控制权

        Range("C9") = iZhi2 '把第二个值写入C9

        Application.Calculate '所有工作簿重算

        If Not Application.CalculationState = xlDone Then DoEvents '转让控制权

        iZhi1 = iZhi1 + 1 '累加

        iZhi2 = iZhi2 + 1 '累加

    Next

    Application.Speech.Speak "处理完毕"

    MsgBox "处理完毕!", , "提示"

End Sub

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com