我正在尝试创建一个包含常量字符串的文档。
我已经在这样的模块中声明了Public:
Public Abc As String
在“ThisWorkbook”中,我运行以下代码来初始化变量
Private Sub Workbook_Open()
Abc = "C5"
End Sub
我有按钮编码来改变一些值,如:
If Range(Abc) = "" Then
Range(Abc) = 1
Else
Range(Abc) = Range(Abc) + 1
End If
当我使用此代码运行按钮时:
Sub BotaoNovoDia()
i = 3
While i <= 33
If Cells(i, 11) = "" Then
Cells(i, 11) = Range(Apresentacao)
Cells(i, 12) = Range(Aceitacao)
Cells(i, 13) = Range(Aceitou)
Cells(i, 31) = Range("D41")
Cells(i, 11).Interior.Color = Range(Apresentacao).Interior.Color
Cells(i, 12).Interior.Color = Range(Aceitacao).Interior.Color
If Range("K34") < 0.65 Then
Range("K34").Interior.Color = vbRed
Else
Range("K34").Interior.Color = vbGreen
End If
If Range("L34") < 0.45 Then
Range("L34").Interior.Color = vbRed
Else
Range("L34").Interior.Color = vbGreen
End If
Range(Aceitou) = 0
Range(Rejeitou) = 0
Range(NaoApres) = 0
End
Else
i = i + 1
End If
Wend
End Sub
我尝试再次运行第一个按钮我得到并且错误说:“运行时错误'1004':对象'_Global'的方法'范围'失败” 调试按钮将我带到试图访问公共变量值的fisrt行。我该怎么做才能保留Public变量中的值?
答案 0 :(得分:1)
当您致电End
(本身,而不是End If
等的一部分)时,请清除全局。
不要使用End。
答案 1 :(得分:0)
使用命名范围是一个好主意;但是没有理由为什么你的公开声明不起作用 - 除了那个讨厌的End
陈述。(我错过了第一次阅读......)
但是,您的每个功能范围都不明确,例如:哪个工作表是Range引用的,所以如果一个函数在另一个工作表上工作,按下触发“Change”的按钮可能会引用一个不喜欢该引用的不同地方。
e.g。您的范围应该类似于SomeWorkbook.TheWorksheet.Range(<range>)
,当您更改单元格值时,应该使用.Value
来确保没有歧义 - 您可以通过此处搜索得知错误1004是最不具描述性的错误代码......