2015-11-06 68 views
1

我有一个Excel文件,其中包含多个工作表。在每个“A1”单元中,我将公式保存为文本格式:将单元格转换为替换公式

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

我将它们保存为这种格式因为公式允许通过插件(xlam)连接到数据库(Thomson Reuters Eikon)并用于从此数据库检索数据。如果我将它们全部放入没有%字符的文件中,它们会立刻被执行并且文件崩溃。所以我想写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('Sheet 1'!C1;'Sheet 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公式设置非常以US-EN为中心;它期望您在EN-US系统上使用公式。您可以将公式列表分隔符从分号更改为逗号,或使用Range.FormulaLocal property来更改分号分隔符。

+0

谢谢,我会尝试一下,并在稍后报告成功。 – In777

+0

不幸的是,它没有奏效。我使用'Sheets(“Sheet1”)。Cells(1,1).Formula = Replace(Sheets(“Sheet1”)。Cells(1,1).Value,Chr(37),vbNullString)'我得到了“Runtime错误1004“。 – In777

+0

配方有问题。我用一个更简单的公式(例如'%= SUM(B2:B4)')测试了它,它按预期工作。如果公式有效,那么公式的复杂性应该没有差别。除非预期这是一个数组公式。 – Jeeped