Dobrý deň
1. stačí si vložiť do excelu svoje údaje s tým, že v prvom stĺpci budú názvy produktov
2. v riadkoch budú ich rôzne typy
3. Makro automaticky zadá tieto riadky do názvov oblastí aj s ošetrením keby náhodou obsahovali medzeru (ostatné nepovolené znaky si musíte už sami ošetriť inak sa zasekne pri definovaní názvov)
4. Môžte aktualizovať a pridávať rôzne druhy a pri znovunačítaní formulára sa automaticky načítajú aj nové aktualizované údaje vďaka offset
-----------------------------------------
Private Sub cboProdukt_Change()
Dim rngTyp As Range
Dim MojaOblast As Variant
Dim PoslRiad As Integer
Dim ws As Worksheet
Dim strProdukt As String
Dim strOut As Variant
Set ws = Worksheets("ZOZNAMY")
PoslRiad = ws.Range("A" & Rows.Count).End(xlUp).Row
MojaOblast = ws.Range("A1:A" & PoslRiad)
strProdukt = cboProdukt.Value
For lngLoop = 1 To Len(cboProdukt.Value)
If Mid(cboProdukt.Value, lngLoop, 1) <> " " Then
strOut = strOut & Mid(cboProdukt.Value, lngLoop, 1)
End If
Next
Dim i As Integer
For i = 1 To cboTyp.ListCount
cboTyp.RemoveItem 0
Next i
For Each rngTyp In ws.Range(strOut)
Me.cboTyp.AddItem rngTyp.Value
Next rngTyp
End Sub
Private Sub UserForm_Initialize()
Dim rngProdukt As Range
Dim ws As Worksheet
Dim MojaOblast As Variant
Dim PoslRiad As Integer
Dim lngLoop As Long
Dim strOut As Variant
Set ws = Worksheets("ZOZNAMY")
PoslRiad = ws.Range("A" & Rows.Count).End(xlUp).Row
MojaOblast = ws.Range("A1:A" & PoslRiad)
'nazov oblasti bude prvy udaj z docasnej premennej MojaOblast
ActiveWorkbook.Names.Add Name:=MojaOblast(1, 1), RefersToR1C1:= _
"=OFFSET(ZOZNAMY!R2C1, 0, 0, COUNTA(ZOZNAMY!C1)-1,1)"
For i = 2 To PoslRiad
For lngLoop = 1 To Len(MojaOblast(i, 1))
If Mid(MojaOblast(i, 1), lngLoop, 1) <> " " Then
strOut = strOut & Mid(MojaOblast(i, 1), lngLoop, 1)
End If
Next
On Error GoTo osetrujuca_metoda
ActiveWorkbook.Names.Add Name:=strOut, RefersToR1C1:= _
"=OFFSET(ZOZNAMY!R" & i & ", 0, 1, 1, COUNTA(ZOZNAMY!R" & i & ")-1)"
strOut = ""
Next
For Each rngProdukt In ws.Range(MojaOblast(1, 1))
Me.cboProdukt.AddItem rngProdukt.Value
Next rngProdukt
osetrujuca_metoda:
If Err.Number = 1004 Then
MsgBox ("produkt " & MojaOblast(i, 1) & " obsahuje nepovolené znaky! Dodržujte pravidlá syntaxe pre názvy vo vzorcoch")
Else
MsgBox ("Nastala chyba")
End If
End Sub
------------------------