Tak jsem koukl. Trošku jste mně dostal, že nejde o excel a máte to v sekci MS Excel ;)
Takže nebudu hrát chytrého, že to vím, ale myslím si, že ta data tam uložena nejsou, protože ten objekt je uložen jako obrázek .emf.
Nikdy jsem vlastně nezkoumal propojení objektů, ale tváří se to, že to funguje právě na principu obrázků.
Ano. Někde být uložené musí. Kdysi jsem to řešil, ale už si nevzpomínám ;)) .
Vložte přílohu.
Mám už teda vlasů poskrovnu, ale když vidím Select, tak rostou (dodám, že když už jsem si zvykl, že je nemám, tak nechci aby rostly ;) ). Jsou případy, kdy se mu nelze vyhnout, ale těch moc není. Ale k problému.
Pokud jsem to pochopil, data jsou doplňována postupně, den za dnem. Pokud není otevřen soubor 3 dny, chce se doplnit poslední 3 chybějící data.
Tedy zjistím poslední vyplněné datum (fce MAX), počet chybějících hodnot (zjištěné MAX - včera) a ty doplním.
Není tady třeba žádného cyklu a už vůbec selectu.
Sub subWriteMissingDates()
With ThisWorkbook.Sheets("List1")
If IsEmpty(.Cells(1)) Then
.Cells(1).Value = Date - 1
Else
Dim dMax As Date
dMax = Application.WorksheetFunction.Max(.Columns(1))
If dMax < (Date - 1) Then
Dim iMissingValuesCount As Integer
iMissingValuesCount = (Date - 1) - dMax
With .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(iMissingValuesCount, 1)
.Value = Application.Evaluate(CLng(dMax) & "+(ROW(1:" & iMissingValuesCount & "))")
.NumberFormat = "d.m.yyyy"
End With '.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(iMissingValuesCount, 1)
End If
End If
End With 'ThisWorkbook.Sheets("List1")
End Sub
S přechodem na excel 2007 jsem digitální podpis přestal používat (vystačím si s důvěryhodným umístěním), takže si tipnu.
List, který kopírujete obsahuje kód? Digitální podpis byl vytvořen pomocí nástroje Digitální certifikát pro projekty v jazyce VBA? Byl vytvořen v PC (a OS) kde kopírujete list?
Tím, že tento list zkopírujete, změníte projekt. Tím pravděpodobně přijdete o digitální podpis, protože aby projekt zůstal podepsán, může ho měnit pouze vlastník certifikátu k digitálnímu podpisu.
Kdysi jsem byl trpělivý a projekty znovu podepisoval - excel se mne pak neptal na povolení maker. Ale jak už jsem zmínil, s příchodem E2007 si vystačím s důvěryhodným umístěním.
Pokud chcete dál používat podpisy, zkuste zprovoznit list tak, aby neobsahoval kód, pak jeho kopírování nebude vadit.
Zkuste kouknout na doplněk Petra Pecháčka
http://excelplus.net/doplnek-kalendar/
@marjankaj
DOSADIT
@Palooo
navím jak jaro, ale já to dělám relativně často. Proceduru měním a ladím v testovacím souboru a až jsem spokojen, překopíruju. Do té doby původní soubor funguje se starým kódem.
Mno - můj způsob:
1. Odstraním modul v projektu (dle ALa sešit 2), který chci aktualizovat.
2. Uchopím modul v aktualizovaném projektu (sešit 2) levým tlačítkem, přetáhnu na projekt sešitu 1 a uvolním.
Ano - to je excel ;))
Ale je to vlastně v pořádku, protože máte formát buňky obecný a text změníte na číslo, takže jsou odstraněny zbytečné 0.
Záleží, jak s tím chcete dále pracovat.
Může stačit upravit formát buňky na "0000000000" - pak bude v buňce číslo zobrazené i s nulama. nebo musíte převést na text a pak nahradit pomlčku.
Potřeboval bych tedy makro upravit tak, aby při zapsání řady se nic nedělo
Tak jste to chtěl ;))
Mno - úmyslně text nezadáte, ale neúmyslně? ;))
Záleží na Vás, pokud budete chtít pořešit, neměl by to být problém ;)
Jen upozorňuji, že tak jak je to napsané, to funguje jen pro sloupce B až D
Pokud byste chtěl vložit sloupce nebo odstranit sloupec A a pracovat v A až C, je třeba upravit.
Tzn není to úplně blbuvzdorné, muselo by se ještě poladit ;)
Mno a řádeklVal = Target.Cells(1).Value * 1000000 + 140001je také rizikový (vložení textu), ale to zatím neřeším, protože nevím jestli je to správně.
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column = 3 And Not IsEmpty(Target.Cells(1).Offset(-1, 0)) Then
If Not IsEmpty(Target.Cells(1).Offset(0, -1)) Then
Dim lVal As Long
lVal = Application.Evaluate("MAX(D2:D" & .Row - 1 & "*(B2:B" & .Row - 1 & "=B" & .Row & ")*(C2:C" & .Row - 1 & "=C" & .Row & "))+1")
If lVal = 1 Then
lVal = Target.Cells(1).Value * 1000000 + 140001
End If
Cells(.Row, 4).Value = lVal
Else
If IsEmpty(Target.Cells(1)) Then
Cells(.Row, 4).ClearContents
Else
Cells(.Row, 4).Value = "#SLOUPEC ŘADA JE PRÁZDNÝ"
End If
End If
End If
End With 'Target
End SubSnad to funguje ;)
Pokud je buňka ve sloupci C nad změněnou buňkou prázdná, neděje se nic (je možno psát pod data)
Pokud je buňka ve sloupci B vedle změněné buňky prázdná, napíše hlášku
Pokud buňku vymažete (je prázdná), vymaže se i záznam
Mno a to co jen tipuji - pokud nenajde shodu v předešlých záznamech, vloží hodnotu T140001 (T je typ)
Ta příloha je stejná jako v prvním příspěvku. Žádný sloupec nepřibyl ;) .
Ano dá. Použijte vlastní formát.
Např.:
0 000" m2"
@AL
mno, ono to možná nebude až takhle jednoduché. Protože upřímně, zprávy ve status baru si hned tak někdo nevšimne.
Spíše myslím, že se chce vidět okno se zprávou v době chodu kódu. Takže např.:
UserForm, ShowModal nastavený na False, v něm Label s textem "ČEKEJ, PRACUJI", zobrazený na začátku kódu a ukončený na konci a deaktivující "křížek" pomocíPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
End SubJsou tam ale ještě ale (např: TopMost, kliknutí mimo), takže by se muselo vidět konkrétně, možná postačí urychlit běh kódu.
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.