2012-10-04 98 views
1

我从一张工作表中获取值并将其放入另一张使用Excel中的宏。我目前有这个工作正常:在Excel和VBA中,如何将单元格的值设置为公式结果而不是公式

sheet.range("B2:B35").Value = "=IF(SUMPRODUCT(--(Raw!$B$11:$B$322=$A2),--(Raw!$D$11:$D$322=All!$B$2),Raw!$H$11:$H$322)<>0,SUMPRODUCT(--(Raw!$B$11:$B$322=$A2),--(Raw!$D$11:$D$322=All!$B$2),Raw!$H$11:$H$322),""-"")" 

它显然,把整个公式作为单元格的值。我想要的只是将公式的结果放入单元格中。我试着在“IF ...”部分添加Evaluate(),但是IF没有正确评估(我在每个单元格中都以“ - ”结尾)。这有可能做或我必须有单独的代码来循环,并将值更改为单元格的值?

回答

3

用途:

sheet.range("B2:B35").Formula = "Your formula here" 

如果不工作,你可能要更改格式(这样做在前):

sheet.range("B2:B35").NumberFormat = "General" 

编辑:

溶液变成在OP的代码之后添加以下行:

sheet.range("B2:B35").value = sheet.range("B2:B35").value 
+0

最初的代码已经在使用.Formula而不是.Value(我在使用Evaluate时都尝试过)。这并没有改变放入单元格的内容。单元格上的格式已经是General,尽管这似乎是自动的;我没有专门通过代码来设置它。 – Kurt

+0

奇怪。如果你运行它,然后选择它并执行以下操作(在直接窗口中):Selection.NumberFormat =“General”,然后Selection.Value = Selection.Value,你会得到什么? – mkingston

+1

修改你稍微说的话:添加sheet.range(“B2:B35”)。Value = sheet.range(“B2:B35”)。Value使它成为一个数字。那就是有效的。我只是希望我不必这样做,因为我在循环中有大约5次以上的代码。好吧。很容易添加一行代码。 – Kurt

相关问题