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 公式中的关键字符。因此,它打破了公式
尝试通过将变量 mean1
和 mean2
转换为字符串并将 ,
替换为 .
来解决此问题。然后使用这些字符串来构建您的公式
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
我有一个 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 公式中的关键字符。因此,它打破了公式
尝试通过将变量 mean1
和 mean2
转换为字符串并将 ,
替换为 .
来解决此问题。然后使用这些字符串来构建您的公式
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