Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  267 268 269 270 271 272 273 274 275   další » ... 298

No veď mne to práve funguje korektne. Pošlite mi teda zošit na mail čo mám uvedený v profile.

Skúste:
Sub saveandsend()
Dim r As Long, N As String
If MsgBox("JSOU ZADANÉ ÚDAJE V POŘÁDKU ?", vbYesNo, "Odeslání do databáze") <> vbYes Then End ' okno z upozorněním o vyčištění formuláře
With ThisWorkbook 'Pro tento sešit
With .Worksheets("Databáze").Range("A2:F2") 'První záznam v DB
On Error Resume Next 'První volný řádek
r = .Resize(Rows.Count - .Row + 1).Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row - .Row + 1
On Error GoTo 0
.Resize(r + 1 - IIf(r > 0, 1, 0), .Columns.Count).Offset(1, 0).Value = .Resize(r + 1 - IIf(r > 0, 1, 0), .Columns.Count).Value 'Posun o řádek dolů
.Value = ThisWorkbook.Worksheets("Datový list").Range("A26:F26").Value 'Poslední zápis na první řádek DB
End With
.Worksheets("Protokol").Copy after:=.Worksheets("Databáze") 'Kopíruj list Protokol
With .Worksheets("Datový list")
N = .Cells(26, 1) & " " & .Cells(26, 3) 'Název pro nový list
End With
With .Worksheets(.Worksheets("Databáze").Index + 1) 'Pro novou kopii
.Name = N 'Nastav název
.Buttons("btnOdeslatUlozit").Delete 'vymaž zkopírované tlačítko
.Range("B2:M44").Validation.Delete 'vymaže seznamy
End With
With .Worksheets("Protokol")
.Activate
.Range("D28,D29,D30,K5,B5,B8,C8,D8,G8,L8,B10,F11,F15,H15,L15,F16,H16,L16,F17,H17,L17,F18,H18,L18,F21,H21,L21,F22,H22,L22,F25,H25,L25,F28,H28,L28,F29,H29,L29,F30,H30,L30,B33,F40,H40,L40").ClearContents ' vymaže zadanou oblast buněk
End With
.Save ' uloží
End With
End Sub

testované iba po riadok .Worksheets("Protokol").Copy ...

V prvom prípade sa počíta s definovaným názvom "Konstanta"
Sub pokus()
Dim Stlpec As Integer
Const Konstanta_VBA = "už viem čo"
Stlpec = 1 'A
MsgBox (Worksheets(1).Cells(2, Stlpec) & " - " & [Konstanta])

Stlpec = 2 'B
MsgBox (Worksheets(1).Cells(2, Stlpec) & " - " & Konstanta_VBA)
End Sub

Dešifrovanie takto dlhého kódu je na hranici možností, ale kompletné prekopanie kódu na zapisovanie poliami, je bez reálnych dát v takto rozsiahlom kóde, s takým obrovským trafikom, s vypočítavanými pozíciami z premenných, množstvom premenných, a pritom sa nepomýliť a nedopliesť niečo, JE NEMOŽNÉ !. Urobil som Vám to niečo za polovicu. Neručím za to či je všetko správne, pretože to dávam čisto z hlavy, nieje na čom testovať (a verte, že takéto niečo JE potreba testovať, každý krok, napr. na pretečenie polí). Dalo by sa to ešte skrátiť, napr. vynechaním t1,p1,s1 ... tieto hodnoty by sa vo výpočtoch rátali rovno z poľa, výpočty by sa ukladali rovno do polí a nie najskôr do premennej a tá do polí.
Tam kde je to prvé On Error Resume Next (tesne pred koncom mojej úpravy) som už pole nedával, už sa mi nechcelo.

Napíšte, ktorú verziu z tých 4 čo som poslal chcete použiť, napíšte názov listu a rozsah kam chete vzorce, a napíšte názov listu a rozsah kde majú byť dáta. Upravím Vám to, inak by so musel zase len hádať. A na to nemám absolútne čas 4

Osobne by som si urobil reinštal Office.

@dakt
Skúste na tie vzorce toto

...2 vs 47 min...

Použite skrátené odkazovanie cez With
With ThisWorkbook.Sheets("pokus1.xlsm")
...
.Range("b1") = Teplota_K
...
End With

Alebo ešte lepšie Range nahradte za
.Cells(1,2) = Teplota_K
A úplne najlepšie, ak zapisujete súvislé oblasti, použite polia. Napr. zapisujete naraz polozky do A1:C1
.Rannge("A1:C1")=Array(Teplota_C, Teplota_K, Vypocet_XYZ)
alebo
.Cells(1, 1).Resize(,3)=Array(Teplota_C, Teplota_K, Vypocet_XYZ)

Píšem iba z tabletu, tak snáď som nevyrobil technickú...

@Seeberg-Radek
No predsa súbor Priečky.xlsm.
Tu je "nová" verzia s obomi možnosťami "vkladania" riadkov.

Máte pravdu, to activesheets som dopísal iba v noci, neskúšal... Rovnako som tam zabudol Module2 vymazať.

Posunúť celé Range ma napadlo ako prvé, a ani dnes netuším prečo som ho tam včera nedal, ale dal som Insert Row. S poliami inak pracujem rád :)

Ten SUM čo ste dal je parádny. Pôvodne som tam dal SUM(C:C), ktorý si s hlavičkou poradí, lenže započítava aj riadok 2 (nezapísaný len napísaný), možností je množstvo. Aj ten Váš vzorec dáva oblasť o 1 riadok väčšiu.

Je to jedno, ale len zo zaujímavosti tento vzorec
=SUM(INDEX(C:C;3):INDEX(C:C;IF(INDEX(C:C;2)="";IF(COUNTA(C:C)>1;COUNTA(C:C)+1;3);IF(COUNTA(C:C)=2;3;COUNTA(C:C)+1))))
nedá inú oblasť ako iba pod riadkom 2, iba presný počet riadkov, s tým že koriguje, aby nebol zarátaný riadok pod zaplnenou oblasťou, ani prípadný zapísaný 2 riadok (ale ešte nepotvrdený), a zároveň ak niesú data, odkazuje na prvý možný riadok, čiže 3. A riadky môžu byť aj mazané. Ale príde mi to komplikované 7

napr takto

Ešte miniúprava (a keď ja by som si nahradil Range za Cell). Skúste si dočasne vyradiť riadok ActiveWorkbook.RefreshAll a uvidíte, aký budete mať rozdiel.

A nepomohlo by pretiahnutie tých súborov z LAN k Vám na disk a aktualizovať data z disku? Ale to iba tápem...

Ešte by som to upravil na oveľa kratšiu verziu s menším počtom prestupov, ale práve som si uvedomil, že makro pomalé nieje. Pomalý bude ten ActiveWorkbook.RefreshAll
Ako píše, prepojených 5 súborov + KT.
Niekde sa tu už tuším povaľuje diskusia o optimalizovaní KT (to je mimo mňa).

Toto riešiť bez prílohy ... to je pre vešticu :)
Skúste takto nejak. Pokusy robiť zásadne na kópii súboru.

Ak nepoznáte mená listov/súborov z ktorých načítate data to je fuk, to rieši makro a nemá to s týmto nič spoločné.
Naopak musíte vedieť meno listu ktorý je použitý vo vzorci, a to :

za A ) ten list má názov odkazovaný priamo vo vzorci, a meno listu je nemenné a známe.

za B ) meno toho listu vo vzorci je menné, a je použité pomocou INDIRECT, ale stále musí tento INDIRECT vedieť kde je meno listu uložené.
Excel nemá vzorcové možnosti, ako zistiť neznáme meno iného listu. Ale lepšie by bolo, keby ste v tom makre vložili upravený vzorec s korektným názvom listu.
Všetko snáď objasní príloha.


Strana:  1 ... « předchozí  267 268 269 270 271 272 273 274 275   další » ... 298

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