Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  2 3 4 5 6 7 8 9 10   další » ... 16

Stalker napsal/a:

...Vybere jakou oblast?

Po přepnutí na list správnou, ale ve spojení s objektem Workbooks().Worksheets() havaruje.

Už jsem se smířil s chybou v MSO2007 a s prostým Copy -> Paste

Začátečník napsal/a:

Ale toto funguje.

Na jaké verzi? MO 2007 (12.0) vyhazuje chybu.

Bláhově jsem se domníval, že Range(Cells(1, 1), Cells(122, 34)) === Range("A1:AH122").

Nefunguje, vrací stejnou chybu.
Problém je spíše s definicí oblasti odkud kopírovat
Range(Cells(1, 1), Cells(122, 34))Zřejmě se v tomto případě neobejdu "přepínání" mezi sešity a "klasickým" kopírováním 7
převádět to na Range("A1:AH122")se mi moc nechce.

Dobrý den, mám dotaz proč funguje makro
Workbooks(zdrojSesit).Worksheets(zdrojList).Range("A1:AH122").Copy _
Workbooks(cilSesit).Worksheets(cilList).Range("A1")

a makro
Workbooks(zdrojSesit).Worksheets(zdrojList).Range(Cells(1, 1), Cells(122, 34)).Copy _
Workbooks(cilSesit).Worksheets(cilList).Range(Cells(1, 1))

skončí chybou 1004

Díky za nakopnutí definice.

xlnc napsal/a:

...Člověk by předpokládal, že kdo dělá s Excelem, myslí hlavou....

Špatný přepoklad 5 . Jako bonus přidávám: Škola před blbostí nechrání!

=CONCATENATE()

Tipuji - "\" na konci cíle?

Radek-Klepacek napsal/a:

...co je vidět hned na první pohled v první příloze, kterou jsem zde poslal.

Hned to vidět není. Jak jsem již jednou uvedl, je lepší to řešit na úrovni vzorce nevymýšlet další zbytečné makro.
Nehodnotím kvalitu, zbytečnosti a dobu běhu makra (asi slušnej oddíl, když je na takovou blbost dost času).
Nicméně jsem si dal trochu práce najít co děláte makrem, když to zvládne "blbý" vzorec, ale proti gustu ....

V této části počítáte procenta (která chcete mimochodem nahradit pokud je výsledek chyba).
...
Range("F10").Select
ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-2]"
Selection.NumberFormat = "0.00%"
...


když už nic jiného IMHO by postačovalo základní ošetření:
...
Range("F10").Select
If Range("D10").Value = 0 Then ' to je buňka RC[-2]
ActiveCell.Value = "0.00%"
Else
ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-2]" ' proč sem nedáte přímo výsledek???
Selection.NumberFormat = "0.00%"
End If
...

nebo místo dělení vložit přímo ošetřený vzorec.
Excel umí hodně věcí, třeba i podmíněné formátování...

Pardon, ale tento způsob řešení, kdy se makrem dopočítávají vzorce mi přijde jako když blondýna sedící u PC počítá 3*6 na stolní kalkulačce.

Jaká je lokalizace Excelu?
Co použít text #DIV/0!

...
What:="#DIV/0!", Replacement:="0%", _
...


Jednodušší je to řešit na úrovni vzorce, nikoliv textu.

Obdoba se tu již řešila.

Zalomení textu je reprezentováno znakem LF, konec řádku pak znaky CR+LF.
Logicky tedy excel bere při importu toto zalomení jako nový řádek.
K čemu je ve zdroji zalomení? V CSV samozřejmě nemá opodstatnění a působí pouze problémy.

Řešení - nepoužívat zalomení řádků před exportem do CSV. Stejně je tam pouze HTML kód a ten si pak prohlížeč převezme bez ohledu na to, jestli je tam zalomení nebo ne.

Pánové prozatím Vám děkuji za reakce, bohužel, vzhledem ke zdravotní indispozici, se pravděpodobně nebudu moci v nejbližších 4 týdnech problematice dále věnovat.
Později se ozvu.

Zkusím vytvořit obdobu souborů.

Ano, jedná se o souvislou oblast dat, nejsou přerušena prázdnými řádky ani sloupci.

ScreenUpdating mám prozatím v originálu zakomentovaný, funkce pro uložení prozatím obsahuje i ladící procedury (proto její volání),

Ano, zapisování hodnot lze v některých případech ukládat v poli, ve většině však ne - nejsou souvislé oblasti.

Proměnné jsou definovány, jen sem do ukázky nebyly definice vloženy.

Zdravím,
potřeboval bych nasměrovat, jak zrychlit zpracování makra. Bohužel nemohu uvést konkrétní příklad.

Sešit1 obsahuje zdrojové hodnoty
Sešit2 obsahuje doplňkové hodnoty

Funkcí SVYHLEDAT byly doposud ručně dotahovány data do sešitu1 do desítek sloupců ze sešitu2 (nepohodlné).


i = 2
While Cells(i, "B") <> Empty
row = Najdi_Data(wrkb_1, Cells(i, "B"))

If row = Empty Then
value = "#NENÍ_K_DISPOZICI"
Call Uloz_Data(i, "D", value)
Call Uloz_Data(i, "E", value)
Call Uloz_Data(i, "F", value)
Call Uloz_Data(i, "G", value)
Call Uloz_Data(i, "S", value)
Else
Call Uloz_Data(i, "D", Workbooks(wrkb_1).Worksheets("List1").Cells(row, "D"))
Call Uloz_Data(i, "E", Workbooks(wrkb_1).Worksheets("List1").Cells(row, "E"))
Call Uloz_Data(i, "F", Workbooks(wrkb_1).Worksheets("List1").Cells(row, "B"))
Call Uloz_Data(i, "G", Workbooks(wrkb_1).Worksheets("List1").Cells(row, "C"))
Call Uloz_Data(i, "S", Workbooks(wrkb_1).Worksheets("List1").Cells(row, "F"))

End If

i = i + 1
Wend

Private Sub Uloz_Data(row, col, value)
Cells(row, col) = value
End Sub

Private Function Najdi_Data(filename, value)
wrkb_act = ActiveWorkbook.Name

If Not Intersect(Cells(2, 2), Range("B:B")) Is Nothing Then
With Workbooks(filename).Worksheets("List1")
Set Nalezeno = .Cells.Find(what:=value, after:=Cells(2, 2), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
End With
If Not Nalezeno Is Nothing Then Application.Goto Nalezeno, True
End If

If Not Nalezeno Is Nothing Then
Najdi_Data = Nalezeno.row
End If

Workbooks(wrkb_act).Activate

End Function


Při stovkách řádků lze použít, ovšem při tisících řádků je již časově náročné.
Jak lze optimalizovat a zrychlit toto makro?

Děkuji za rady.

Asi jste nečetl odkazy, které jsem uvedl, že?
Stačí si upravit funkci pro Vaše potřeby.


Strana:  1 ... « předchozí  2 3 4 5 6 7 8 9 10   další » ... 16

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse