VBA如何将单元格值作为模块级别常量?

时间:2016-01-29 08:08:25

标签: excel vba scope namespaces

在模块级空间,我可以直接使用值作为常量。

Private Const AAA As Long = 3

Sub Test()
Debug.print AAA
End Sub

但是,我不能将单元格值用作常量。

Private Const BBB As Long
BBB = Worksheets("sheet1").Cells(1, 1)

Sub Test()
Debug.print BBB
End Sub

我想在模块级空间上定义常量“BBB”,因为该值用于另一个过程。

请告诉我这个或替代方法的解决方案。

4 个答案:

答案 0 :(得分:0)

为什么要将单元格定义为常量?你有特殊原因吗?根据它的性质,单元格值可以改变 - 因此不是常数。

您可以将调用包装为读取模块中函数的单元格,然后从您喜欢的位置调用它。

Public Function GetValue() as variant
    GetValue = Worksheets("sheet1").Cells(1, 1).Value
End if

但您也可以直接从您的呼叫网站拨打电话。

Worksheets("sheet1").Cells(1, 1).Value 

如果使用函数包装方式,则可以在某个call-site调用该调用时设置断点。

除此之外,您还可以定义一个属性来读取单元格并删除写入部分,以便在从代码访问时只读取它。但是如上所示,没有什么可以阻止你访问单元格 - 除非你真的用保护锁定单元格......

希望有所帮助。

答案 1 :(得分:0)

常量需要在声明后赋值,并且我假设因为单元格值可以更改,因此它不能用于声明常量。

如果您只想要最终用户无法操作的数据,您可以解锁所有单元格,保护工作簿,然后锁定要用作常量的特定单元格。

答案 2 :(得分:0)

您可以这样解决方法:

Guid?

答案 3 :(得分:0)

您应该将常量赋值给某个值,然后就不能更改它。并且您不能从这样的过程或函数中分配值:

BBB = Worksheets("sheet1").Cells(1, 1)

关于范围,它们是必须设置的变量。一个好主意,设置一个恒定的范围是将它放在一个void函数中并像这样调用它:

Function BBB () As Range 
    Set BBB = Worksheets("ale").Range("aleale") 
End Function 

Public sub aaa
    dim my_value
    my_value = BBB
    debug.print (my_value)
End sub 

因此,它就像一个常数,但并不完全,但它适合你的想法。