VB6中的查找功能

问题描述:

我在一个名为“Employee_States_File”的excel文件中有一个表。该表包含两列名称和状态。两列都填充了数据。省表中包含诸如“NE,WA”等国家的缩写。我有另一个名为“States_File”的excel文件,其中包含一个具有两列的表格:缩写和FullStateName。该表被认为是一个查找表,以查找基于缩写的完整状态名称。现在,我想在VB6中编写代码,以便当用户单击某个按钮时,Excel文件“Employee_States”的表中的所有缩写名称都将根据Excel工作表的查找表更改为完整状态名称“ States_File”。 它有道理吗? 请帮忙,VB6中的查找功能

+0

这些是Excel文件? XLS或XLSX?为什么不使用[Excel VLOOKUP函数](http://office.microsoft.com/zh-cn/excel-help/vlookup-HP005209335.aspx)并直接在Excel中执行? – MarkJ 2010-09-30 08:24:09

+0

我确实使用了VLOOKUP功能。然而,它让我疯狂,因为它能处理大约一半的记录,然后它给了我一个错误:“无法获得Worksheet函数类的vlookup属性”。我被告知这个错误意味着VLOOKUP函数在查找表的第一列中找不到值的匹配。当我手动更改该值并将其替换为先前找到的值时,它仍然挂在那里。我不知道为什么它给了我那个错误信息。我正在使用XLS文件。任何想法? 。我不能直接在Excel中执行此操作。 – guest1 2010-09-30 15:20:55

如果您可以将它们转换为csv文件(逗号分隔文本文件),您可以使用Jet数据库引擎并执行正常的SQL连接。

我用它来设置连接。

Public Function OpenTextConnection(ByVal FileName As String) As Connection 
    Dim FSO As FileSystemObject 
    Dim DBFolder As String 
    Dim TS As TextStream 

    Set FSO = New FileSystemObject 
    DBFolder = FSO.GetParentFolderName(FileName) 

    If FSO.FileExists(FSO.BuildPath(DBFolder, "Schema.ini")) Then 
     FSO.DeleteFile (FSO.BuildPath(DBFolder, "Schema.ini")) 
    End If 

    Set TS = FSO.CreateTextFile(FSO.BuildPath(DBFolder, "Schema.ini")) 
    TS.WriteLine "[" & FSO.GetFileName(FileName) & "]" 
    TS.WriteLine "Format=CSVDelimited" 
    TS.WriteLine "ColNameHeader = True" 
    TS.WriteLine "MaxScanRows = 0" 
    TS.Close 

    Set OpenTextConnection = New Connection 


    If FSO.FolderExists(DBFolder) Then 
     OpenTextConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFolder & ";Extended Properties=""text;HDR=Yes;FMT=Delimited;"";" 
    Else 
     MsgBox DBFolder & " Does not exists.", vbExclamation 
    End If 

End Function 

每个文件都是连接中的表,您可以执行SQL连接。注意这个例子只是简单地打开一个表格。您可以使用任何有效的SQL语法。

Dim DB1 As Connection 
Dim TB As Recordset 
Dim FSO As FileSystemObject 
Dim tImport As New DBImportList 
Set FSO = New FileSystemObject 
Set tImport = New DBImportList 
If FSO.FileExists(FileName) Then 
    Set DB1 = OpenTextConnection(FileName) 
    Set TB = New Recordset 

    TB.Open "SELECT * FROM [" & FSO.GetFile(FileName).Name & "]", DB1, adOpenKeyset, adLockOptimistic, adCmdText 

End If 
+0

有没有办法在不将它们转换为csv的情况下使用.xls文件?仅当用户安装了Microsoft Office时,才可以使用 – guest1 2010-09-29 19:12:05

+0

。您可以使用Excel导出的com库直接访问.xls文件。我不推荐这种简单的表查找,因为它引入了不需要的依赖关系。 – 2010-10-01 12:57:09