Board logo

標題: [發問] VBA讓用戶選擇vlookup的文件名,資料範圍欄數 [打印本頁]

作者: boomf2    時間: 2019-12-1 19:11     標題: VBA讓用戶選擇vlookup的文件名,資料範圍欄數

現時我在Workbook2.xlsx , Column J2:N2 內, vlookup Datebase.xlsx 的數據.

在空格N2使用VLOOKUP($A:$A,[Database.xlsx]Sheet1!$A:$F,2,0) 來回傳值.
而空格M3等於N2回傳資料範圍欄數+1  => VLOOKUP($A:$A,[Database.xlsx]Sheet1!$A:$F,3,0) 來回傳值.
而空格L3等於N2回傳資料範圍欄數+2  => VLOOKUP($A:$A,[Database.xlsx]Sheet1!$A:$F,4,0) 來回傳值.

Datebase.xlsx , <=每月名稱會有所不同 , 所以我想設置VBA詢問和選擇FILE位置.
Sheet1!$A:$F,2,0<= vlookup資料範圍欄數不一定是第2欄, 所以我想設置VBA詢問 需要回傳第幾欄數的資料  .
Sheet1!$A:$F<=每月範圍會固定 ,一定有columnA開始

可以解答一下嗎? 感激.:(
作者: jcchiang    時間: 2019-12-2 14:20

回復 1# boomf2

功力沒很好,試試看!!
Sub ex()
Application.ScreenUpdating = False
Source1 = Application.GetOpenFilename
x = InputBox("查詢位置")
Workbooks.Open Source1
Windows("Workbook2.xlsm").Activate
r = [a65535].End(3).Row
[N2].Resize(r - 1) = "=VLOOKUP(A2,[" & Dir(Source1) & "]Sheet1!A:F," & x & ",FALSE)"
[M2].Resize(r - 1) = "=VLOOKUP(A2,[" & Dir(Source1) & "]Sheet1!A:F," & x + 1 & ",FALSE)"
[L2].Resize(r - 1) = "=VLOOKUP(A2,[" & Dir(Source1) & "]Sheet1!A:F," & x + 2 & ",FALSE)"
Workbooks(Dir(Source1)).Close False
Application.ScreenUpdating = True
End Sub

我是用M2 & L2,如果要改為M3 & L3,請將M2 & L2改成M3 & L3即可
而空格M3等於N2回傳資料範圍欄數+1&nbsp;&nbsp;=> VLOOKUP($A:$A,[Database.xlsx]Sheet1!$A:$F,3,0) 來回傳值.
而空格L3等於N2回傳資料範圍欄數+2&nbsp;&nbsp;=> VLOOKUP($A:$A,[Database.xlsx]Sheet1!$A:$F,4,0) 來回傳值.
作者: boomf2    時間: 2019-12-2 15:14

謝謝你
想問一下,有方法可以不指定workbook2.xlsm嗎? 因為我檔案名會經常變更.
另外, .End(3).Row 是什麼意思呢?
  1. Windows("Workbook2.xlsm").Activate
  2. r = [a65535].End(3).Row
複製代碼

作者: jcchiang    時間: 2019-12-2 17:01

回復 3# boomf2

調整一下
Sub ex()
Application.ScreenUpdating = False
Source1 = Application.GetOpenFilename
x = InputBox("查詢位置")
r = [a65535].End(3).Row
[N2].Resize(r - 1) = "=VLOOKUP(A2,[" & Dir(Source1) & "]Sheet1!A:F," & x & ",FALSE)"
[M2].Resize(r - 1) = "=VLOOKUP(A2,[" & Dir(Source1) & "]Sheet1!A:F," & x + 1 & ",FALSE)"
[L2].Resize(r - 1) = "=VLOOKUP(A2,[" & Dir(Source1) & "]Sheet1!A:F," & x + 2 & ",FALSE)"
Application.ScreenUpdating = True
End Sub

End(3):end属性,3表示XLUP
作者: boomf2    時間: 2019-12-2 17:25

  1. FilePath = ThisWorkbook.FullName
  2. FileOnly = ThisWorkbook.Name
  3. PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))[/b]

  4. Application.ScreenUpdating = False
  5. Source1 = Application.GetOpenFilename
  6. X = InputBox
  7. Workbooks.Open Source1
  8. [b]Windows("FileOnly").Activate[/b]
  9. R = [a65535].End(3).Row
複製代碼
加了以上粗體的CODE...可是不行.有大大可以幫忙嗎
作者: boomf2    時間: 2019-12-2 17:28

回復  boomf2

調整一下
Sub ex()
Application.ScreenUpdating = False
Source1 = Application.GetOp ...
jcchiang 發表於 2019-12-2 17:01



    成功了=] !!!!!
作者: boomf2    時間: 2019-12-3 13:56

當WORKBOOK/DATA多過3萬行時, 跑很慢...有方法改CODING SPEED UP嗎?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)