簡體   English   中英

VBA 通過userfrom瀏覽excel個文件並執行Vlookup

[英]VBA browse excel files through userfrom and execute Vlookup

我正在嘗試從我選擇 2 excel 文件並執行 Vlookup 的地方創建用戶表單(如圖所示)。

在此處輸入圖像描述

我嘗試了這段代碼,但它不執行 Vlookup。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Option Explicit

Dim FileToOpen1 As Variant
Dim FileToOpen2 As Variant
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim rng2 As Range
Dim cl As Range


Private Sub BrowseButton1_Click()

FileToOpen1 = Application.GetOpenFilename(Title:="Browse for your file", FileFilter:="Excel Files(*.xls*),*xls*")

If FileToOpen1 <> False Then
    
   TextBox1 = FileToOpen1

End If

End Sub

Private Sub BrowseButton2_Click()


FileToOpen2 = Application.GetOpenFilename(Title:="Browse foy your file", FileFilter:="Excel Files(*.xls*),*xls*")

If FileToOpen2 <> False Then

    TextBox2 = FileToOpen2
 
End If

End Sub

Private Sub OK_Click()

If FileToOpen1 <> False Then
    
     Set wb1 = Application.Workbooks.Open(FileToOpen1)
     
End If

If FileToOpen2 <> False Then
    Set wb2 = Application.Workbooks.Open(FileToOpen2)  
End If

On Error Resume Next

rng1 = wb1.Sheets(1).Range("B3:B8")
Price_row = wb1.Sheets(1).Range("C3").row
Price_clm = wb1.Sheets(1).Range("C3").column

rng2 = wb2.Sheets(1).Range("A3:C8")

For Each cl In rng1
    wb1.Sheets(1).Cells(Price_row, Price_clm) = Application.WorksheetFunction.VLOOKUP(cl, rng2, 2, False)
    Price_row = Price_row + 1
Next cl

End Sub

您缺少兩個變量定義:

Dim Price_row As Long
Dim Price_clm As Long

range 的變量需要用Set賦值

這: Set rng2 = wb2.Sheets(1).Range("A3:C8")而不是這個rng2 = wb2.Sheets(1).Range("A3:C8")

現在,vlookup function in vba 將在找不到值時拋出錯誤。 解決方法是這樣的。

Private Sub OK_Click()

    If FileToOpen1 <> False Then
         Set wb1 = Application.Workbooks.Open(FileToOpen1)
    End If
    
    If FileToOpen2 <> False Then
        Set wb2 = Application.Workbooks.Open(FileToOpen2)
    End If
    
    Set rng1 = wb1.Sheets(1).Range("B3:B8")
    Price_row = wb1.Sheets(1).Range("C3").Row
    Price_clm = wb1.Sheets(1).Range("C3").Column
    
    Set rng2 = wb2.Sheets(1).Range("A3:C8")
    
    For Each cl In rng1
        On Error Resume Next
        vlResult = "" 'Reset variable
        vlResult = Application.WorksheetFunction.VLookup(cl, rng2, 2, False) 'Performs vlookup
        If Not vlResult = "" Then
            wb1.Sheets(1).Cells(Price_row, Price_clm).Value = vlResult
        Else
            wb1.Sheets(1).Cells(Price_row, Price_clm).Value = "N/A"
        End If
        
        Price_row = Price_row + 1
    Next cl

End Sub

*不要忘記也添加變量。

Dim vlResult As String

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM