標題:
使用 資料>驗證>儲存格的下拉式清單,可以讓下拉顯示窗格增加列數嗎?
[打印本頁]
作者:
sasser
時間:
2010-12-11 15:05
標題:
使用 資料>驗證>儲存格的下拉式清單,可以讓下拉顯示窗格增加列數嗎?
請問使用 資料>驗證>儲存格的下拉式清單,下拉顯示窗格只有8列,超出即須使用捲軸,可以讓下拉顯示窗格增加列數嗎?
[attach]4040[/attach]
作者:
HUNGCHILIN
時間:
2010-12-11 15:58
本帖最後由 Hsieh 於 2010-12-12 23:49 編輯
回復
1#
sasser
基本上這一帖 以前在EXCELHELP 上有人發表過
但目前EXCELHELP以已關版
我將文章貼在這
HUNGCHILIN
檔案連結也沒有了無法下載
使用下列程式 COPY 後 貼到這個檔案中的 THISWORKBOOK 程式區內就可以使用了
----------------------------------------------------------------------------------------
加長 驗證 的長度及寬度
這篇關於驗證的文章 對於驗證有很大的幫助
可以突破excel限制使驗證清單拉長會比較方便
轉貼給各位參考
Option Explicit
Dim oDpd As Object
Dim sFml1
Dim prvTarget As Range
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Const dFixedPos As Double = "0.8"
Const dFixWidth As Double = "16" ' 改變 DropDown 的寬度
Dim vld As Validation
Dim lDpdLine As Long
If Not prvTarget Is Nothing Then
If Not oDpd Is Nothing Then
If oDpd.value = 0 Then
prvTarget.value = vbNullString
Else
prvTarget.value = Range(Mid(sFml1, 2)).Item(oDpd.value)
End If
Set prvTarget = Nothing
End If
End If
On Error Resume Next
oDpd.Delete
sFml1 = vbNullString
Set oDpd = Nothing
On Error GoTo 0
If Target.Count > 1 Then
Set oDpd = Nothing
Exit Sub
End If
Set vld = Target.Validation
On Error GoTo Terminate
sFml1 = vld.formula1
On Error GoTo 0
Set prvTarget = Target
lDpdLine = Range(Mid(sFml1, 2)).Rows.Count
With Target
Set oDpd = ActiveSheet.DropDowns.Add( _
.Left - dFixedPos, _
.Top - dFixedPos, _
.Width + dFixWidth + dFixedPos * 2, _
.Height + dFixedPos * 2)
End With
With oDpd
.ListFillRange = sFml1
.DropDownLines = lDpdLine
.Display3DShading = True
End With
Terminate:
End Sub
複製代碼
轉帖自 excelhelp
作者:
HUNGCHILIN
時間:
2010-12-11 15:59
這個要用VBA才辦的到 此帖要轉到VBA版
作者:
sasser
時間:
2010-12-12 10:52
回復
3#
HUNGCHILIN
感謝版主指導, 測試ok, 解決了我的困擾, 不過內容尚未完全參透, 需要再花點時間研究
作者:
sasser
時間:
2010-12-12 11:31
回復
2#
HUNGCHILIN
發現一個狀況, 當同一儲存格已輸入完成, 若再選取該儲存格時, 則原先內容會被清空, 請問有解嗎?
[attach]4068[/attach]
作者:
FAlonso
時間:
2010-12-12 21:09
本帖最後由 FAlonso 於 2010-12-14 12:25 編輯
If Not prvTarget Is Nothing Then
If Not oDpd Is Nothing Then
If oDpd.value = 0 Then
prvTarget.value = vbNullString
Else
prvTarget.value = Range(Mid(sFml1, 2)).Item(oDpd.value)
End If
Set prvTarget = Nothing
End If
End If
On Error Resume Next
oDpd.Delete
sFml1 = vbNullString
Set oDpd = Nothing
On Error GoTo 0
複製代碼
這段程式怎麼解,想了很久都沒頭緒
還有這個VBA似乎有一個後遺症,就是當click有下拉式清單格子時,它會自動增加一個下拉式清單(及其編號也節節上升),搞得該格子滿是清單,混亂至極
有沒有辦法把清單的.listfullrange及.dropdownlines設定replace掉就算了?
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)