Как вставить строку, начинающуюся с = в значение ячейки, используя VBA? - PullRequest
0 голосов
/ 22 декабря 2018

Я работаю над сценарием, который вставляет данные различных типов в лист (ws).

Dim ws as Worksheet
Dim Index_Array(0 to 5) As Variant
Dim i as Integer

Set ws = ActiveSheet

Index_Array(0) = "This is some text."
Index_Array(1) = "This is also some text."
Index_Array(2) = "22004"
Index_Array(3) = 42
Index_Array(4) = 2.34657
Index_Array(5) = "=55"       'Yes, this should in fact be a string, not a formula or a number

For i = LBound(Index_Array) To UBound(Index_Array)
    ws.Cells(1, i + 1).Value = Index_Array(i)
Next i

Проблема в том, что когда я пытаюсь вставить строку =55 в ячейку A5, она даетme

Ошибка времени выполнения 1004. Ошибка приложения или объекта.

Сценарий работает отлично, за исключением этого случая, и я верю в этопотому что он пытается сделать это формулой.Я не хочу заставлять все начинаться с символа ', потому что не все является строкой.Есть ли простой способ заставить Excel принимать строку, начинающуюся со знака равенства в качестве значения ячейки?

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Я думаю, что правильный способ состоит в том, чтобы превратить ваше значение в строку из первой точки.
первый путь:

Index_Array(5) = "'=55"

или

Index_Array(5) = cstr("'=55")

если вы не можете изменить данные при его определении и хотите, чтобы это происходило с вашими данными, начинающимися с =, используйте if с left(array(i),1) = "=" и добавьте "'" к первому из них:

For i = LBound(Index_Array) To UBound(Index_Array)
    if left(array(i),1) = "=" then 
        ws.Cells(1, i + 1).value= "'"& array(i)
    else 
        ws.Cells(1, i + 1).value = array(i)
    end if
next i

С уважением,
M

0 голосов
/ 22 декабря 2018

General против Text

Если у вас есть общий формат в ячейках:

For i = LBound(Index_Array) To UBound(Index_Array)
    If i = 5 Then
      ws.Cells(1, i + 1).NumberFormat = "@"
      ws.Cells(1, i + 1).Value = Index_Array(i)
     Else
      ws.Cells(1, i + 1).Value = "'" & Index_Array(i)
    End If
Next
0 голосов
/ 22 декабря 2018

Добавляет 'перед каждым элементом массива и делает его текстом в пользовательском интерфейсе Excel.

так

Dim ws As Worksheet
Dim Index_Array(0 To 5) As Variant
Dim i As Integer

Set ws = ActiveSheet

Index_Array(0) = "This is some text."
Index_Array(1) = "This is also some text."
Index_Array(2) = "22004"
Index_Array(3) = 42
Index_Array(4) = 2.34657
Index_Array(5) = "=55"

For i = LBound(Index_Array) To UBound(Index_Array)
    ws.Cells(1, i + 1).value = "'" & Index_Array(i) ' add a "'" to make it a text value in excel UI
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...