我需要在下面的代码中提供建议,以防止粘贴在下拉单元(VBA)上

问题描述 投票:0回答:1

我是VBA的新手。这是代码

Private Sub Worksheet_Change(ByVal Target As Range) 'Does the validation range still have validation? If HasValidation(Range("DataValidationRange")) Then Exit Sub Else Application.Undo MsgBox "Error: You cannot paste data into these cells." & _ "Please use the drop-down to enter data instead.", vbCritical End If End Sub

Private Function HasValidation(r) As Boolean 'Returns True if every cell in Range r uses Data Validation On Error Resume Next x = r.Validation.Type If Err.Number = 0 Then HasValidation = True Else HasValidation = False End Function

如果DataValidationRange显然具有数据验证功能,那么“ If HasValidation(Range(“ DataValidationRange”))然后”行将返回false,这意味着应该执行“退出子”。但是显然reutrn的值是错误的,因为sub可以正常工作,这使我想知道那条线是如何工作的。我想念什么?

excel vba dropdown
1个回答
0
投票

您的范围通过值传递,因此到达该行时,它只是在读取范围的内容,而不是整个Range对象。将您的函数开始行更改为

Private Function HasValidation(ByRef r As Range) As Boolean

并且在不使用方括号的情况下对其进行调用(以停止将其转换为值):

If HasValidation Range("DataValidationRange") Then
© www.soinside.com 2019 - 2024. All rights reserved.