首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA代码优化

VBA代码优化
EN

Stack Overflow用户
提问于 2017-10-05 16:22:03
回答 1查看 83关注 0票数 1

我的代码是用VBA编写的,它的行数很大,占用的内存太多--它只占用很少的GB空间就会造成崩溃。代码取数字,向服务器请求XLM,找到一些数据并将其写入,然后转到另一个数字。如果超过500行,它就会崩溃。你能帮我优化代码来处理大约10,000行吗?谢谢你的帮助,马瑞克

代码语言:javascript
复制
Sub ares()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False 'potlačí obnovování obrazovky
Application.DisplayAlerts = False 'potlačí varovné hlášky
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

Dim i As Integer
Dim row As Integer
Dim column As Integer

For i = 2 To 15000

    Sheets.Add(After:=Sheets(Sheets.Count)).Name = "ares"
    Sheets("ares").Activate

    On Error GoTo ErrorHandler
    ActiveWorkbook.XmlImport URL:="http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & Worksheets("ico").Cells(i, 1).Value, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")

    If Worksheets("ares").Cells(2, 10).Value = "" Then

        Worksheets("ico").Cells(i, 2).Value = "OK"


        row = 2
        column = 3
        Do While Worksheets("ares").Cells(row, 1).Value <> ""
            If Worksheets("ares").Cells(row, 167).Value <> "" Then
                Worksheets("ico").Cells(i, column).Value = Worksheets("ares").Cells(row, 167).Value
                column = column + 1
            End If

        row = row + 1
        Loop
    Else
        Worksheets("ico").Cells(i, 2).Value = Worksheets("ares").Cells(2, 10).Value
    End If
ErrorResume:

    Sheets("ares").Delete

Next i

Application.ScreenUpdating = True 'zapne obnovování obrazovky
Application.DisplayAlerts = FaTruelse 'obnoví varovné hlášky
Application.Calculation = xlCalculationAutomatic
Application.DisplayStatusBar = True
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True


Exit Sub
ErrorHandler:
    Worksheets("ico").Cells(i, 2).Value = "Jiná chyba"
Resume ErrorResume

End Sub
EN

回答 1

Stack Overflow用户

发布于 2017-10-05 17:37:28

删除Sheets("ares").Activate并将Integer更改为Long。这应该足够了。

您不需要激活工作表,只要您在任何地方都正确地引用了工作表。

关于整数,它给了你一个很小的加速- Why Use Integer Instead of Long?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46580988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档