Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  38 39 40 41 42 43 44 45 46   další » ... 122

opičák, zapíš na koniec zoznamu:
žvatlal
želva
človíček
čenda

a uvidíš, že to asi nefunguje, ako si predpokladal

ako som už zmienil, reťazce vo VBA nie je možné porovnať pomocou znaku >
teda, je to možné, ale asi to nevedie ku kýženému výsledku

Pokiaľ by som to mal riešiť ja a podmienkou je, aby to bolo vo VBA, tak by som pole vykopíroval do nejakého temp sheetu, tam pomocou vlastnosti sort dáta v danom range zoradil a zoradený range načítal späť do poľa. Temp sheet potom zmazal pomocou kill. Sort na sheete (Data->Sort) radí korektne v závislosti na tom, aký jazyk je nastavený.

Inak ale, VBA dokáže reťazce radiť korektne, je ale potrebné poznať príslušnú metódu (funkciu), ktorou je StrComp, nie je možné dva reťazce porovnávať pomocou =, <, >

Reťazce na liste je možné vo VBA triediť pomocou nasledovného príkladu:Sub Sort()
Dim pole()
pole = WorksheetFunction.Transpose([L1:L20])
Call BubbleSort(pole)
[L1:L20] = WorksheetFunction.Transpose(pole)
End Sub

Function BubbleSort(List())
Dim i As Integer, j As Integer, Temp as string
For i = LBound(List) To UBound(List)
For j = LBound(List) To UBound(List)
If StrComp(List(i), List(j), vbTextCompare) = -1 Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Function
Použil som bublinkové triedenie, pre malý rozsah dát postačuje. Uvedený kód bude fungovať i pre pole, v rutine BubbleSort je argumentom pole, hodnoty ktorého sú načítané v rutine Sort. Je ale možné v rutine BubbleSort pracovať i s poľom, ktoré do nej načítaš odinakadiaľ, nemusí sa jednať o dáta z range.

@ Devil: Je to možné, ale je mi to asi jedno 1 .

jasné a následne použiť MATCH s posledným parametrom rovným 1, výsledné znaky potom spojiť do pôvodného reťazca, tentokrát už bez diakritiky

Iný spôsob riešenia ponúka vnorená funkcia SUBSTITUTE, ale počet úrovní musí odpovedať počtu znakov s diakritikou, ten presahuje možnosti počtu vnorení v jednom vzorci, čiže bolo by potrebné to urobiť minimálne na dvakrát, t.j. s jedným pomocným stĺpcom.

@Hav-Ran
cool 1

eLCHa:
ďakujem za rady
k jednotlivým poznámkam:
Nemám rád věci vytvářené nějakými nástroji, protože si tam většinou přidávají něco, co není potřeba. - použil som na to Custom UI Editor For Microsoft Office, nie som si vedomý, že by tento nástroj do schémy pridal nejaký balast, ale môže to tak byť
Ešte som skúšal doplnok od Andyho Popa, Ribbon Designer. Ten je celkom user friendly, ale nejaké muchy to má.
Excel 2007 - zkusil jsem obě přílohy a ani jednou se mi ribbon nezobrazil - je to tak, páč som použil schému pre 2010, na to si ale prišiel
Podle způsoobu použití (dlouhodobé = po celou dobu otevření excelu, tedy řádově hodiny nebo krátkodobé) je třeba ještě řešit zapomínání excelu ve spojení s globálními proměnnými (tedy i checkboxy kuk sem). - Toho som si vedomý a užívateľa som na možné problémy spojené s uvedeným upozornil. Ale zadanie bolo mať ribbon, tak je ribbon, uložený v doplnku tak, aby bola nová karta vždy viditeľná.

Ešte som si uvedomil, že po tom, čo sa data z listu prijem prenesú na list sklad, požaduješ vymazanie údajov z listu prijem. Takže na koniec (pred End Sub) treba ešte zapísať

shPrijem.Range(rngAdr).ClearContents:

Option Explicit

Sub PrijemNaSklad()
Dim shPrijem As Worksheet, shSklad As Worksheet, rngAdr As String, srcArr, tgtArr, i As Integer, j As Byte
Set shPrijem = Sheets("prijem")
Set shSklad = Sheets("sklad")
rngAdr = "E5:F999"
srcArr = shPrijem.Range(rngAdr)
tgtArr = shSklad.Range(rngAdr)
For i = LBound(srcArr, 1) To UBound(srcArr, 1)
For j = LBound(srcArr, 2) To UBound(srcArr, 2)
tgtArr(i, j) = tgtArr(i, j) + srcArr(i, j)
Next j
Next i
shSklad.Range(rngAdr) = tgtArr
shPrijem.Range(rngAdr).ClearContents
End Sub
A samozrejme, aby to fungovalo korektne, je treba mať ošetrené to, aby riadky na listoch spolu lícovali, to tak síce v prílohe máš, ale radšej na to upozorňujem, že makro pracuje s týmto predpokladom a nekontroluje prípadný posun, či prehádzanie riadkov.

Milan, ty budeš veľký vtipálek. Zdá sa iba mne, že tvoja prvá príloha je "trošičku" iná, než tá druhá? 6
Skús toto:Option Explicit

Sub PrijemNaSklad()
Dim shPrijem As Worksheet, shSklad As Worksheet, rngAdr As String, srcArr, tgtArr, i As Integer, j As Byte
Set shPrijem = Sheets("prijem")
Set shSklad = Sheets("sklad")
rngAdr = "E5:F999"
srcArr = shPrijem.Range(rngAdr)
tgtArr = shSklad.Range(rngAdr)
For i = LBound(srcArr, 1) To UBound(srcArr, 1)
For j = LBound(srcArr, 2) To UBound(srcArr, 2)
tgtArr(i, j) = tgtArr(i, j) + srcArr(i, j)
Next j
Next i
shSklad.Range(rngAdr) = tgtArr
End Sub
Ako malé cvičenie pre prácu s arrays mi to stačilo, tým končím. V posledných dňoch som už pracoval s Excelom viac, než dosť 1
Nie som si síce istý, že som pochopil pomerne vágny popis potřebuji na listech opět prijem a sklad bunkdy E5 až E999 a F5 až F999 na obou listech :), ale ten kódik je pomerne jednoduchý a nemal by byť problém si ho doupraviť.

@ ji026441
skúsil by som to v tomto prípade bez cyklu, nejak takto:
Private Sub CommandButton1_Click()
Dim wsP As Worksheet, wsS As Worksheet
Dim mRng As Range

Set wsP = Worksheets("příjem")
Set wsS = Worksheets("sklad")

With wsS
Set mRng = .Range(Cells(1, 1).Address, .Cells(Rows.Count, 1).End(xlUp).Address)
Set cell = mRng.Cells(WorksheetFunction.Match(wsP.[A2], mRng, 0), 1).Offset(0, 1)
cell.Value = cell + wsP.[B2]
End With

wsP.Cells(2, 2).ClearContents

End Sub

@ Hav-Ran: popisuješ niečo iné, než bolo v otázke

@ Ladis-99: v Exceli 2007 táto možnosť nie je, je až od verzie 2010, sorry za predchodziu mystifikáciu. Na možný workaround sa pozri sem: http://www.contextures.com/xlfaqPivot.html#Repeat
V časti "How do I get the row field headings to repeat in a pivot table?"
V krátkosti:
1. Vykopírovať kontingenčku na iné miesto sheetu.
2. Vybrať prázdne bunky (specialcells->blank)
3. Do nich vložiť vzorec v tvare: = šipka UP, zmačknuť CTRL+ENTER
4. vzorce nahradiť hodnotami (paste special, values)

Keby si sa zaregistroval a vložil sem prílohu, už by ti to niekto veľmi pravdepodobne upravil. Máš pocit, že to dokážeš vo svojom súbore zmeniť na základe vzoru, ktorý ti niekto vytvorí? Mám podozrenie, že ťažko.

2007 mám na starom PC a teraz nevyskúšam. V 2013 je voľba Design->Layout->Report Layout->Repeat All Item Labels
Mám tušenie, že v 2007 to bude podobné, skús pohľadať, pokiaľ nebudeš úspešný, niekto poradí, ja až po tom, čo zas niekedy budem u svojej starej mašiny 7

Njn, pokiaľ budeš mať záujem, tak si to naštuduješ z uvedených linkov, záleží na tom, či o to stojíš..

Nemá, oba mnou uvedené spôsoby fungujú. Súbor, v ktorom je makro VypocetPolozky, musí byť ale pochopiteľne v dobe, kedy ho voláš z iného súboru pomocou inštrukcie Run, otvorený!

Milan, pozri do SZ.


Strana:  1 ... « předchozí  38 39 40 41 42 43 44 45 46   další » ... 122

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje