Код VBA не работает в системах, отличных от Engli sh - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть программа VBA, которая отлично работает на моем компьютере и других компьютерах Engli sh. Но он выдает ошибку Runtime 1004 , когда тот же код выполняется на французских компьютерах. Я изменил основной язык Excel с французского на английский sh, и все же он показывает ту же ошибку. Любая помощь будет принята с благодарностью. Заранее спасибо.

Диапазон 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 & ""

1 Ответ

3 голосов
/ 25 апреля 2020

Если ячейки строки 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 l oop для написания формулы вместо 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...