Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  136 137 138 139 140 141 142 143 144   další » ... 285

Označte bunky - Údaje - Text na stĺpce - Ďalej - Tabulátor, Ďalej - Všeobecné, Spresniť - Znamienko mínus za záporným číslom - OK - Dokončiť.

Netreba toľko stĺpcov. Procedúru by som volal s parametrom. Pr.

2 rôzne príklady. Každý CheckBox zvlášť, a skupina OptionButton. Záleží na tom, čo chcete potom robiť. Každopádne nachystajte si makro a pridelte ho danému prvku. Ja som tam len pridal každému prvku nejaký názov a jeho vypísanie. Prvky v každom príklade majú rovnaké makro, ale to záleží ako som písal, na tom, čo plánujete robiť...

No tak snáď je to ono. Je to dynamické pre F2:I50. Podľa pravidla, ak je označenie v F alebo H, bez označenia nasledujúceho, tak nasledujúci maže, inak ho zapíše. To už také elegantné, pekné a krátke nieje. Vysporiada sa to snáď aj s presahmi, viacoblastnými výbermi, s meniacim sa počtom riadkov a pod.

Riešení je množstvo, napr.:
If Not Sh.Name = "udaje" and Not Sh.Name = "iný list" Then
If IsError(Application.Match(Sh.Name, Array("údaje", "iný list"), 0)) Then
If InStr(1, Join(Array("", "údaje", "iný list", ""), "•"), "•" & Sh.Name & "•", vbTextCompare) = 0 Then

Toto Vám bude prenášať aj hodnoty z prípadných viac buniek v riadku. Berie sa do úvahy 1. riadok 1. označenej oblasti. Preklopí ju na stĺpec a zapíše na správne miesto. Len nerozumiem, načo tam v 2 stĺpcoch mažete nasledujúcu hodnotu a v 2 nie. To tak má určite byť ? Ak áno tak to urobíme inak.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngVyber As Range
Set rngVyber = Intersect(Range("F2:I7"), Target.Rows(1))
If Not rngVyber Is Nothing Then Cells(2, 4).Resize(rngVyber.Columns.Count).Offset(rngVyber.Column - 6).Value = WorksheetFunction.Transpose(rngVyber)
End Sub


Tie ďalšie dve makrá zjednodušte napr. takto:
Sub Makro1()
With ActiveSheet.Range("K1:K6").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub


Sub Makro2()
ActiveSheet.Range("F1").Copy ActiveSheet.Range("D1")
'alebo ak nepotrebujete prenášať formátovanie bunky tak stačí:
'ActiveSheet.Range("D1") = ActiveSheet.Range("F1")
End Sub


Teda všetko iba v prípade ak Vás chápem správne.

No keď Vám nejaká medzera nemizne, tak si otestujte či je to medzera
=CODE(MID(A1;2;1))
A1 - text
2 - číslo znaku (ten, ktorý by mal zmiznúť a nemizne)
1 - počet znakov (to musí byť logicky 1)
Funkcia Vám vráti ASCII hodnotu daného znaku. Normálna medzera má ASCII hodnotu 32. Táto tzv. "pevná medzera" má ASCII hodnotu 160. Napíšete ju aj ručne ak podržíte ľavý Alt a napíšete 0160. Používa sa na účel vyplývajúci z jej názvu najmä na webe.

Ten predošlý vzorec urobí to, že nahradí všetky pevne medzery za normálne medzery a potom si s tým TRIM už poradí.

Ach áno, chybka v rýchlosti. Som to len tak napísal a netestol - opravené.

Napíšte čo sa má diať ak bude výber väčší ako jedna bunka. Kam sa majú kopírovať? Ak bude čas poriešime. Ak by bol ten súbor bolo by to najpriekaznejšie.

Páni xlnc a marjankaj sú tunajší matadory, nechcú Vám zle. Slovník sa každému páčiť nemusí, ale znalosti sú neodškriepiteľné.

-Čo ak bude označených viac buniek ako 1 ? Má sa brať v úvahu ľavá horná, alebo vykonať makro pre celú oblasť naraz, alebo pre každú z označených buniek sa má vykonať zvlášť ?
-Vznikajú aj iné prípady, napr. označenie buniek v celom riadku/stĺpci pri zmazaní riadku/stĺpca, dôjde k označeniu celého riadka/stĺpca. V tomto prípade čo ? Dá za zistiť či je označený celý riadok/stĺpec, ale nieje to rozoznateľné od označenia užívateľom od označenia Excelom pri mazaní.
-Aké makro sa má vykonať? Každá skúmaná bunka má úplne samostatné ničomu nepodobné makro ? Alebo majú makro podobné/rovnaké a len sa mení nejaký parameter podľa bunky ? Vtedy netreba X makier, ale len sa na základe bunky vypočíta parameter.

Veľmi málo informácií.

Len náčrtovo:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("A1:A10"), Target) Is Nothing Then
'niečo to vykoná, ak je označená niektorá z buniek v A1:A10
End If
End Sub

alebo
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Cells(1).Address
Case "$A$1": 'niečo to vykoná
Case "$A$2": 'vykoná niečo úplne totálne iné
Case "$A$3": 'a zase úplne iné
'... atď
End Select
End Sub

alebo X ďalších... Určite nebude nikto robiť všetky možné príklady. Zlepšite popis a priložte súbor k implementácii.

Lebo to nieje medzera (kód 32) ale "pevná medzera" (kód 160)
=TRIM(SUBSTITUTE(A2;CHAR(160);" "))
=PROČISTIT(DOSADIT(A2;ZNAK(160);" "))

Mepexg má pravdu. Chyba vo vzorci. Dalo by sa to aj maticovým vzorcom bez pomoci akýchkoľvek pomocných stĺpcov.

Priložte prílohu, mne to ide normálne, aj keď je zamknutý list.

Neprejde to ani keď prvý riadok vynecháte?

Upravené, zabudol som pridávať nové položky aj do poľa všetkých hodnôt, ktorá sa používa na načítanie do všetkých zoznamov, ale aj na získanie hodnoty pri kliku v menu. Pole som musel preto otočiť... to je nepodstatné.

Kontrola služobnej cesty prebieha na riadku 37 v procedúre Workbook_SheetChange modulu Tento_zošit.

Je to zamotané a zložité, a navyše je po mne cudziemu človeku niekedy ťažko skúmať, čo som ako a prečo tak či onak myslel. No skúste, či Vám tie kódy niečo povedia.

Vzorcom skúste takto.


Strana:  1 ... « předchozí  136 137 138 139 140 141 142 143 144   další » ... 285

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32

Čas od do

jarek1111 • 18.4. 8:31