VBA поместил буквенное значение строки в ячейку Excel - PullRequest
1 голос
/ 12 февраля 2020

Excel 2010 Есть ли способ поместить буквенное содержимое строковой переменной в ячейку Excel?

Я могу добиться того, что хочу сделать с помощью этого жесткого кода , но это код глубоко внутри вложенных подпрограмм. Я хочу программный код , чтобы содержимое Formula_wanted было вставлено в ячейку. Вот код, который помещает значение формулы в ячейку.

   If modifier1 = "ILMROS " Then
          Range("M4").Select
          ActiveCell.FormulaR1C1 = "Sales Total"
          Range("M5").Select
          ActiveCell.FormulaR1C1 = "=[@701]+[@707]+[@708]+[@709]+[@712]"

Проблема в том, что категории постоянно меняются. Они читаются из 1 таблицы на входном листе. Если бы я мог сделать так, чтобы при изменении категорий нужно было изменять только эту входную таблицу, никому бы не пришлось копаться в коде, чтобы найти возникающую проблему.

Я могу заставить VBA создать строку, которую я хочу внутри переменной, но, пробуя все ниже, я не могу заставить ее поместить строку из переменной в ячейку "M5". Согласно правилам ОС, я включил все, что я пробовал, с полученной ошибкой. СПАСИБО за любую помощь, которую вы можете оказать.

   Dim Formula_wanted as string (also tried Dim as Variant, same results)

    Formula_wanted = "=[@"
              For x = 1 To UBound(ILMROS) - 1
                  Formula_wanted = Formula_wanted & ILMROS(x) & "]+[@"
              Next x
      Formula_wanted = Formula_wanted & ILMROS(UBound(ILMROS)) & "]"

  MsgBox "my formula is:  " & Formula_wanted

   'shows this in msgbox: my formula is: = "=[@701]+[@707]+[@708]+[@709]+[@712]"

   '@@@@@@@@@@@@@@@@@@@@@@

   These all failed:
  Range("Y5").Text = Formula_wanted
     ' error 424
  Range("Y5").Value = Formula_wanted
       error 1004
  Range("y5").Formula = Formula_wanted
      'error 1004
  Range("Y5").FormulaR1C1 = Formula_wanted
      error 1004
  Cells(4, 24).Select
     error 424
  ActiveCell.Text = Formula_wanted
    'error 424

  Set Ob = Range("Y5") ' Ob dim as "object"
    Ob.Value = Formula_wanted
      '1004
 Ob.Text = Formula_wanted
      '1004
  Cells(4, 24).Text = Formula_wanted
      '1004

  ActiveCell.Text = Formula_wanted
         '1004    
  Range("Y5").FormulaLocal = Formula_wanted
      'error 1004

  End Sub

1 Ответ

0 голосов
/ 12 февраля 2020

Не ясно, что пытается сделать ваша формула, но у меня недостаточно репутации, чтобы комментировать. При установке формулы для «= [@ 701] + [@ 707] + [@ 708] + [@ 709] + [@ 712]» создается впечатление, что вы пытаетесь добавить значения из столбцов таблицы с именами 701, 707 et c.

Если это то, что вы делаете, то либо:

a) вы ссылаетесь на столбец, которого нет в таблице; или б) «Y5» отсутствует в таблице.

Если это а), исправьте имена столбцов. Если это б), измените формулу на

"= Таблица1 [@ 701] + Таблица1 [@ 707] + Таблица1 [@ 708] + Таблица1 [@ 709] + Таблица1 [@ 712]"

Если вы пытаетесь сделать что-то еще, например, сослаться на указанную строку c в таблице, то вам, возможно, придется полностью переосмыслить и взглянуть на использование ListObject. Я нашел эту ссылку очень полезной в прошлом.

Полезная ссылка на объект списка

Для дальнейшего пояснения значение формулы в вашей строковой переменной кажется недействительным.

Пример с переменной String, которая работает

Dim validFormulaString As String
validFormulaString = "=1+2"
Range("A1").Formula = validFormulaString

Пример с переменной String, которая не работает, поскольку полученная формула недопустима

Dim invalidFormulaString As String
invalidFormulaString = "=1$2"
Range("A1").Formula = invalidFormulaString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...