我在设计这个我正在制作的小报告时遇到了麻烦。是否可以在Excel VBA中为Range对象创建一个变量,用于将格式应用于另一个Range?这是我的例子:作为对象存储范围属性?
我创建从Microsoft脚本运行时库的字典:
Dim d as Scripting.Dictionary
有了这个我添加标签,值和(尝试添加)的范围。
Dim rng as Range
rng.Font.Bold = True
d.Add 1, Field("test1", 12345, rng)
rng.Font.Bold = False
d.Add 2, Field("TestTwo", "Testing field", rng)
rng.HorizontalAlignment = xlCenter
d.Add 3, Field("threeeee", 128937912, rng)
Dim key As Variant
For Each key In d.keys
Range("A" & key).value = d(key).Label
Set Range("B" & key).value = d(key).rng
Next key
这里是我的现场功能:
Private Function Field(Label As String, val As Variant, rng As Range) As cField
Dim f As New cField
f.Label = Label
f.val = val
Set f.rng = rng
Set Field = f
End Function
这里是我的cField类:
Option Explicit
Dim mVarValue As Variant
Dim mStrLabel As String
Dim mRng As Range
Property Let val(ByVal val As Variant)
mVarValue = val
End Property
Property Get val() As Variant
val = mVarValue
End Property
Property Let Label(ByVal val As String)
mStrLabel = val
End Property
Property Get Label() As String
Label = mStrLabel
End Property
Property Let rng(ByVal val As Range)
Set mRng = val
End Property
Property Get rng() As Range
Dim a As Range
a.value = mVarValue
Set rng = a
End Property
的想法是,在字典中的关键将是该行的位置为领域。这样,如果需要对我制作的报告进行更改,唯一需要更改的是字典中特定值的关键字。我已经成功地存储了标签的价值和价值本身,但我也想存储该范围的格式(粗体,理由,边框等...)。
我得到一个'运行时错误'91':对象变量或块变量未设置'错误紧接在rng声明之后的行上。我想知道如果它不可能有一个通用的范围,没有在工作表上的位置,或者如果不知何故我的语法关闭。
任何帮助将不胜感激! :)
哦,伙计,这是一个伟大的答案,我唯一的问题是我通过Access VBA所以我outputing报告不能嵌入像这样的隐藏表格。 – mandroid 2009-08-31 19:00:53