下午好,
我的VBA上有点生疏,因为我已经开始学习其他语言的编程,所以我希望有人能够帮助我。
我要做什么
我有两张纸。一个是用户填写的表单页面,另一个(Sheet1 ....我没有命名)基本上是一个数据页面。
在Sheet1中,我有一个显示1或0的表,具体取决于表单上的范围是否具有特定选择。单元格值上的两列表示需要输入消息的范围。宏应该找到所有的1,查找找到两列的命名范围并插入命名范围。不幸的是,我不断收到应用程序或对象定义的错误。我的代码如下:
PcentData = Sheets("Sheet1").Range("PcentData").Value
If PcentData > 0 Then
For Each pCell In Sheets("Sheet1").Range("PcentSwitch")
If pCell.Value = 1 Then
With Sheets("Payment-Deduction Form").Range(Cells(pCell.Row, pCell.Column + 2)).Validation 'Error here
.Add Type:=xlValidateInputOnly
.InputTitle = "Test"
.InputMessage = "Test"
End With
End If
Next pCell
End If
编辑:
我已经设法通过定义一个名为NamedRange的字符串并使其等于old with语句,指向正确的工作表来确保代码从正确的工作表中提取命名范围。
Dim NamedRange As String
PcentData = Sheets("Sheet1").Range("PcentData").Value
If PcentData > 0 Then
For Each pCell In Sheets("Sheet1").Range("PcentSwitch")
If pCell.Value = 1 Then
NamedRange = Sheets("Sheet1").Cells(pCell.Row, pCell.Column + 2).Value
MsgBox (Sheets("Sheet1").Cells(pCell.Row, pCell.Column + 2).Value)
With Sheets("Payment-Deduction Form").Range(NamedRange)
If .Validation Then .Validation.Delete
.Validation.Add /* Error Here */ Type:=xlValidateInputOnly
.InputTitle = "Test"
.InputMessage = "Test"
End With
End If
Next pCell
End If
不幸的是我收到错误对象不支持If .validation部分的这个属性或方法。
答案 0 :(得分:1)
也许您可以尝试这样:
PcentData = Sheets("Sheet1").Range("PcentData").Value
If PcentData > 0 Then
For Each pCell In Sheets("Sheet1").Range("PcentSwitch")
If pCell.Value = 1 Then
With Sheets("Payment-Deduction Form").Cells(pCell.Row, pCell.Column + 2).validation
.delete
.Add Type:=xlValidateInputOnly
.InputTitle = "Test"
.InputMessage = "Test"
End With
End If
Next pCell
End If
我删除了.Range
,我已从当前单元格中删除了验证。
答案 1 :(得分:0)
在Vityata的帮助下,我设法找到了解决问题的方法。问题是原始循环占据了我想要从错误的工作表中查找的表的位置。我将它存储在名为“NamedRange”的变量中,并将其插入With语句,而不是尝试将其直接编码到Range()中。
下一个问题是数据验证。似乎不喜欢将.Validation与With语句分开,因此如果我需要对单元格进行多次更改,我将需要多个With语句。这是工作代码:
Dim NamedRange As String
PcentData = Sheets("Sheet1").Range("PcentData").Value
If PcentData > 0 Then
For Each pCell In Sheets("Sheet1").Range("PcentSwitch")
If pCell.Value = 1 Then
NamedRange = Sheets("Sheet1").Cells(pCell.Row, pCell.Column + 2).Value
With ThisWorkbook.Sheets("Payment-Deduction Form").Range(NamedRange).Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "test"
.ErrorTitle = ""
.InputMessage = "test"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Next pCell
End If
感谢您的帮助!