Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  181 182 183 184 185 186 187 188 189   další » ... 291

Ale to vieme už od začiatku, to je tak nejak jasné.
Vyskúšal ste niektorú z tých 2 vecí čo som písal ?
1. Tools - References - zaškrtnúť "Microsoft Outlook xx.x Object Library" - OK

2. vymente riadky
Dim OutApp as Object
Set OutApp = CreateObject("Outlook.Application")

za riadky
Dim OutApp as Outlook.Application
Set OutApp = New Outlook.Application


Ak to prejde v prípade 1. - tak OK, ak to prejde v prípade 2. tak skúsime dorobiť podmienenú deklaráciu premennej a jej priradenie podľa verzie Office.

Niektoré požiadavky nieje možné vzorcami urobiť. Viď červený list. Rozhodnite sa, či skutočne potrebujete meniť vzorcované hodnoty, ak áno, dá sa urobiť makro.

Private Sub Worksheet_Activate()
If WorksheetFunction.CountIf(Sheet2.Range("T8:T108"), [CurrentUser]) > 0 Then
If MsgBox("Chcete vložiť novú výpožičku?", vbYesNo, "Výpožička") = vbYes Then
SendKeys "%N", False
ActiveSheet.ShowDataForm
End If
End If
End Sub

Pri kopírovaní kódu z fóra do VBA, vznikajú medzi riadkami nadbytočné prázdne riadky, čo robí galibu ak je riadok kódu rozhodený na viac riadkov pomocou " _" na konci - riešenie je zmazať nadbytočné riadky.

Prečo to testujete po jednej bunke, keď nepotrebujete pozíciu danej bunky ? Použite
WorksheetFunction.CountIf
alebo
IsError(Application.Match)
alebo s pomocou On Error
WorksheetFunction.Match
Obdobne sa s tým pohrajte, ak chcete zistiť či je CurrentUser v T iba vtedy ak nieje v G.

Tipujem na:
1. Chýbajúca referencia na "Microsoft Outlook xx.x Object Library"
2. Rozdielnu deklaráciu triedy (ktorú treba ošetriť pomocou
podľa Application.Version) napr.:
Dim objOL as Object
Set objOL = CreateObject("Outlook.Application")

vs
Dim objOL as Outlook.Application
Set objOL = New Outlook.Application

Za prvé neverím tomu, že sa to nedá rozsekať a/alebo parametrizovať procedúry, či rozhodiť do modulov. To je blbosť.
Za druhé nikto Vám to neurobí, bez toho, aby ste zverejnil ten kód, čo je logické.
Za tretie, len všeobecne, napr. si najskôr urobte iba base procedúru na kontrolu práv, napr Select Case, odtiaľ volajte s parametrom inú procedúru na skrytie/odkrytie. Ďalej odstráňte všetky Sheets("názovlistu").Select a rovno použite Sheets("názovlistu").potrebná_operácia.
To logovanie alebo čo to vlastne robíte, je asi nejaký zápis užívateľa a jeho akcie. Ak je tak, tak to je jasný kandidát na samostatnú procedúru
Sub LogProc(User as String, Akcia as Long, Cas as Double)
... zapíšte...
End Sub
...
Inak povedané, opakujúce sa časti kódu majú byť samostatná procedúra.
Opakujúce sa časti kódu so zmeneným parametrom, majú byť samostatná parametrizovaná procedúra.
...

Čo viac napísať, keď sme "slepí"...

Takže :
- 20 listov * 5 tabuliek na liste * 2000 riadkov v každej tabuľke * 5 stĺpcov v každej tabuľke = 200 000 riadkov a 5 stĺpcov ?
- Sú to Tabuľky (vložený objekt Tabuľka), alebo tabuľky obyčajné iba orámované ?
- Tie tabuľky sú teda vždy rovnako veľké, rovnako umiestnené, rovnako koncipované, a obsahujú iba meniace sa dáta (rovnakého typu) ?
- Ako tie tabuľky ťahajú dáta z iných zošitov, cez vzorec =[zošit]List!bunka ?
- Zošity sú v jednom adresári ?
- Mení sa názov tých zošitov, alebo názov listov, z ktorých sa čítajú údaje ?

- Prílohu vložte takú, na ktorej bude vidieť všetko potrebné, vymyslené mená a čísla, reálne tabuľky, reálne prepojenia, + nejaký ten zdrojový súbor.

Strašne málo konkrétnych informácií.

Veď to máte parádnu verziu. Ja som robil podstatne zložitejšiu, maticovú. Toto máte lepšie.
Čo si tam neviete nastaviť rozsah dát ? Je to v Definovaných názvoch. Ak aj tie oblasti chcete mať dynamické, pozrite, ako riešim dynamickú oblasť rngPolozky ja.

A napokon - sme zase tam, kde sme nechceli byť. Je dobré priložiť vždy čo najkompletnejšiu predstavu čo mám, a manuálne vytvorený výsledok čo chcem mať. A nie takto, že sa urobí komplik. vzorec, a potom poviete krok dva, že tam chcete ešte ďalšie 2 stĺpce, ale nepoviete ako, čo v nich má byť, aká je závislosť s týmto stĺpcom čo sme robili ... atď.

No a teraz keď si chcem pozrieť tú prílohu, už jej niet ...

Návrh vzorcom aj makrom. Makro dáva aj čísla, vzorcom doplniť aj čísla by bolo príliš komplikované.

Trošku si skráťte tú prácu s oblasťami:
Sheets("Vyjadreni").Range("B37:T51,L13:S16,M18:O18,Q18:S18,P20:S21,I27:I29,N27:S29").ClearContents

Používate asi CZ Excel, tak zmente vzorec na český:
=KDYŽ(COUNTIF(A1;C:C)=0;NEDEF();"ok")
Odstránenie:
Po tom čo urobíte, ako bolo napísané, ostanú označené chybné bunky. Pravý klik, Odstrániť, Celý riadok.

Riešenie ?
1. Opakujúce použitie Cells(1,2) nahradte tak, že iba raz si do premennej HDN = Cells(1,2).Value uložte hodnotu, a pracujte s premennou. Rovnako ak používate súvislú oblasť buniek Cells(11,2-5) načítajte si ju do premennej aHDN = Cells(11,2).Resize(4).Value a pracujte s poľom aHDN(riadok, stĺpec). Prestupovanie z listu do VBA je pomalé, a nevieme koľkokrát tieto testy prevádzate, môže to spomaľovať.
2. A s tým súvisí ďalšia vec - pridajte prílohu (!), aby bolo vidieť, čo robia volané procedúry. Zaregistrujte sa a môžete prikladať prílohy.
3. Možno bude pre Vás riešením vhodné použitie Application.EnableEvents (aj vypnutie aj zapnutie)...

Poznámky:
Používate tam Application.ScreenUpdating = False. Vraciate to niekde aj naspäť ?
Určite majú bunky v Cells(11,2-5) hodnotu "1" a nie 1 ?
Musí to byť vo Worksheet_Calculate ?

A nepríde Vám zbytočné 2x klikať ? Raz na ListBox "Mail CS" a potom na tlačítko tiež "Mail CS". Akciu vykonajte buď hneď pri kliku v ListBoxe, alebo ešte lepšie ListBox celý preč, a len klikajte na požadované tlačítko.

Inak nastavte vlastnosť tlačítok Enabled predvolene na False, a potom
Private Sub ListBox1_Click()
Controls(Array("btnMailCS", "btnMailIC", "btnMailCSII", "btnMailWH")(ListBox1.ListIndex)).Enabled = True
End Sub

Vám zapne dané tlačítko.

EDIT: Ešte ma napadlo, že ak to nemá byť jednotázové, tak treba vždy ostatným tlačítkam nastaviť Enabled = False, lebo takto si ich postupne pozapínnate. Som už len na mobile, ale skuste všetkym 4 nastaviť False pred riadkom čo som Vám poslal.


Strana:  1 ... « předchozí  181 182 183 184 185 186 187 188 189   další » ... 291

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