SjofaaSj
Gebruiker
- Lid geworden
- 24 feb 2014
- Berichten
- 44
Via Celvalidatie wil ik een droplist maken die alle sheetnames bevat.
Het aantal sheets kan variëren dus ik wil dit dynamisch maken waarbij de lijst zal updaten bij selectie van het tabblad waar de droplist staat.
Mijn idee was om achter het werkblad een code te zetten die
1. de sheetnames in een array duwt (behalve deze die ik er niet in wil)
2. die array naar een named range omzet
3. waarna ik die named range kan gebruiken voor m'n droplist
Dit is de code die ik so far heb staan in een gewone module:
en deze achter het desbetreffende tabblad
Maar de namedRange resulteer in dit:
De adder onder het gras is wellicht het omzetten vd array naar de lijst voor de named range,
maar ik heb geen idee hoe dit te verhelpen...
[het voorbeeldbestand dat ik wilde uploaden verschijnt niet in bestandenlijst die ik als bijlage kan meegeven]
[het is nochtans slechts een klein .xlsb bestand met 6 sheets waaronder 'LIST' en 'TEST']
Het aantal sheets kan variëren dus ik wil dit dynamisch maken waarbij de lijst zal updaten bij selectie van het tabblad waar de droplist staat.
Mijn idee was om achter het werkblad een code te zetten die
1. de sheetnames in een array duwt (behalve deze die ik er niet in wil)
2. die array naar een named range omzet
3. waarna ik die named range kan gebruiken voor m'n droplist
Dit is de code die ik so far heb staan in een gewone module:
Code:
Sub Sheets_SheetNamesToArray()
Dim i As Integer
Dim shtArray() As Variant
Dim NoListArray As Variant
Dim mySht As Worksheet
Dim myNamedRange As Range
Dim myRangeName As String
Dim NoList1 As String, NoList2 As String
'parameters
myRangeName = "myShtList"
NoList1 = UCase("Test")
NoList2 = UCase("List")
NoListArray = Array(NoList1, NoList2)
'1. create array with worksheet names
ReDim shtArray(Worksheets.Count)
For i = 1 To Worksheets.Count
If Not IsInArray(UCase(Worksheets(i).Name), NoListArray) Then
shtArray(i) = Worksheets(i).Name
End If
Next
'2. pass array to named range
On Error Resume Next
ActiveWorkbook.Names(myRangeName).Delete
On Error GoTo 0
ThisWorkbook.Names.Add Name:=myRangeName, RefersTo:=shtArray
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0))
End Function
en deze achter het desbetreffende tabblad
Code:
Sub Workbook_SheetActivate()
Sheets_SheetNamesToArray
End Sub
Maar de namedRange resulteer in dit:
={#N/B"Blad1""Blad2""Blad3""Blad4"\#N/B\#N/B}
De adder onder het gras is wellicht het omzetten vd array naar de lijst voor de named range,
maar ik heb geen idee hoe dit te verhelpen...
[het voorbeeldbestand dat ik wilde uploaden verschijnt niet in bestandenlijst die ik als bijlage kan meegeven]
[het is nochtans slechts een klein .xlsb bestand met 6 sheets waaronder 'LIST' en 'TEST']