Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  5 6 7 8 9 10 11 12 13   další » ... 53

Zajímavý že smyčku použít umíš, ale přesto ji nepoužiješ :-), respektive použiješ, ale jen na hledání prvního volného řádku přitom stačí použít smyčku i pro zápis dat a rozšířit ji o podmínku.

M@

Taky jsem v příloze zkusil nějaké harakiri :-).

Na neprůstřelnost netestováno :-)
M@

Google a vyhledat Listobject :-), třeba http://analysistabs.com/excel-vba/tables-examples/

M@

Taky jsem kdysi nevěděl :-).
ListObject napoví.
Jinak ... http://wall.cz/index.php?m=topic&id=21565

M@

S OLE objekty je to složitější.
krom xlOpen, může být i xlPrimary, což asi nepomůže.

Pak je otázka, jestli se Corel otevírá opravdu minimalizovaný, nebo jen na pozadí (pod Excelem), což se mi jeví pravděpodobnější a pak by mohlo stačit po tom Verbu minimalizovat okno excelu. Případně vyzkoušet přidat příkaz
AppActivate "Corel"
ten "Corel" jen tipuju :-)

Jiank se obávám, že žádná jiná jednoduchá cesta skrze OLE objekt nevede.

M@

Takže ne SUM, ale COUNT neprázdných buňek ve sloupci Tatralandia, nebo Bešeňová.

=
NEBO(
(COUNTIFS($D:$D;"<>";$B:$B;">="&DATUM(ROK($B2);MĚSÍC($B2);1);$C:$C;$C2;$A:$A;$A2)-COUNTIFS($B:$B;">="&DATUM(ROK($B2);MĚSÍC($B2)+1;1);$C:$C;$C2;$A:$A;$A2))>=8
;
(COUNTIFS($E:$E;"<>";$B:$B;">="&DATUM(ROK($B2);MĚSÍC($B2);1);$C:$C;$C2;$A:$A;$A2)-COUNTIFS($B:$B;">="&DATUM(ROK($B2);MĚSÍC($B2)+1;1);$C:$C;$C2;$A:$A;$A2))>=8
)

Procedura OdKdyUrgent obsahuje 2 parametry:
x
nazev
Sub OdKdyUrgent(x As Boolean, nazev As String)

oba jsou předávány při volání funkce
OdKdyUrgent False, sh.Name

tudíž pak v dané proceduře nastavujeme list dle názvu předaného ze smyčky (parametr sh.name, který v proceduře máme pojmenovaný jako nazev)
Set ws = Sheets(nazev)

pokud ale použiješ jak píšeš
Set ws = Sheets("Dořešit")
tak ano vždy to bude v tom jednom listě, protože ho tam máš dán natvrdo, místo proměnné poskytované smyčkou.

M@

Asi bych se úplně vyhnul tomu vyjímání listů a opětovnýmu vkládání. Skoro to vypadá že je vyjímáte jen proto aby nebyly obsaženy ve smyčce "For Each sh In ThisWorkbook.Sheets", což je zbytečné, dá se to ošetřit i jinak.

Sub ProjdiKaždýList(x As Boolean)

'Projde všechny listy
For Each sh In ThisWorkbook.Sheets
Select Case sh.Name
Case Is = "Kapacitní střediska", "Kapacitní skupiny", "Zatížení kapacit", "Skluzy dodavatelu"

Case Else
OdKdyUrgent False, sh.Name
End Select
Next
x = True

End Sub


v části kde je voláno "OdKdyUrgent False, sh.Name"
jsem přidal parametr sh.name, což znamená že funkci OdKdyUrget bude předána i tato informace.

Tu je pak třeba nadefinovat i ve funkci.
a pak na řádku Set ws = ... už není třeba odkazovat se na selection, ale na konkrétní list, čímž se vyhnete zbytečnému přepínání listů.

Sub OdKdyUrgent(x As Boolean, nazev As String) 'Od kdy je urgentem

Dim ws As Worksheet
Dim lr As Long
Set ws = Sheets(nazev)


No a pak doporučuji používat na začátku kódu
Application.ScreenUpdating = False
na konci pak
Application.ScreenUpdating = True

Dále hlouběji v kódu máte
Columns("B:B").NumberFormat = "m/d/yyyy"
Columns("A:B").Select

With Selection
.HorizontalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

Range("A1").Select

což nechápu, že najednou už nepracujete s deklarovaným ws.
např.
ws.Columns("B:B").NumberFormat = "m/d/yyyy"
With ws.Columns("B:B")


na konci pak máte
Range("A1").Select
což bych úplně vynechal.

M@

Odpovím otázkou.
Cílem je spustit vložený OLE objekt (nějaký soubor Corelu), nebo spustit čistě Aplikaci Corel?

Vzhledem k verbu to vypadá na OLE, s čímž neporadím.
Pokud bych ale chtěl pustit Corel jako takový, tak použiji příkaz Shell, jehož parametrem je i styl okna.

M@

Že mám tak rád Bešeňovou, tak jsem něco zkusil v příloze :-) Snad jsem to pochopil dobře, když součet návštěv v Tatralandii a Bešeňový dosáhne 8 a víc v rámci jednoho měsíce u konkrétního člověka, tak se text jména změní na červený.

Ale to že tam jsou některý jména 2x, jednou s čárkama, jednou bez, tak to už je potřeba si ošetřit ručně.

M@

Jen takovej pokus, v příloze.

M@

Třeba ...
Public Sub DELEJ()
Workbooks("Plány kovo včera.xlsm").Activate
For Each sh In ActiveWorkbook.Sheets
sh.Select
Krok2 False
Next
End Sub

Sub Krok2(x As Boolean)

Dim dDate As Date
Dim strDate As String
Dim lDate As Long, LR As Long
LR = Range("A" & Rows.Count).End(xlUp).Row

dDate = DateSerial(2017, 1, 0)
lDate = dDate

ActiveSheet.Range("F1:F" & LR).AutoFilter Field:=6, Criteria1:=">=" & lDate - 60, Operator:=xlAnd, Criteria2:="<" & lDate + 3
Range("R1").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[2000]C)"
ActiveCell.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
x = True

End Sub


šlo by to i optimalizovat vše do jedné funkce tak aby se pokaždé nedeklarovaly proměnné, ale takhle to je pro názornost nejrychlejší.

M@

Sice s wordem nedělám, ale záznamem makra se toho taky člověk dost dozví :-).

Je to jen neotestovaná teorie, ale ...

objword už v excelu máš očividně nadefinovaný, takže i soubor máš nejspíš spuštěný.
Pokud objword je dokument, tak pak by mělo stačit něco jako objword.Select 'Vybere vše
a pak už lze použít následující kód ze záznamníku makra, kdy slovo Selection bude nahrazeno objword.Selection. Místo {pole} si dosadíš co potřebuješ a místo "něco" dáš odkaz na buňku.

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "{pole}"
.Replacement.Text = "něco"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll


Ale jinak hromadná korespondence je elegantní řešení :-).
M@

=KDYŽ(JE.CHYBHODN(SVYHLEDAT($A$14;A83:L97;2;NEPRAVDA));"";SVYHLEDAT($A$14;A83:L97;2;NEPRAVDA))

M@

Určitě by bylo lepší vidět přímo ten soubor, protože z popis mám pocit, že se tam dělá něco zbytečně složitě a že by to šlo řešit jedinou tabulkou, než kupou listů. Ale jak říkám, chtělo by to vidět.

Každopádně když se chce zapsat do buňky vzorec, tak, to nejde dělat formou range("c2") = "=formula ale měl by to být range("c2").formula =
případně R1C1 formula (jak co vyhovuje), excel snese i range("c2")= "=sumif(A:A," & Chr(34) & "A" & Chr(34) & ",B:B)" (jen příklad)

M@


Strana:  1 ... « předchozí  5 6 7 8 9 10 11 12 13   další » ... 53

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