2016-11-05 79 views
1

我是VBA的新手,我正尝试创建一个程序来循环遍历具有特定单元格区域的列,并为这些单元格创建数据验证。我选择了“文本长度”选项 - 我希望最小值为1,最大值为单元格引用(但是,单元格引用也应随相应列更改)。这是我迄今为止的 - 从使用宏录制和编辑代码一点。如何循环遍历具有特定单元格范围的列并在VBA中设置数据验证?

我设置了一个范围变量(应该看起来像第一个循环的R16C2:R500C2),以便它在循环列中选择给定的范围。 “Formula2”应该随给定列而改变,但应保留在第14行。

任何帮助表示赞赏!

Sub Validation() 
' 
' Validation Macro 
For i = 2 To 84 
    Dim ranges As String 
    ranges = "R16C" + Str(i) + ":R500C" + Str(i) 
    With ThisWorkbook.Worksheets(1) 

    Columns(i).Select 
     Application.Goto Reference:=Range(ranges).Select 
     With Selection.Validation 
      .Delete 
      .Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _ 
      Operator:=xlBetween, Formula1:="1", Formula2:="=$B$14" 
      .IgnoreBlank = True 
      .InCellDropdown = True 
      .InputTitle = "" 
      .ErrorTitle = "" 
      .InputMessage = "" 
      .ErrorMessage = "" 
      .ShowInput = True 
      .ShowError = True 
     End With 
    End With 

Next i 
End Sub 

回答

0

只使用

Formula2:="=B$14" 

,你不需要任何环路之一:

Sub Validation()    
    With ThisWorkbook.Worksheets(1).Range("B16:CF500").Validation 
     .Delete   
     .Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _ 
     Operator:=xlBetween, Formula1:="1", Formula2:="=B$14" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 
+0

非常感谢你,这工作完美! – hijay

+0

不客气。那么请将回答标记为已接受。谢谢! – user3598756

0

您需要更改以下行

Operator:=xlBetween, Formula1:="1", Formula2:="=$B$14" 

Operator:=xlBetween, Formula1:="1", Formula2:="=$" & Chr(64+i) & "$14"