Excel Userform从Intranet文件中创buildVBA VLOOKUP

我有一个用户表单上的VBA Vlookup,我希望数据来自保存在Intranet上的Excel文件。

当我尝试使用Intranet上的数据的VLookup时,它的工作原理如下:

 =VLOOKUP(I6,'https://intranet.private.private.uk/folder1/folder2/folder3/Documents/[Contract database.xlsm]AvailableContracts'!$H$9:$L$108,2,FALSE) 

我想将该链接合并到下面的VBA中而不会收到错误消息:

 Private Sub ContractsList_AfterUpdate() If WorksheetFunction.CountIf(Sheet2.Range("A:A"), Me.ContractsList.Value) = 0 Then MsgBox "This contract is not on the list" Me.ContractsList.Value = "" Exit Sub End If 'Lookup values based on first control With Me .TextBox1 = Application.WorksheetFunction.VLookup(Me.ContractsList, Sheet2.Range("A5:E72"), 2, 0) End With End Sub 

引发错误的线是:

 .TextBox1 = Application.WorksheetFunction.VLookup(Me.ContractsList, Sheet2.Range("A5:E72"), 2, 0) 

当我更改Sheet2.Range("A5:E72")公式上面的Intranet链接Sheet2.Range("A5:E72")

您可以使用Application.Match节省大量时间和代码行,请查看下面的代码:

 Private Sub ContractsList_AfterUpdate() Dim WB As Workbook Dim Sht As Worksheet ' set workbook to workbook location at internet (according to your formula) Set WB = Workbooks.Open("https://intranet.private.private.uk/folder1/folder2/folder3/Documents/Contract database.xlsm") Set Sht = WB.Worksheets("AvailableContracts") With Me.ContractsList If Not IsError(Application.Match(.Value, Sht.Range("A:A"), 0)) Then '<-- value found in Column A 'Lookup values based on first control Me.TextBox1 = Sht.Range("C" & Application.Match(.Value, Sheet2.Range("A:A"), 0)).Value Else '<-- value not found in Column A MsgBox "This contract is not on the list" .Value = "" Exit Sub End If End With End Sub 

下面将打开工作簿,并允许您像其他工作簿一样使用它。 我更新了您的代码,以包含您在上面的VLOOKUP提供的新工作簿和范围。 我不认为VBA会让你做你希望的查询。

 Private Sub ContractsList_AfterUpdate() Dim wb as Workbook Set wb = Workbooks.Open("https://intranet.private.private.uk/folder1/folder2/folder3/Documents/Contract database.xlsm") If WorksheetFunction.CountIf(Sheet2.Range("A:A"), Me.ContractsList.Value) = 0 Then MsgBox "This contract is not on the list" Me.ContractsList.Value = "" Exit Sub End If 'Lookup values based on first control With Me .TextBox1 = Application.WorksheetFunction.VLookup(Me.ContractsList, wb.Sheets("AvailableContractsRange").Range("H9:L108"), 2, 0) End With End Sub 

这个怎么样? 你也应该确定工作簿。

  Private Sub ContractsList_AfterUpdate() If WorksheetFunction.CountIf(Workbooks("Contract database").sheet2.Range("A:A"), Me.ContractsList.Value) = 0 Then MsgBox "This contract is not on the list" Me.ContractsList.Value = "" Exit Sub End If 'Lookup values based on first control With Me .TextBox1 = Application.WorksheetFunction.VLookup(Me.ContractsList, Workbooks("Contract database").sheet2.Range("A5:E72"), 2, 0) End With End Sub 

看起来你已经评论了你的

 With Me 

行,但这可能只是你的问题的格式。

知道您收到哪条错误消息会很有帮助。