Excel VBA使用命名范围报错:运行时错误'1004'求助
VBA命名范围控制单元格格式报错解决方案
我尝试用命名范围控制单元格格式,但未达到预期效果:
未使用命名范围的正常代码
这段COLOR_PATCH子程序可正常运行,功能是将指定单元格区域的填充色设置为当前活动单元格中的十六进制颜色值:
Sub COLOR_PATCH() ' ' 将指定单元格区域的填充色设置为当前活动单元格中的十六进制颜色值 ' Dim XX As String 'XX 是RGB颜色的十六进制值 If ActiveCell.Value <> "" Then XX = ActiveCell.Value Range("$L$8:$R$31").Interior.Pattern = xlSolid Range("$L$8:$R$31").Interior.PatternColorIndex = xlAutomatic Range("$L$8:$R$31").Value = XX Range("$L$8:$R$31").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With Range("$L$8:$R$31").Interior.Color = HexToRGB(XX) 'HexToRGB 是将十六进制转RGB的自定义函数 Range("$L$8:$R$31").Interior.TintAndShade = 0 Range("$L$8:$R$31").Interior.PatternTintAndShade = 0 End If End Sub
使用命名范围后的报错代码
创建命名范围后运行时出现Run-time error '1004',提示“Method 'Range' of Object '_Global' failed”,错误代码如下:
Sub COLOR_PATCH() Dim CBLOCK As Range Dim XX As String Set CBLOCK = Range("$L$8:$R$31") If ActiveCell.Value <> "" Then XX = ActiveCell.Value Range(CBLOCK).Interior.Pattern = xlSolid Range(CBLOCK).Interior.PatternColorIndex = xlAutomatic Range(CBLOCK).Value = XX Range(CBLOCK).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With Range(CBLOCK).Interior.Color = HexToRGB(XX) Range(CBLOCK).Interior.TintAndShade = 0 Range(CBLOCK).Interior.PatternTintAndShade = 0 End If End Sub
错误原因与修正方案
错误原因
你已经将CBLOCK定义为Range对象并赋值了目标单元格区域,却错误地使用Range(CBLOCK)去调用该区域——Range()函数接受单元格地址字符串或另一个Range对象的引用,但直接使用已定义的CBLOCK对象即可,无需嵌套Range()。
修正后的代码
同时优化代码,避免不必要的Select操作,直接通过With语句操作CBLOCK对象:
Sub COLOR_PATCH() Dim CBLOCK As Range Dim XX As String Set CBLOCK = Range("$L$8:$R$31") If ActiveCell.Value <> "" Then XX = ActiveCell.Value With CBLOCK .Interior.Pattern = xlSolid .Interior.PatternColorIndex = xlAutomatic .Value = XX .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Interior.Color = HexToRGB(XX) .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With End If End Sub
内容的提问来源于stack exchange,提问作者C0ppert0p
相关产品推荐
相关产品推荐

