大家。我在vba中有以下代码:
With tb.DataBodyRange
MyRangeArray = Array(Worksheets(.Cells(1, 1).Value).Range(.Cells(1, 2).Value), _
Worksheets(.Cells(2, 1).Value).Range(.Cells(2, 2).Value), _
Worksheets(.Cells(3, 1).Value).Range(.Cells(3, 2).Value), _
Worksheets(.Cells(4, 1).Value).Range(.Cells(4, 2).Value), _
Worksheets(.Cells(5, 1).Value).Range(.Cells(5, 2).Value), _
Worksheets(.Cells(6, 1).Value).Range(.Cells(6, 2).Value))
End With
我正在尝试设置" MyRangeArray"一个单元格值,如:
Sheets("Home").Visible = True
MyRangeArray = Range("E1").Value
和我的范围" E1"在Excel中将与代码文本完全相同。
我尝试制作MyRangeArray = Range(" E1")。text(和.text2等等),但不能让它工作。有人可以帮忙吗? 谢谢!
答案 0 :(得分:2)
不,你不能用这种方式从表单执行VBA代码(这是一件好事)。
如果您知道如何编写指向范围的公式,请使用Application.WorksheetFunction
下的函数将其转换为等效的VBA语句。您会发现它在转换后看起来大致相同,并且您通常可以避免以这种方式复制代码,因为您可以将临时结果存储在变量中。
如果您无法转换公式,请使用Application.Evaluate
。如,
Dim v As Variant
v = Application.Evaluate("INDEX(D8:F10, 2, 0)")
会在v
中添加一个包含三个值的数组{。}
但请注意,公式将相对于活动工作表进行解析。您经常want to avoid that,这就是您希望将公式转换为VBA语句的原因。
如果您不想打字D9:F9
,请使用方括号:
Application.Evaluate