Background:
刚才,我回答了一个问题,我必须将两个相同大小的数组相乘。但是我注意到我的本地小数分隔符存在一个特殊问题。
Sample Code:
Sub Sample()
Dim arr1 As Variant, arr2 As Variant, arr3 As Variant, arr4 As Variant
arr1 = Array(1, 2, 3)
arr2 = Array(0.4, 0.3, 0.2)
'Working method for static
arr3 = Evaluate("{1,2,3}*{0.4,0.3,0.2}")
'Failing method for dynamic
arr4 = Evaluate("{" & Join(arr1, ",") & "}*{" & Join(arr2, ",") & "}")
End Sub
Issue:
Whereas arr3
将正确填充,arr4
不会并且会出现很多错误。原因是我的区域设置小数点分隔符。
只是一个简单的Debug.Print arr2(1)
将返回0,4
。没什么大不了的,因为 VBA 仍然可以使用以本机 (en_us) 点作为小数分隔符输入的变量。
问题是Debug.Print Join(arr2, ",")
将返回:0,5,0,4,0,3
。正如您所看到的,VBA 本来需要处理的点现在全部变成了逗号。这反过来又不能正常工作.Evaluate
这将期望原生点。
Question:
在不改变的情况下解决这个问题的任何方法Application.DecimalSeperator
或者编写一个字符串值(我现在做了什么来克服这个问题),这在动态检索数组的情况下并不是很好?
根据要求,可以找到 linkedin 帖子here https://stackoverflow.com/a/59323867/9758194这基本上归结为添加一些变量来插入书面值字符串,例如:str = {0.4,0.3,0.2}
Edit:
我可以解决这个问题的另一种方法是使用TEXTJOIN
,而不是Join
实际上保留了点:
arr4 = Evaluate("{" & Application.TextJoin(",", True, arr1) & "}*{" & Application.TextJoin(",", True, arr2) & "}")
问题是,并不是每个人都可以使用该功能。因此,虽然可以将其交换给具有不同本地设置的其他人,但他们需要拥有最新的 Excel 版本之一。
另一种使用的方法是循环arr2
,将每个元素与Cstr
然而,这也会将点替换为逗号。