2017-10-20 74 views
-1

我正在创建几个用户定义函数(UDF's)。我不够熟练,我可以对我自己写代码。但是,在某些情况下,我有兴趣了解Microsoft如何处理输入,防范错误并优化性能。 有谁知道在哪里可以找到Microsoft用于编写标准Excel公式的确切Visual Basic语法?是否有可能为他们的标准Excel公式查看Microsoft VBA代码?

为了说明,下面是我创建模仿VLOOKUP一个UDF,我想它比微软的功能。例如,微软的代码如何分析第一列?它使用单元格循环还是Match函数?它如何处理错误?

Public Function VLookupPGCodeRider(TextInput As String, SearchRange As Range, _ 
ColumnIndex As Integer, PartialMatch As Boolean) As String 
Dim WS As Worksheet, Rcell As Range 
Set WS = Sheets(SearchRange.Parent.Name) 

On Error GoTo BadResult 
If TextInput = "" Or SearchRange Is Nothing Or Not (IsNumeric(ColumnIndex)) Then 
GoTo BadResult 
End If 
On Error GoTo 0 

'I would like to see how MS sets up this loop, or maybe they use match? 
'But then how does match work?? 
For Each Rcell In Intersect(SearchRange.Columns(1), WS.UsedRange).Cells 

    If Not (PartialMatch) Then 'how 99.9% of users use Vlookup 
     If Rcell.Value = TextInput Then 
      VLookupPGCodeRider = Intersect(Rcell.EntireRow, SearchRange.Columns(ColumnIndex)).Value 
      Exit Function 
     End If 

    Else 
     'what is considered a partial match?? 
    End If 

Next Rcell 

'if nothing found or error in the beginning of formula... 
BadResult: 
VLookupPGCodeRider = "#NA" 

End Function 

再说一遍,我不是在寻找答案VLOOKUP具体而言,我只是想看看微软的方法来处理我面临着各种各样的我UDF的类似的公式挑战。

我在Excel的VBA对象浏览器(2013年)检查,我看到了下面的截图,这是不是非常有帮助。当我查看我的Excel安装文件夹时,找不到与工作表命名结构相对应的任何内容。

我想这可能是故意MS不希望共享这些信息,这将是令人失望的,但如果有人是肯定我会很感激的确认。

谢谢。

enter image description here

+1

AFAIK Vba资源由Microsoft保留专有权,并且不公开提供 – Steve

+5

'Excel.WorksheetFunction.VLookup'不是用VBA编写的。它会写成类似于C++的东西。正如Excel自身公式所使用的VLOOKUP功能一样。 – YowE3K

+0

拍摄感谢您的反馈,我标记为有帮助。我认为是这种情况,但我认为这可能很容易解决像工作表或VBA保护。也许有人知道一种方式,所以我会继续质疑一段时间。 – PGCodeRider

回答

5

Excel.WorksheetFunction.VLookup代码等,不是写在VBA。它会写成类似C++的东西。正如Excel本身的公式所使用的VLOOKUP功能一样。

+0

当。我认为它可能在VB.net或我可以利用的东西。 C++不会不幸的。谢谢。 – PGCodeRider

+2

@PGCodeRider Excel文件(所有Office实际上,包括VBA和它的编辑器)上运行的组件对象模型(COM),它是托管代码(即不是.NET),在单个线程上运行。 AAAND它在脖子上一个相当痛苦一起工作([相信我,我知道了!(https://github.com/rubberduck-vba/Rubberduck))=) –

+0

感谢@ Mat'sMug。事实上,这与COM插件有关,实际上,您的GitHub工作可能会被克隆!感谢您的支持。 – PGCodeRider