Results 1 to 4 of 4

Data Validation Combo Box - Horizontal Named List

Threaded View

  1. #1
    Registered User
    Join Date
    11-27-2012
    Location
    Los Angeles
    MS-Off Ver
    Excel 2007
    Posts
    7

    Data Validation Combo Box - Horizontal Named List

    I need to create a data validation combo box with an autofill feature. I have the following slightly modified code from the contexture website that works but only when the named lists are vertical. I need to use horizontal named lists because I have more lists than available columns in excel (350). Also I have a macro that creates the horizontal named lists automatically. I have searched multiple forums and it does not look like this issue is solved anywhere, and people just suggest that the lists are recreated vertically. Is it possible to have a data validation combo box run off of a horizontal list?

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim str As String
    Dim cboTemp As OLEObject
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Cancel = True
    Set cboTemp = ws.OLEObjects("TempCombo")
      On Error Resume Next
      With cboTemp
      'clear and hide the combo box
        .ListFillRange = ""
        .LinkedCell = ""
        .Visible = False
      End With
    On Error GoTo errHandler
      If Target.Validation.Type = 3 Then
        'if the cell contains a data validation list
        Application.EnableEvents = False
        'get the data validation formula
        str = Target.Validation.Formula1
        str = Right(str, Len(str) - 1)
        With cboTemp
          'show the combobox with the list
          .Visible = True
          .Left = Target.Left
          .Top = Target.Top
          .Width = Target.Width + 5
          .Height = Target.Height + 5
          .ListFillRange = str
          .LinkedCell = Target.Address
        End With
        cboTemp.Activate
        'open the drop down list automatically
        Me.TempCombo.DropDown
    End If
    
    errHandler:
      Application.EnableEvents = True
      Exit Sub
    
    End Sub
    '=========================================
    Private Sub Worksheet(ByVal Target As Range)
    Dim str As String
    Dim cboTemp As OLEObject
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Set cboTemp = ws.OLEObjects("TempCombo")
      On Error Resume Next
    If cboTemp.Visible = True Then
      With cboTemp
        .Top = 10
        .Left = 10
        .ListFillRange = ""
        .LinkedCell = ""
        .Visible = False
        .Value = ""
      End With
    End If
    
    errHandler:
      Application.EnableEvents = True
      Exit Sub
    
    End Sub
    '====================================
    'Optional code to move to next cell if Tab or Enter are pressed
    'from code by Ted Lanham
    Private Sub TempCombo_KeyDown(ByVal _
            KeyCode As MSForms.ReturnInteger, _
            ByVal Shift As Integer)
        Select Case KeyCode
            Case 9 'Tab
                ActiveCell.Offset(0, 1).Activate
            Case 13 'Enter
                ActiveCell.Offset(1, 0).Activate
            Case Else
                'do nothing
        End Select
    End Sub
    I have attached the following sample file. As you can see the code runs on the vertical list (Market1) but not on the horizontal list (Market).

    Thank you so much for your help!

    Moderator's Note: Welcome to the forum. You have to put code tags around codes. Sleelct the code then hit the "#" sign. I'll do it gor you now. Thanks.
    Attached Files Attached Files
    Last edited by vlady; 11-27-2012 at 10:22 PM. Reason: code tags

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1