none
VSTO问题,VBA中的代码,如何移植到VS中?多谢! RRS feed

  • 问题

  • 老师您好!

    我在VBA中的代码如下:FistRow = Evaluate("SMALL(IF(" & XhlfxSheet & "!$f$1:$f$200=""序号"",ROW(" & XhlfxSheet & "!$b$1:$b$200)),1)"),用来取得单元格区域B1:B200中,第一个值为“序号”的单元格行行号。

    在VS中提示:未声明“Evaluate”,它可能因保护级别而不可访问。

    请问老师,在VS中,如何使用这个“Evaluate”EXCEL函数?多谢!!!

    2012年2月29日 3:36

答案

全部回复

  • 你好,

    据我所知,这是不可能的。

    VBA 和 VB的区别非常大,并不是说两者之间存在相互转换的关系。 同时,在VSTO中也不存在有调用VBA的方法。VBA 和VB.Net 互为体系。所以在VS中含有VBA中某些特有的方法的可能性不大。不过由于VBA的语法可以看成是VB6的语法,所以某些方法如mid等等还是存在VB.Net中。

    Range.formular属性可能会对你有帮助(抱歉,只有英文的资料): 

    http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.formula(v=office.14).aspx


    No code, No fact.


    2012年3月1日 8:09
  • 多谢老师回复!

    VB.net有什么函数,可以替代这个Evaluate吗?再次感谢!

    2012年3月1日 8:13
  • 你好,

    抱歉现在才看到。

    实际上VB。Net中并没有关于Evaluate相关的函数或是替代品,我之前的给出的Range.formular属性, 你可以将它的返回值赋值给某一个Range的变量,这样同样能达到效果。

    希望这对你有帮助。


    No code, No fact.

    2012年3月9日 8:28
  • 多谢老师赐教!

    在VSTO中,用FistRow = .Range("F:F").Find("序号").Row,可以达到同样的效果。

    只是用的是VBA的FIND方法。还是未能找到在VSTO中,如何应用VBA的函数方法。这方面的应用还是太少了。我想,VSTO对VBA的转型与支持,还是应该有方法的,看来我要系统的学习一下VB了。

    再次感谢您的关注与赐教!祝您身体健康!生活幸福!事业发达!

    2012年3月12日 2:43