< návrat zpět

MS Excel


Téma: Jak vyolat další makro podmínka. rss

Zaslal/a 27.6.2016 9:57

Dobrý den.

Potřeboval bych poradit jak zapsat kód pro níže potřebné.

Pomocí maker tvořím denní plány pro různá střediska.
Občas se stane, že na některá střediska není naplánována žádná práce a tak bych potřeboval přeskočit na další list s dalším střediskem.

Ve finále by to mělo vypadat tak, že pokud v buňce "A3" nenajdu data tak se spustí sub xy.

Pomůže někdo?

Zaslat odpověď >

#031887
elninoslov
My ale netušíme, ako to u Vás vyzerá, čo robíte makrom, kde, za akých podmienok, či máte listy vytvorené, alebo ich vytvárate, z ktorého listu čítate tú hodnotu A3, či z riadiaceho alebo z výsledného (v ktorom má makro niečo robiť), ........
Každopádne spustiť či nespustiť makro sa dá jednoducho jedinou podmienkou If.
If Worksheets("XYZ").Cells(3, 1)<>"" Then Call MojeMakro
Ale fakt nevieme, či do makra má vstupovať nejaký parameter, napr. list, keď spomínate, že chcete vynechať nejaký list, alebo či prechádzate pomocou For-Each-Next všetky listy, alebo ...citovat
#031889
avatar
Děkuji za reakci.
Takto se to těžko popisuje. V příloze celé makro v list1.

Pokud si zadáte vyhledat "#### POKUD NEJSOU DATA V ŘÁDCÍCH A3 A NÍŽE, POKRAČUJ NA DALŠÍM LISTĚ" dostanete se do bodu, kde potřebuji, aby když v daném listě nejsou data, pokračovalo makro na dalším listě. Pokud data budou, tak aby provedl úkony popsané v tom makru.

Snad je to již pochopitelné. 5

Je to pro mě celkem důležité, tak klidně i zavolám, abych vysvětli podrobněji.

Děkuji.
Příloha: 7z31889_plany-zamecnik.7z (180kB, staženo 22x)
citovat
#031904
avatar
Tak jsem to nakonec vyřešil jinak. První dva řádky jsem ukotvil a do třetího řádku jsem pomocí makra vytvořil fiktivní zakázku. Tím jsem obešel to, že se mi již nestane, že pro některé středisko není naplánována práce a původní makro se chová jak má.

Na konci makra ten řádek vždycky najdu a dám ho smazat.
5
V příloze celý sešit. Makro včetně popisku co které dělá atd., uloženo ve VBA list "Dořešit" tak pokud by někdo potřeboval nějakou inspiraci, nechť čerpá. (podotýkám, že jsem začátečník)
Příloha: 7z31904_plany-zamecnik.7z (193kB, staženo 23x)
citovat
#031922
elninoslov
Šmarjá 1 To máte tisíce riadkov kódu, ktorý je neskutočne pomalý, zbytočne sa dookola opakujúci, neflexibilný (nieje možné zmeniť názvy listov len tak jednoducho), a strašne neprehľadný.
To treba zjednodušiť.
Napr 2 bloky "' ODKOVENÍ PŘÍČEK" a "' VLOŽ SLOUPCE SE STŘEDISKEM"
sa dajú zjednodušiť napr. na :
Dim SH As Worksheet
For Each SH In Worksheets
Application.Goto SH.Cells(2, 1)
ActiveWindow.FreezePanes = False
Cells.FormatConditions.Delete
Columns("D:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(1, 4) = "STŘ"
Next SH

Blok "' USPOŘÁDÁNÍ SLOUPCŮ" by stačil pravdepodobne napr takto nejako:
Columns("J:J").Delete Shift:=xlToLeft
Columns("T:T").Cut
Columns("A:A").Insert Shift:=xlToRight
Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B1") = "Poznámky"
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("C1") = "Stroj"
Columns("E:E").Cut
Columns("H:H").Insert Shift:=xlToRight
Range(Range("A1"), Range("A1").End(xlToRight)).AutoFilter
Union(Columns("K:K"), Columns("M:P"), Columns("R:R")).Replace What:=".", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
With AutoFilter.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

To dávam vlastne zbrucha, otestujte, a skúste sa pohrať z povynechávaním neustálych zbytočných Select-ov, a hlavne neopakovaním rovnakého kódu pre všetky listy. Napr. použitím cyklu, alebo poľa a procedúr s parametrom, ...

Nemám na to čas, ale aj keby som mal, tak by som musel mať echt náladu rozobrať funkčnosť 2500 riadkov, tipnúť si účel, spôsob, prekopať, zjednodušiť, vyskúšať...

Ja Vám rozumiem, že ste makro nahral, a funguje, ale musí byť veľmi pomalé. Nedávno tu bol postnutý ešte väčší kód cca 4500 riadkov. Takže rekordérom nieste 1 Skúste niečo s tým urobiť, možno keď bude niekto vidieť Vašu urputnú snahu, tak sa Vám na to dá.

Inak ak chcete vynechať nejakú časť kódu v takom stave v akom to máte, tak pred inkriminovanou časťou urobte potrebnú kontrolu a za inkriminovanú časť vložte skok. Teda príklad:
If Range("A3")="" Then GoTo POKRACUJ1 'Skok na miesto s názvom POKRACUJ1
...
inkriminovaný kód
...
POKRACUJ1:
Bude pokračovať ďalej...
citovat

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