VBA 代码在非英语系统中不起作用

VBA code not working in non English systems

我有一个 VBA 程序,它在我的电脑和其他英文电脑上都能完美运行。但是当相同的代码在法国计算机上为 运行 时,它会出现 Runtime 1004 错误。我已将 Excel 的主要语言从法语更改为英语,但它显示相同的错误。任何帮助将不胜感激。提前致谢。

范围 M15 到 M25 包含从 0 到 100 的百分比,N15 到 N25 包含从 100 到 0 的百分比

Dim mean1 As String
Dim mean2 As String
If ComboBox1 = "Royal Dutch Shell" Then mean1 = Range("B33")
If ComboBox1 = "Exxon Mobil Corp" Then mean1 = Range("C33")
If ComboBox1 = "PetroChina Co Ltd" Then mean1 = Range("D33")
If ComboBox1 = "British Petroleum" Then mean1 = Range("E33")

If ComboBox2 = "Biogen Inc" Then mean2 = Range("F33")
If ComboBox2 = "Johnson & Johnson" Then mean2 = Range("G33")
If ComboBox2 = "Pfizer Inc" Then mean2 = Range("H33")
If ComboBox2 = "GlaxoSmithKline" Then mean2 = Range("I33")



Sheets("EfficientFrontier").Select

**Runtime Error 1004 starts from here**

   Range("o15").Formula = "=M15 * " & mean1 & " + N15 * " & mean2 & "" 
   Range("o16").Formula = "=M16 * " & mean1 & " + N16 * " & mean2 & ""
   Range("o17").Formula = "=M17 * " & mean1 & " + N17 * " & mean2 & ""
   Range("o18").Formula = "=M18 * " & mean1 & " + N18 * " & mean2 & ""
   Range("o19").Formula = "=M19 * " & mean1 & " + N19 * " & mean2 & ""
   Range("o20").Formula = "=M20 * " & mean1 & " + N20 * " & mean2 & ""
   Range("o21").Formula = "=M21 * " & mean1 & " + N21 * " & mean2 & ""
   Range("o22").Formula = "=M22 * " & mean1 & " + N22 * " & mean2 & ""
   Range("o23").Formula = "=M23 * " & mean1 & " + N23 * " & mean2 & ""
   Range("o24").Formula = "=M24 * " & mean1 & " + N24 * " & mean2 & ""
   Range("o25").Formula = "=M25 * " & mean1 & " + N25 * " & mean2 & ""

如果第 33 行的单元格包含百分比,则您得到的值为小数 (25% -> 0.25)。因此,当您连接此值以构建公式时,小数点分隔符 ., 会出现问题。 , 是 Excel 公式中的关键字符。因此,它打破了公式

尝试通过将变量 mean1mean2 转换为字符串并将 , 替换为 . 来解决此问题。然后使用这些字符串来构建您的公式

Dim sMean1, sMean2 as String
sMean1 = Replace(CStr(mean1), ",", ".")
sMean2 = Replace(CStr(mean2), ",", ".")
Range("o15").Formula = "=M15 * " & sMean1 & " + N15 * " & sMean2

其他提示:

  • 以空字符串的串联结束公式& ""没用
  • 您可以使用 For 循环代替 Range("o15")Range("o16")、...
  • 来编写公式
For i = 15 To 20
    ' Column "O" is the 15th column
    Cells(i, 15).Formula = "=M" & i & " * " & sMean1 & " + N" & i & " * " & sMean2
Next i
  • Sheets(...).Select 让用户看到宏所做的更改,它会减慢您的程序。您应该更喜欢 With 语法
Dim sMean1, sMean2 as String
sMean1 = Replace(CStr(mean1), ",", ".")
sMean2 = Replace(CStr(mean2), ",", ".")

With Sheets("EfficientFrontier")
    For i = 15 To 20
        ' Column "O" is the 15th column
        ' Note the "." at the beginning of the line below so that the line means Sheets("EfficientFrontier").Cells(i, 15).Formula ...
        .Cells(i, 15).Formula = "=M" & i & " * " & sMean1 & " + N" & i & " * " & sMean2
    Next i
    ' ... other code related to this worksheet
End With