Board logo

標題: 使用 資料>驗證>儲存格的下拉式清單,可以讓下拉顯示窗格增加列數嗎? [打印本頁]

作者: 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限制使驗證清單拉長會比較方便

轉貼給各位參考
  1. Option Explicit

  2. Dim oDpd As Object
  3. Dim sFml1
  4. Dim prvTarget As Range

  5. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  6.    Const dFixedPos As Double = "0.8"
  7.    Const dFixWidth As Double = "16"    ' 改變 DropDown 的寬度
  8.    Dim vld As Validation
  9.    Dim lDpdLine As Long

  10.    If Not prvTarget Is Nothing Then
  11.        If Not oDpd Is Nothing Then
  12.            If oDpd.value = 0 Then
  13.                prvTarget.value = vbNullString
  14.            Else
  15.                prvTarget.value = Range(Mid(sFml1, 2)).Item(oDpd.value)
  16.            End If
  17.            Set prvTarget = Nothing
  18.        End If
  19.    End If

  20.    On Error Resume Next
  21.    oDpd.Delete
  22.    sFml1 = vbNullString
  23.    Set oDpd = Nothing
  24.    On Error GoTo 0

  25.    If Target.Count > 1 Then
  26.        Set oDpd = Nothing
  27.        Exit Sub
  28.    End If

  29.    Set vld = Target.Validation
  30.    On Error GoTo Terminate
  31.    sFml1 = vld.formula1
  32.    On Error GoTo 0

  33.    Set prvTarget = Target

  34.    lDpdLine = Range(Mid(sFml1, 2)).Rows.Count

  35.    With Target
  36.        Set oDpd = ActiveSheet.DropDowns.Add( _
  37.                                             .Left - dFixedPos, _
  38.                                             .Top - dFixedPos, _
  39.                                             .Width + dFixWidth + dFixedPos * 2, _
  40.                                             .Height + dFixedPos * 2)
  41.    End With
  42.    With oDpd
  43.        .ListFillRange = sFml1
  44.        .DropDownLines = lDpdLine
  45.        .Display3DShading = True
  46.    End With
  47. Terminate:
  48. 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 編輯
  1. If Not prvTarget Is Nothing Then
  2.        If Not oDpd Is Nothing Then
  3.            If oDpd.value = 0 Then
  4.                prvTarget.value = vbNullString
  5.            Else
  6.                prvTarget.value = Range(Mid(sFml1, 2)).Item(oDpd.value)
  7.            End If
  8.            Set prvTarget = Nothing
  9.        End If
  10.    End If

  11.    On Error Resume Next
  12.    oDpd.Delete
  13.    sFml1 = vbNullString
  14.    Set oDpd = Nothing
  15.    On Error GoTo 0
複製代碼
這段程式怎麼解,想了很久都沒頭緒
還有這個VBA似乎有一個後遺症,就是當click有下拉式清單格子時,它會自動增加一個下拉式清單(及其編號也節節上升),搞得該格子滿是清單,混亂至極
有沒有辦法把清單的.listfullrange及.dropdownlines設定replace掉就算了?




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