Excel VBA – 删除内容时强制大写错误

我试图强制一个单元格采取大写的值,这工作,使用下面的代码。

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub Application.EnableEvents = False ActiveSheet.Unprotect Password:="" Target = UCase(Target) Application.EnableEvents = True ActiveSheet.Protect Password:="" 

但是,单元格的内容被删除时(可能需要)我收到以下错误“运行时错误13”:types不匹配“

如果你能对这个问题有所了解,那就太棒了!

目标是一个范围,而不是string(假设您正在使用Worksheet_Change事件)。

应该是一次变化的多个单元,而不是空单元。

当你有一个单独的单元格时,一切正常,因为Target的值评估为Target.Value,一般可以String化。 当你一次更改一个单元格时,Target.Value将返回一个数组,而不是可转换为String。

所以你必须一次改变每个单元格:

 Dim cell as Range, cells as Range Set cells=Intersect(Target, Range("B9", "F10")) If cells Is Nothing Then Exit Sub Application.EnableEvents = False ActiveSheet.Unprotect Password:="" For each cell In cells.Cells Cell.Value = UCase(cell.Value) Next Application.EnableEvents = True ActiveSheet.Protect Password:="" 

我保持我的立场。 原始代码是:

 Target = UCase(Target) 

这意味着你想有目标范围大写。 要做到这一点的方法是通过replace这一行:

 For Each c In Target If VarType(c.Value)=vbString Then c.Value = UCase(c.Value) End If Next 

这使:

 If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub Application.EnableEvents = False ActiveSheet.Unprotect Password:="" Dim c As Range For Each c In Target If VarType(c.Value)=vbString Then c.Value = UCase(c.Value) End If Next Application.EnableEvents = True ActiveSheet.Protect Password:=""