1. Prečítajte si ešte raz 3. odstavec, čo som písal. Máte tam zle ten Offset.
2. V stĺpci H nemajte žiadne iné hodnoty, degraduje to výberový zoznam (myslím to číslo 9996).
3. Upravte kód, najskôr zmente výberovým zoznamom nejakú hodnotu, aby sa Vám prípadne upravil správny index v SpinBtn, ak bol pred tým nesprávnym makrom zle nastavený. A potom všetko funguje ako má. Hodnoty zo zoznamu dáva, tak ako sú v poradí v zozname. Nijako inak.
Šmarjá, lidičky, čítajte pozorne, čo Vám človek píše
Určite platí, že
´=číslo 30 se do 10 000 potká s číslem 500 a 10 000 6 krát
Spinner som ja nazval "SpinBtn", Vy ho máte "Spinner 2" (v príkladoch pred tým, myslím "Spinner 5" a Spinner 6"), no odkazujete sa ten môj "SpinBtn", u Vás neexistujúci. Premenoval som ho.
Odkazujete na list s kódovým menom "Material", ale také kódové meno nemáte. Taký máte iba titulok na lište s uškami listov. Buď použite Worksheets("Material"), alebo zmente kódové meno listu napr. na "Material" alebo lepšie na "wsMaterial".
Nemôžete robiť Offset(Poz - 4), ale len Offset(Poz - 1), tak ako som to tam dal. Lebo tu sa neposúvate indexom od prvého riadku listu, ale od prvého riadku oblasti materiálov. A index 1 je na 5 riadku, teda ho už neposúvate.
V makre listu Grafy máte zle umiestnené rozsahy
WorksheetFunction.Match(HDN, .Cells(2, 1).Resize(Radku), 0)
má byť
WorksheetFunction.Match(HDN, .Cells(5, 8).Resize(Radku), 0)
a
Radku = .Cells(Rows.Count, 3).End(xlUp).Row - 4
má byť
Radku = .Cells(Rows.Count, 8).End(xlUp).Row - 4
Rovnako zle je to aj v druhom makre
Radku = wsMaterial.Cells(Rows.Count, 3).End(xlUp).Row - 4
má byť
Radku = wsMaterial.Cells(Rows.Count, 8).End(xlUp).Row - 4
Úpravu som Vám dal na GoogleDrive
=FILTERXML(C3;"//Tag1")
prípadne ak by tam bolo viac od každého tagu tak jedno z toho:
=FILTERXML(C3;"Tagy/Tag1")
=FILTERXML(C3;"/Tagy/Tag1")
=FILTERXML(C3;"//Tagy/Tag1")
EDIT: No tak oprava. Ak by tam boli napr. 2 mastertagy Tagy a Tagy2 a oba obsahovali subtagy Tag1, Tag2, Tag3, tak to nefunguje, resp. to neviem skomoliť :)
Pr.
Nie, záleží na tom, čo bude na liste s výslednou hodnotou (List1), a čo na liste so zdrojovými dátami (List999).
Bude to takto ako píšem ?
Na liste List1 bude:
-bunka s výberovým zoznamom
-SpinButton
Na liste List999 bude:
-zoznam materiálov
-Poradová hodnota SpinButton-u
V tom prípade nehľadáte delitele ale násobky. Takto ?
Pr.
Snáď jedine makro...
Snáď na to je niečo sofistikovanejšie, ale tento maticový vzorec Vám to zráta. Musí to byť číslo do max čísla riadku v Exceli (1048576). Použil som 2 definované názvy, ale to nemusíte, môžete to zneprehľadniť do jedného maticového (Ctrl+Shift+Enter) vzorca.
Inak výsledok je 6, zabudol ste na číslo 18.
Viď obdobná téma na pc-help
Ak som to správne pochopil, tak tu je príklad. Ukázané sú tam 2 metódy záverečnej ukážky tlače. Ten vypoznámkovaný je ten nový štýl Office, ktorý sme sa tu pred možno 2 rokmi snažili prinútiť aby zastavil makro, pokiaľ nieje okno Tlače zrušené, alebo nieje dotlačené, vtedy sa myslím na riešenie neprišlo. Teraz už možno nejaké známe riešenie je. Problém bol v tom, že je treba pri tomto riešení označiť hárky, dať tlačiť, a po vytlačení odznačiť. Teda buď ostanú označené, alebo ich následný príkaz na odznačenie hneď odznačí (lebo makro nečaká) ešte pred vytlačením. To prinášalo problémy nevytlačenie, alebo označenie viac hárkov, ak si to nevšimnete tak napr pri vymazaní hodnoty v jednom zmažete nechtiac vo všetkých označených listoch. A pod... Ale vravím, možno je riešenie už na svete. Druhá metóda vyvolá staré náhľadové okno, bez nutnosti označovať listy.
Ďalej nieje jasné, či musí A obsahovať číslo, alebo aj inú hodnotu. Zatiaľ je to urobené, že tam musí byť bezpodmienečne číslo, text nestačí.
Mohli ste kľudne pokračovať vo svojom vlákne z 2.2.2018 s rovnakou témou. A možno s tým budú stále rovnaké nelogické problémy, ktoré som tam spomínal :)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Poz As Long
If Not Intersect(Cells(1, 2), Target) Is Nothing Then
On Error Resume Next
Poz = WorksheetFunction.Match(Cells(1, 2), Cells(18, 11).Resize(, 11), 0)
On Error GoTo 0
Application.EnableEvents = False
If Poz > 0 Then
Cells(3, 1) = Cells(17, 10 + Poz)
Cells(17, 10 + Poz).Resize(2) = WorksheetFunction.Transpose(Array(0, "Prázdný"))
Else
Cells(3, 1).ClearContents
End If
Application.EnableEvents = True
End If
End Sub
Ale zase je tu množstvo poznámok. V tej tabuľke sa majú nájsť, spočítať a vymazať všetky výskyty daného dielu (To treba urobiť potom inak)? Alebo iba prvý/posledný? Z ktorej strany? Ak tam nenájde daný diel alebo je B1="", vymaže modrú bunku A3.
Táto príloha potom samozrejme prináša ďalšie a ďalšie otázky s ohľadom na predchádzajúce nedovysvetlené zadanie. Napr. : Hľadáte Vy v predchádzajúcom požiadavku naozaj prvý prípad zprava, keď je splnené že do nejakej bunky sú všetky zaplnené a len tá posledná bunka je prázdna? Alebo hľadáte prvú prázdnu zľava?
Ak tam totiž sú medzery ("prázdne" boxy), tak aj v prvom prípade nastane, že sa naplní box zprava. Mne to príde divné, ale to možno len preto, lebo neposkytujete dobrý (žiadny) popis toho, čo chcete dosiahnuť. Toho čo robíte. Z Vašeho makra nemusí byť vôbec zrejmé čo chcete dosiahnuť, keďže ako laik nemusíte mať uváženú správnu metodiku.
Keď tak pozerám čo robí ten Váš kód resetboxu, tak resetboxu2 robí to isté, nič viac netreba, žiadne ďalšie procedúry ako reseticek1, reseticek2 ... .
Teda robí to to isté, ale vôbec neviem čo
Nech je to ale čo chce, tak asi by som si urobil ďalší pokus aj cez polia a pomeril rýchlosť. Záleží aj na množstve buniek, ktoré chcete nakoniec obsiahnuť...
Sub resetboxu2()
Dim i As Long
If Cells(3, 1) <> "" Then
For i = 9 To 1 Step -1
If Cells(21, 1).Offset(0, i) = "" And WorksheetFunction.CountIf(Cells(21, 2).Resize(, i), "<>") = i - 1 Then
Cells(21, 2).Resize(3).Offset(0, i - 1) = WorksheetFunction.Transpose(Array(Cells(1, 1), Cells(5, 1), Cells(3, 1)))
Cells(3, 1) = 0
End If
Next i
End If
End Sub
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.