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
行,但这可能只是你的问题的格式。
知道您收到哪条错误消息会很有帮助。