返回列表 上一主題 發帖

[發問] 如何讓下拉選單選取後自動跳到儲存格相對應處?

回復 38# c_c_lai

我下載你提供的檔案,Sheet2!A欄 是沒有設定 資料驗證清單,
所以 Worksheet_SelectionChange 判斷所選儲存格沒有設定 資料驗證清單,就沒有作用

重設 資料驗證清單 儲存,在打開仍會存在。

程式中有下面這一段,但都沒有被呼叫,我也沒有仔細研究,所以一直以為VBA應該會將  資料驗證清單 自動設好。
Sub CellValidation()      '  stillfish00 提供
    With Sheets("Sheet2").[A2:A25].Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:="=Sheet1!$A$3:$A$20"
    End With
End Sub

以這例子可能一開始是使用  資料驗證清單 ,後來改用COMBOBOX來替代 資料驗證清單,
讓我一直搞不清楚(VBA功力太弱),既然使用COMBOBOX來當 驗證清單,為何又要設定儲存格的  資料驗證清單,
感覺2個相同功能互疊在一起。
總之謝謝你一直耐心回覆我的問題,感謝
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

看了 ML089, c_c_lai,stillfish00三位的討論,關鍵是舊版Excel開啟新版檔案的控制項是無法使用.
我是2003版就常遇這狀況,解決方式
將新版檔案的資料複製(文字,格式,不含控制項)在一新增舊版活頁簿,(舊版控制項再一一新增上去,程式碼複製到VBA裡)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 41# ML089
別客氣,大家互相學習。
看了你與 stillfish00 大大的訊息,亦讓我從中學習到很多我沒想到的突發狀況,
因我不是原創者 (av8d 大大) 所以只單純的套用現成的程式 (因原本只是協助 av8d 解決他的提問),
竟沒想到會沿生出 ActiveCell.Validation.Formula1 的異狀。剛剛從外頭回到家看了你們的對談內容,
不禁亦想到為何不去使用由 stillfish00 大大提供的 CellValidation() ,在 StrVdFml 判斷之前加入它,
這麼一來管它原本的 ActiveCell.Validation.Formula1 有否資料,於 CellValidation() 執行後,
它便自動把 A2:A25 的資料驗證資料一一寫入 "=工作表1!$A$3:$A$20" 連結參造字串。
如此一來接下來的作業便迎刃而解了。

TOP

回復 41# ML089
A2:A25 的欄位與 ComboBox1:ComboBox 是相互依存的。
欄位資料的資料驗證,一般應用於測試資料及驗證,以確認運作正確無誤。
此處之運用是使用 "事先設定的清單範圍 ("=Sheet1!$A$3:$A$20")" 做為
資料驗證的內存值,提供給後續處理之 ComboBox1 的 LinkedCell、以及
ListFillRange 資訊。 LinkedCell對應的是使用者目前點選的 A 欄位,
譬如目前是位於 A4 欄位,則此處 LinkedCell 對應的內容值為 $A$4,
同時 ListFillRange 對應的內容值則為 Sheet1!$A$3:$A$20。
這時使用者如點選 "下拉符號",ComboBox1 則隨即展開 ListFillRange
對應的欄值 (A2:A25 的欄值內容) 清單供使用者點選。
點選完成後隨即自動將點選欄值寫入到 LinkedCell 對應的欄位內。
總結、應用 CellValidation() 將 "=Sheet1!$A$3:$A$20" 同時寫入至
A2:A25 的 .Validation.Formula1,然後再利用此資料驗證一一帶入到
每次執行的 ComboBox1 中。
(如此、A2:A25 以及 ComboBox1 都可不用事先去做任何設定值的動作,
而全部交由 CellValidation() 去處理、及給值。)
如此說明是否對你有所助益?

TOP

回復 44# c_c_lai

謝謝說明,已經了解問題所在
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題