2017-10-17 65 views
2

晚上都更有效的方法,以複製功能VBA/Excel中

我有一些代碼,我已經工作了一點麻煩,想知道是否有人將能夠幫助我。

我有一個Excel工作表,我需要使用Vlookup自動添加框大小,然後鎖定單元格,除非選擇了「其他」,並在公式刪除後替換它們。一切正在完美地爲每條線分別編寫代碼。不過,我需要運行這700多行,我不寫這700次,因爲這是荒謬的。我試過各種循環來解決這個問題,但我被困住了。

有人可以告訴我如何有效地運行這個x的行數? 因此,這對第11行非常適用,並且當寫入x次時它適用於多行。當解決方案出現時,我可能會踢自己,這太令人沮喪了。

Private Sub lock_repair(ByVal Target As Range) 
'Box 1 
ActiveSheet.Unprotect Password:="pass" 
If Target.Cells(1).Address = "$C$11" And Target.Cells(1).Value <> "OTHER" Then 
    Range("D11").Formula = "=IFERROR(VLOOKUP(C11, Data!$D$5:$G$24, 2,FALSE),0)" 
    Range("E11").Formula = "=IFERROR(VLOOKUP(C11, Data!$D$5:$G$24, 3,FALSE),0)" 
    Range("F11").Formula = "=IFERROR(VLOOKUP(C11, Data!$D$5:$G$24, 4,FALSE),0)" 

    ActiveSheet.Range("D11:F11").Locked = True 

ElseIf Target.Cells(1).Address = "$C$11" And Target.Cells(1).Value = "OTHER" Then 

    ActiveSheet.Range("D11:F11").Locked = False 


End If 
ActiveSheet.Protect Password:="pass", UserInterfaceOnly:=True 

End Sub 

提前歡呼。 Dave

回答

0

你是對的。您需要首先在備份上進行測試。

Private Sub lock_repair(ByVal Target As Range) 
    'Box 1 
    ActiveSheet.Unprotect Password:="pass" 
    If Target.Cells(1).Column = 3 And Target.Cells(1).Value <> "OTHER" Then 
     Range("D" & Target.Row).Formula = "=IFERROR(VLOOKUP(C" & Target.Row & ", Data!$D$5:$G$24, 2,FALSE),0)" 
     Range("E" & Target.Row).Formula = "=IFERROR(VLOOKUP(C" & Target.Row & ", Data!$D$5:$G$24, 3,FALSE),0)" 
     Range("F" & Target.Row).Formula = "=IFERROR(VLOOKUP(C" & Target.Row & ", Data!$D$5:$G$24, 4,FALSE),0)" 

     ActiveSheet.Range("D" & Target.Row & ":F" & Target.Row).Locked = True 

    ElseIf Target.Cells(1).Column = 3 And Target.Cells(1).Value = "OTHER" Then 

     ActiveSheet.Range("D" & Target.Row & ":F" & Target.Row).Locked = False 


    End If 
    ActiveSheet.Protect Password:="pass", UserInterfaceOnly:=True 

    End Sub 
+0

非常感謝! –