此Excel VBA宏太慢

时间:2017-08-18 11:12:01

标签: excel vba excel-vba

有没有办法加快这段代码的速度。我是VBA的新手(本周才真正开始)并且我已经尝试编写这个宏来自动计算基于财务模型所需借入的金额。

为了给出一些背景信息,这个单元通知另一个工作表上的峰值借用需求(pbr)单元格但是当你增加所需设施的价值时(fr)pbr完全由于利息和借来的金额的其他各种费用。

我已经创建了一系列while循环来将此fr值设置为最接近的10,000,但是速度非常慢。我敢肯定必须有更优雅的方式来写这个,但我似乎无法弄明白。我最好把它变成一个函数而不是一个子函数,但我甚至不确定这是否可行。

到目前为止,这是代码,您可以给予的任何帮助都非常感谢!

' Sub procedure to calculate the peak borrowing requirement'

Sub calculateFacilityRequiredButton()
Dim pbr As Long ' stores the initial peak borrowing requirement from the viability page
Dim fr As Long ' stores the facility required from the inputs page

' set pbr variable as the value from the viability page 
Worksheets("Viability").Activate
pbr = Cells(9, "k").Value

' set the starting value at the current peak borrowing rate from the viability page

Worksheets("Viability").Activate
fr = Cells(9, "K").Value

Do While fr <= pbr
If fr <= pbr Then

fr = fr + 1000000
Worksheets("Inputs").Activate
Range("N47").Value = fr

Worksheets("Viability").Activate
pbr = Cells(9, "k").Value

End If

Loop


Do While fr > pbr + 100000
If fr > pbr + 100000 Then

fr = fr - 100000
Worksheets("Inputs").Activate
Range("N47").Value = fr

Worksheets("Viability").Activate
pbr = Cells(9, "k").Value



End If

Loop

Do While fr > pbr + 10000
If fr > pbr + 10000 Then

fr = fr - 10000
Worksheets("Inputs").Activate
Range("N47").Value = fr

Worksheets("Viability").Activate
pbr = Cells(9, "k").Value



End If

Loop

Worksheets("Inputs").Activate

End Sub

3 个答案:

答案 0 :(得分:2)

尽量不要继续激活,做这样的事情

{{1}}

参考工作表,而不是激活它们。

答案 1 :(得分:0)

您的While循环似乎与if条件具有相同的条件。从我所看到的,它只会在你的While循环中执行一个循环。所以我认为你不需要while循环。此外,正如其他人所提到的,不要尝试激活床单。 限定您的工作表:

Dim oW As Worksheet: Set oW = ThisWorkbook.Worksheets("Viability")

然后,您可以将其用作oW.Range("N47").Value = fr。这应该指向正确的方向

答案 2 :(得分:0)

如果有人有类似的,可比较的问题,请参考。根据Zac的回答,这个解决方案对我有用。

Sub CalculateFR()
' Sub procedure to calculate the peak borrowing requirement'

Dim pbr As Long ' stores the initial peak borrowing requirement from the viability page
Dim fr As Long ' stores the facility required from the inputs page
Dim oWV As Worksheet
Dim oWI As Worksheet

Set oWV = Sheets("Viability")
Set oWI = Sheets("Inputs")


' set pbr variable as the value from the viability page

pbr = oWV.Range("K9").Value

' set the starting value at the current peak borrowing rate from the viability page

fr = oWV.Range("K9").Value


Do While fr <= pbr

fr = fr + 1000000
oWI.Range("N47").Value = fr

pbr = oWV.Range("K9").Value

Loop

Do While fr <= pbr + 100000

fr = fr + 100000
oWI.Range("N47").Value = fr

pbr = oWV.Range("K9").Value

Loop

Do While fr <= pbr + 10000

fr = fr + 10000
oWI.Range("N47").Value = fr

pbr = oWV.Range("K9").Value

Loop

End Sub