将值从用户窗体中的RefEdit控件传递到变量数组

时间:2018-12-20 16:30:03

标签: arrays excel vba excel-vba userform

我正在尝试使用以下语句将范围从用户窗体中的RefEdit控件传递到VBA中的数组:

y0 = Range(RefEdit1.value)

我认为通过使用.Value属性,这将排除用户在RefEdit1中所做的选择中的格式化,而原始的,未格式化的值将存储在y0中。但是,这不会发生:当我测试它并选择一个具有货币值的范围时,格式存储在y0中,当然,这对于将来的计算是有问题的。

我什至尝试过:

y0 = Range(RefEdit1.value).value

但是那也不起作用。感谢您的协助。

==============================

感谢您的回复。请参见下面的屏幕截图。使用RefEdit1选择货币格式为M2:M21的数值。注意功能栏中打印的实际值(红色框中突出显示):这些是我要存储在y0中的值(原始,无格式,未环绕的值):

enter image description here

代码如下:

enter image description here

这是打印到P35的值:

enter image description here

它不仅保留了不需要的格式,而且对值进行了四舍五入。有任何想法吗?重要说明:该特定应用程序的标准功能是用户可以选择包括列名称。因此,此选择中的前导元素通常(并非总是)是字母。这可能是问题的有效因素吗?

==============================

根据Michal的最新回复,我尝试了以下方法,但问题仍然存在。

enter image description here

enter image description here

非常感谢您提供进一步的帮助。

2 个答案:

答案 0 :(得分:0)

不确定是否能满足您的需求,但似乎可行:

Option Base 1

Private Sub CommandButton1_Click()

    Dim y0() As Double
    Dim rng As Range

    Set rng = Range(RefEdit1)

    ReDim y0(rng.Count)

    For a = 1 To rng.Count
       y0(a) = rng.Item(a)
    Next

    Range("H2").Resize(rng.Count, 1) = Application.Transpose(y0)

End Sub

答案 1 :(得分:0)

经过进一步研究,我发现使用.Value2属性而不是.Value解决了此问题:

enter image description here