2017-04-19 52 views
0

我是VBA新手。以下是將驗證列表應用於列C中的單元格的代碼,具體取決於在B列中選擇了來自另一個驗證列表的選項。它笨重而緩慢。我希望以不同的方式寫一些想法。這裏是我有什麼:無環迴路VBA

For k = 36 To 88 

    If Range("B" & k) Is Nothing Then 
    Else 
     CarrierName = Range("B" & k) 
     Range("C" & k).Name = "PlanName" 
     xPlanDropDown = PlanDropDown(CarrierName, PlanName) 
    End If 

    Next k 

End Sub 

Function PlanDropDown(CarrierName, PlanName) 

    Select Case CarrierName 

     Case "Aetna EPO" 
       Range("PlanName").Validation _ 
       .Modify xlValidateList, xlValidAlertStop, Formula1:="=Plans!A2:A101" 
     Case "Aetna HMO" 
       Range("PlanName").Validation _ 
       .Modify xlValidateList, xlValidAlertStop, Formula1:="=Plans!B2:B101" 
     Case "Aetna PPO" 
       Range("PlanName").Validation _ 
       .Modify xlValidateList, xlValidAlertStop, Formula1:="=Plans!C2:C101" ... 

謝謝你的任何幫助,你可以提供!謝麗爾

+0

我認爲要加快VBA的最好辦法是...到不使用VBA:] http://www.contextures.com/xlDataVal02.html – Slai

回答

-1

歡迎來到VBA!

不是一個答案,但這應該會大大加快你的VBA。這將進入調用任何和所有其他VBA例程的子例程。例如,您不會將其放入您引用的功能

添加到您的SUB的頂部:

Dim PrevCalc As XlCalculation 
With Application 
    PrevCalc = .Calculation 
    .Calculation = xlCalculationManual 
    .Cursor = xlWait 
    .Calculate 
    .EnableEvents = False 
    .DisplayAlerts = False 
    '.ScreenUpdating = False ' Not really needed 
End With 

然後將其添加到底部:

With Application 
    .Cursor = xlDefault 
    .Calculate 
    .Calculation = PrevCalc 
    '.ScreenUpdating = True 'Not really needed 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With