2015-11-06 2 views
1

У меня есть файл Excel с несколькими листами в нем. В каждой ячейке «A1» я сохранил свои формулы в виде текста в формате:Преобразование ячейки в формулу с заменой

% = TR ('Sheet 1'! C1; 'Sheet 1'! $ F $ 1: $ F $ 5; "Frq = D SDate = # 1 EDate = # 2 Curn = EUR CH = Fd "; $ B $ 1; 'Sheet 1'! $ D $ 1; 'Sheet 1'! $ E $ 1)

Я сохранил их в таком формате на поскольку формулы позволяют подключаться через Add-In (xlam) к базе данных (Thomson Reuters Eikon) и используются для извлечения данных из этой базы данных. Если у меня есть все в файле без% -character, они выполняются сразу и сбой файлов. Поэтому я хочу написать VBA, который удаляет символ (%) на каждом листе один за другим, поэтому ждет около 1 или 2 минут, пока формула на предыдущем листе не извлечет данные. Я пробовал несколько способов, но никто из них не работал.

Во-первых, я пытался заменить символ с этим кодом:

Dim SearchValue As String 
Dim NewValue As String 

SearchValue = "%" 
NewValue = "" 

Selection.Replace What:=SearchValue, Replacement:=NewValue,  
LookAt:=xlPart, _ 
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
ReplaceFormat:=False 

и этот код:

Range("B1").Replace "%", "" 

Но это только идет, если я вызываю окно поиска и замены и нажмите кнопку вручную.

Application.Dialogs(xlDialogFormulaReplace).Show "%", "" 

Как можно использовать поле поиска и замены макросом?

Кроме того, я попытался сгенерировать формулу с добавлением «=» в TR («Лист 1»! C1; «Лист 1»! $ F $ 1: $ F $ 5; "Frq = D SDate = # 1 EDate = # 2 Curn = EUR CH = Fd "; $ B $ 1; 'Лист 1' $ D $ 1; 'Лист 1' $ E $ 1), как это:

myformula = Cells(1, 1).Value 
Range("B1").Select 
ActiveCell.Formula = "=" & myformula 

мне не удалось либо ...

!

Есть ли другая возможность заменить символ %?

ответ

1

Запишите замену в Range.Formula property.

with selection.cells(1) 
    .formula = replace(.value, chr(37), vbnullstring) 
end with 

With Sheets("Sheet1").Cells(1, 1) 
    .Formula = Replace(.Value, Chr(37), vbNullString) 
End With 

'for non-US-EN systems you need to use comma list separators with .Formula 
With Sheets("Sheet1").Cells(1, 1) 
    .Formula = Replace(Replace(.Value, Chr(37), vbNullString), Chr(59), Chr(44)) 
End With 

'for non-US-EN systems you can also use .FormulaLocal 
With Sheets("Sheet1").Cells(1, 1) 
    .FormulaLocal = Replace(.Value, Chr(37), vbNullString) 
End With 

Установка формул VBA очень ориентирована на США-ЕС; он ожидает, что вы используете формулу в системе EN-US. Вы можете изменить разделители списков формул с полуколоней на запятую или использовать Range.FormulaLocal property, чтобы разместить разделители списка с запятой.

+0

Спасибо, я попробую и расскажу об успехе позже. – In777

+0

К сожалению, это не сработало. Я использовал «Листы» («Лист1»). Ячейки (1, 1) .Formula = Replace (Таблицы («Лист1»). Ячейки (1, 1) .Value, Chr (37), vbNullString) 'и я получил« Runtime ошибка 1004 ". – In777

+0

Существует проблема с формулой. Я проверил это на более простой формуле (например, '% = SUM (B2: B4)'), и он работал, как ожидалось. Если формула верна, то не должно быть разницы в сложности формулы. [править] Если это не будет формулой массива. – Jeeped

Смежные вопросы