[英]Excel Userform VBA VLOOKUP from intranet file
我在用戶表單上有一個VBA Vlookup,我希望從中獲取數據來自保存在Intranet上的excel文件。
當我嘗試VLookup
這需要Intranet上的數據,其工作原理如下:
=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)
當我在Excel VLookup
公式中使用上面的Intranet鏈接更改Sheet2.Range("A5:E72")
時。
下面將打開工作簿,並允許您像其他任何工作簿一樣使用它。 我更新了您的代碼,以包括新工作簿以及您從上方在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
您可以使用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
這個怎么樣? 您還應該確定工作簿。
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
行,但這可能只是您問題中的格式。
了解收到的錯誤消息會很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.