A zná (umí) ta serverová verze Excelu všechny prvky na daném formuláři?
Kdysi jsme něco podobného řešili, a problém byl v tomto. Některý dřívější kolega použil totiž "nestandardní" prvek, který pak na některých PC způsoboval pád aplikace (různé instalace a aktualizace Excelu...).
P.
Přilož ukázku dat...
P.
Přes SUMIF to lze samozřejmě také, jenom je potřeba dbát na správné pořadí argumentů (liší se od SUMIFS), spoustu lidí to mate ;-).
Jinak SUMIF je primárně určena pouze na 1 kritérium, SUMIFS na 1 a více kritérií (sadu podmínek).
P.
Př.:
=SUMIF(B:B;"<>"&"";A:A)
U mě funguje v pohodě...
http://wall.cz/upload/dn/excel_provoz_auta.zip
P.
Můžeš např. vybrat všechny listy, a pak zapsat hodnotu (resp. vzorec) do požadované buňky. Tímto způsobem se to propíše na všechny vybrané listy.
P.
Příklad:
Sub Hodnota_stejna_do_vsech_listu()
ActiveWorkbook.Sheets.Select
Range("A12").Select
ActiveCell.Value = 1
End Sub
Doplňující dotazy:
1.) Chcete kopírovat celé listy?
2.) Budou mít listy různé názvy, nebo mohou být stejné? Mají se případně názvy listů zachovat?
Toto nepomůže?
http://wall.cz/index.php?m=topic&id=5240&page=1#posts
P.
Za předpokladu, že budeš v onom excelovém sešitu tisknout jenom List1, a za předpokladu, že budeš tisknout vždy pouze 1 kopii, by se dala využít událost BeforePrint (uložena do ThisWorkbook). Jelikož jsou buňky na sobě závislé, tak předpokládám, že číslo nastavuješ pouze v jedné z nich, a ostatní jsou navzorcované. Pak by to šlo udělat takto (počáteční hodnota buňky B1 před prvním tiskem musí být 0):
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("List1").Range("B1").Value = Sheets("List1").Range("B1").Value + 1
ThisWorkbook.Save
End SubPokud by se jednalo o rozsáhlejší tisk více kopií, tak bych nakopíroval zakázkové karty pod sebe, a patřičně navzorcoval s inkrementem 1...
P.
V pohodě, upravené:
Sub Kontrola_cen()
Dim sloupec_s_MJ As Integer
Dim sloupec_s_cenou As Integer
Dim prvni_radek_kontroly As Integer
Dim kontrolni_hodnota As String
Dim defaultni_hodnota_inputboxu As String
Dim i As Long
Dim msg As Byte
On Error Resume Next
sloupec_s_MJ = InputBox("Zadejte číslo sloupce s měrnými jednotkami:", "Nastavení makra")
sloupec_s_cenou = InputBox("Zadejte číslo sloupce s kontrolovanou cenou:", "Nastavení makra")
prvni_radek_kontroly = InputBox("Zadejte číslo prvního kontrolovaného řádku:", "Nastavení makra")
For i = prvni_radek_kontroly To 10000
If (Cells(i, sloupec_s_MJ) <> "") And (Cells(i, sloupec_s_cenou) <= 0) Then
Cells(i, sloupec_s_cenou).Select
If Cells(i, sloupec_s_cenou) = "" Then
defaultni_hodnota_inputboxu = "---"
Else
defaultni_hodnota_inputboxu = Cells(i, sloupec_s_cenou).Value
End If
kontrolni_hodnota = InputBox("Opravte hodnotu v buňce: " & Cells(i, sloupec_s_cenou).Address & "!", "Upozornění", defaultni_hodnota_inputboxu)
If kontrolni_hodnota = "---" Then
Exit Sub
Else
Cells(i, sloupec_s_cenou).Value = kontrolni_hodnota
End If
End If
Next i
msg = MsgBox("Všechny záznamy byly zkontrolovány a případně opraveny!", vbInformation)
End SubUdělal jsem to tak, že pokud se klikne na "Cancel" při opravě buněk, tak makro přejde k další kontrolované buňce. Pokud se potvrdí tlačítkem "OK" nastavená defaultní hodnota "---", tak se makro okamžitě ukončí.
P.
OK, poslední pokus. Pokaždé píšeš trochu něco jiného ;-)...
1.) Makro tedy umožní uživateli nastavit číslo sloupce s měrnými jednotkami, číslo sloupce s kontrolovanou cenou a číslo prvního kontrolovaného řádku.
2.) Dále bude od příslušného řádku kontrolovat, zda jsou zadány měrné jednotky, pokud ano, tak zkontroluje i správné zadání ceny (nezáporná, nenulová).
3.) Pokud bude cena ve špatném tvaru, tak umožní uživateli opravu hodnoty - InputBox nepůjde vypnout, dokud nebude hodnota správná.
4.) V tomto případě pak již nemusím nikam zapisovat, že se jedná o chybu, protože bude vždy opraveno...
P.
Možné řešení makrem:
Sub Kontrola_cen()
Dim sloupec_s_MJ As Integer
Dim sloupec_s_cenou As Integer
Dim prvni_radek_kontroly As Integer
Dim i As Long
Dim msg As Byte
sloupec_s_MJ = InputBox("Zadejte číslo sloupce s měrnými jednotkami:", "Nastavení makra")
sloupec_s_cenou = InputBox("Zadejte číslo sloupce s kontrolovanou cenou:", "Nastavení makra")
prvni_radek_kontroly = InputBox("Zadejte číslo prvního kontrolovaného řádku:", "Nastavení makra")
For i = prvni_radek_kontroly To 10000
If (Cells(i, sloupec_s_MJ) <> "") And (Cells(i, sloupec_s_cenou) <= 0) Then
Cells(i, sloupec_s_cenou).Select
Do Until Cells(i, sloupec_s_cenou).Value > 0
Cells(i, sloupec_s_cenou).Value = InputBox("Opravte hodnotu v buňce: " & Cells(i, sloupec_s_cenou).Address & "!", "Upozornění")
Loop
End If
Next i
msg = MsgBox("Všechny záznamy byly zkontrolovány a případně opraveny!", vbInformation)
End Sub
No jo, ale to jsi nám dříve neřekl :-).
Takže to shrňme:
1.) Makro musí být univerzální, a musí si samo najít, ve kterém sloupci je - doplň názvy ("MJ" a "J.cena [CZK]"?)... Bude alespoň označení těchto sloupců vždy na řádku 16?
2.) "Počáteční buňka, od které bude vypisovat chybné výpočty" - tím myslíš zadání řádku, od kterého bude probíhat kontrola buněk?
Jo a mimochodem, nebylo by lepší to řešit úplně bez maker? Jenom přes vzorce a podmíněné formátování? Například pokud bude prázdné pole množství nebo záporná cena, tak buňka zčervená...
P.
V tom případě tam nevkládej přes VBA vzorec (Formula), ale vlož do buňky přímo hodnotu (Value). Třeba nějak takto:
ActiveCell.Value = Sheets("MFA-CELKEM").Range("I11").ValueP.
Například nějak takto:
=KDYŽ(COUNTBLANK(C4:U4)=19;"";DNES())Jenom upozorňuji, že funkce DNES vrací aktuální datum, takže se bude každý den měnit... Pokud má být datum zadané napevno, tak je třeba jej překopírovat na hodnotu. Případně si lze také napsat ve VBA událost listu, která bude toto datum vkládat na základě nějaké podmínky, například:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
For i = 4 To 100
If Cells(i, 1).Value = "" And _
Application.WorksheetFunction.CountBlank(Range(Cells(i, 3), Cells(i, 21))) <> 19 Then
Cells(i, 1).Value = Date
End If
Next i
End SubP.
Kliknul jsi na tlačítko "Kontrola"? ;-)
Pokud bys to chtěl vyloženě řešit přes InputBoxy, tak lze využít ten můj kód...
P.
http://lmgtfy.com/?q=hromadn%C4%9B+zmen%C5%A1it+velikost+fotografi%C3%AD
P.
Zkus to možná ještě trochu více a lépe popsat.
Jediné, co dělá tvé makro, je doplnění vzorce do sloupce I. Co má dělat po tomto? Má projít řádky s nezadanými měrnými jednotkami a nulovým nebo záporným výsledným výpočtem, a pomocí InputBoxu umožnit uživateli opravu hodnot? (Píšeš, že se mají zadávat tři hodnoty, jsi si jistý? Nemají se zadávat hodnoty dvě? Ta třetí už je přece ten vzorec...)
P.
Například nějak takto?
Dim i As Long
For i = 8 To 825
If Cells(i, 4) = "" Then
Do Until Cells(i, 4).Value <> ""
Cells(i, 4).Value = InputBox("Zadejte měrné jednotky do buňky " & Cells(i, 4).Address & "!", "Upozornění")
Loop
End If
If Cells(i, 7) <= 0 Then
Do Until Cells(i, 7).Value > 0
Cells(i, 7).Value = InputBox("Opravte výsledný výpočet v buňce " & Cells(i, 7).Address & "!", "Upozornění")
Loop
End If
Next i
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.