Board logo

標題: 關於userform的問題 [打印本頁]

作者: owen06    時間: 2014-3-27 11:24     標題: 關於userform的問題

各位大大,小弟做了一個userform如附件,
遇到的問題是在『股票代號』這個欄位,
如果是選擇有對應到的股票代號,下面相關的欄位就會帶出內容來,
但是如果是用自行輸入,且清單裡沒有該代號對應的資料,
下面的欄位我該怎麼設定,才能讓他把其他欄位內容清空,
而不是顯示最接近的內容,造成錯誤。

例如我輸入2354(鴻準),但清單裡並沒這檔股票的資料,
下面的欄位應該要都抓不到資料才對,
可是下面所有的內容卻都顯示2355(敬鵬)的相關資料,
這樣產出來的資料就會造成錯誤了。
煩請各位大大幫忙解惑一下,謝謝~~~
作者: huijuang    時間: 2014-3-27 13:17

Application.VLookup(sel, Sheet1.[a3:s65536], 2, False)會傳回錯誤
但因為On Error Resume Next 的關係,所以程式仍會執行
所以在程式中增加一個判別是否有錯(如下)
  1. Private Sub ComboBox1_Change()
  2. Dim sel As Long
  3. On Error Resume Next
  4. sel = ComboBox1.Text
  5. TextBox2 = Application.VLookup(sel, Sheet1.[a3:s65536], 2, False)
  6. TextBox6 = Application.VLookup(sel, Sheet1.[a3:s65536], 4, False)
  7. TextBox5 = Application.VLookup(sel, Sheet1.[a3:s65536], 9, False)
  8. TextBox3 = Application.VLookup(sel, Sheet1.[a3:s65536], 12, False)
  9. TextBox4 = Application.VLookup(sel, Sheet1.[a3:s65536], 13, False)
  10. If Err <> 0 Then
  11. TextBox2 = ""
  12. TextBox6 = ""
  13. TextBox5 = ""
  14. TextBox3 = ""
  15. TextBox4 = ""
  16. End If
  17. End Sub
複製代碼

作者: owen06    時間: 2014-3-27 14:07

回復 2# huijuang

太好了,可以了,感謝你^^
作者: GBKEE    時間: 2014-3-27 15:49

回復 3# owen06
  1. Dim Rng As Range, Ar()
  2. Private Sub UserForm_Initialize()
  3.     Ar = Array(TextBox2, TextBox6, TextBox5, TextBox3, TextBox4) '控制項置於陣列
  4.     With Sheet1
  5.         Set Rng = .[A3]
  6.         ComboBox1.RowSource = .Range("a3:a" & [a65536].End(3).Row).Address
  7.         ComboBox2.RowSource = .[iv65533:iv65536].Address
  8.     End With
  9. End Sub
  10. Private Sub ComboBox1_Change()
  11.     Dim sel(), i As Integer
  12.     sel = Array(2, 4, 9, 12, 13)
  13.     With ComboBox1  '.ListIndex = -1 不在清單中
  14.         For i = 0 To UBound(Ar)
  15.             Ar(i).Text = IIf(.ListIndex > -1, Rng.Offset(.ListIndex, sel(i) - 1), "")
  16.         Next
  17.     End With
  18.     'TextBox2 = Application.VLookup(sel, Sheet1.[a3:s65536], 2, False)
  19.     'TextBox6 = Application.VLookup(sel, Sheet1.[a3:s65536], 4, False)
  20.     'TextBox5 = Application.VLookup(sel, Sheet1.[a3:s65536], 9, False)
  21.     'TextBox3 = Application.VLookup(sel, Sheet1.[a3:s65536], 12, False)
  22.     'TextBox4 = Application.VLookup(sel, Sheet1.[a3:s65536], 13, False)
  23. End Sub
複製代碼

作者: owen06    時間: 2014-3-28 13:18

回復 4# GBKEE

謝謝版主大大的指導,能否再順便請教一下,
我底下這個附檔裡的程式,該如何讓d1的值顯示為#n/a的時候,
讓d1的儲存格格式變為;;;
目前卡在不知該怎麼設定if [d1]= XXX

另外想請問=if(iserror(vlookup(c1,a1:b3,2,false)),"",(vlookup(c1,a1:b3,2,false))
這個公式有辦法寫在vba裡嗎?我怎麼寫都發生錯誤…
煩請抽空替小弟解答一下,謝謝
作者: GBKEE    時間: 2014-3-28 15:20

回復 5# owen06
  1. If IsError([D1]) Then
  2.     '或是 If [D1].Text = "#N/A" Then
  3.    
  4.     [D1] = "=IF(ISERROR(VLOOKUP(C1,A1:B3,2,FALSE)),"""",VLOOKUP(C1,A1:B3,2,FALSE))"
複製代碼

作者: owen06    時間: 2014-3-28 15:50

回復 6# GBKEE


    瞭解了,再次謝謝版主賜教~




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