在Excel里面编写VBA代码,可能会由于疏忽而导致部分错误。
其中,有一种错误叫“二义性名称”;所谓的二义性名称的错误提示,其实指的就是事件名称存在错误。
因为,在VBA里面在同一个地方,不论是过程、宏名、控件的各种事件名称,都必须是唯一的,不能存在重复,如果存在重复,那自然就有错误了,此类称为二义性名称的错误。
下面,就和大家举个简单的例子,如下图的两段代码:
Sub myVBA()
Range("B4:D9").Select
With Selection.Interior
.ColorIndex = 0
.Pattern = xlGray8
.PatternColorIndex = xlAutomatic
End With
Selection.NumberFormatLocal = "0.0%"
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End Sub
Sub myVBA()
With Selection.Font
.Name = "黑体"
.FontStyle = "加粗"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 41
End With
Range("D6").Select
End Sub
如果上述这两段代码在相同的一个EXCEL工作薄的VBA里面,肯定就会报错:发现二义性名称:myVBA
VBA代码内容各不相同,为什么会报错呢?原因就是,这两段代码的过程名称都完全相同,即myVBA。因此,遇到这种情况,你只需要把其中一个myVBA的名称改为其它的即可。或者干脆直接完全删除其中的myVBA一个过程。
此外,类似的错误还存在于控件或工作表的不同的事件名称中,常见的有:Workbook_Open、Workbook_SheetActivate、Workbook_SheetSelectionChange、Worksheet_SelectionChange、Worksheet_Change等等。如果你遇到此类问题,仅需要完整删除其中的一段代码或改名称即可。