Můžu poslat příklad s použitím application.ontime, kdy se pouští pouze 1x a ne zamknutí by vadit nemělo, otestováno s příkladem, který po 10s přičte 1.
Dim ind As Boolean
Public Sub spust()
ind = True
Application.OnTime Now + 10 / 24 / 3600, "procedura"
End Sub
Public Sub zastav()
ind = False
End Sub
Public Sub procedura()
If ind = True Then
Cells(1, 1) = Cells(1, 1) + 1
Application.OnTime Now + 10 / 24 / 3600, "procedura"
End If
End Sub
Zkusil bych
if ActiveWorkbook.ReadOnly = true then ...
M@
M@
Buď by to šlo přes ADO (jde-li jen o data), nebo se koukni na předchozí téma - když se to trochu upraví, tak i toto je použitelné, byť ne nejelegantnější.
M@
myslím že je :-)
zkus přílohu, snad není třeba to komentovat :-), kdyby jo, tak se ozvi.
M@
Tak z toho už jsem matěj :-).
Asi začnem od začátku, ne? :-)
Máš nějaký souhrnný soubor, kam chceš načítat data z několika různých souborů na řekněme síťovém disku X:\Data\
ANO / NE
Načítat chceš data ze všech souborů vždy z jednoho konkrétního listu, který znáš.
ANO / NE
Data se budou načítat do jednoho souboru s tím že co zdrojový soubor, to jeden list v cílovém souboru.
ANO / NE
Data se mají ve zdrojových souborech vybírat dle nějakých kritérií, hodnotově, nebo sloupcově (ANO), nebo vždy všechna (NE) na daném listu?
ANO / NE
To víš, my ti do hlavy ani pod ruce nevidíme :-).
M@
skoro všechno jde, otázka je má-li to smysl :-), případně odkud se data berou, je to statické, či funkční?
Oblast mém definovanou skrze proměnné:
max = Sheet.UsedRange.Rows.Count + prvni
počet použitých řádků + počet prázdných řádků na začátku
Seet.Range("A8:I" & max).Copy ActiveSheet.Cells(rd, 1)
kopíruje buňky od buňky A8 po buňku I posledního řádku.
Vkládá na souhrnný list do řádku rd, sloupce A. řádek rd je proměnný a s každnou načtenou oblastí se mění.
M@
Asi mi přijde, že to máš zbytečně komplikovaný - proč prostě nepřenést vše a nekomplikovat si život vzorci a propojení na originály? Možná mi jen něco uniká :-). Zkus přílohu.
M@
viz. příloha.
M@
příklad v příloze.
Public Sub kontrola()
Dim rd As Single
Dim sl As Single
Dim jmeno As String
rd = 5 ' první řádek
sl = 2 ' první sloupec
Do While Cells(rd, sl + 1) <> "" Or Cells(rd + 1, sl + 1) <> ""
If Cells(rd, sl) <> "" Then jmeno = Cells(rd, sl)
If Cells(rd, sl + 1) <> "" Then
If Left(Cells(rd, sl + 1), Len(jmeno)) = jmeno Then Cells(rd, sl + 2) = "OK" Else Cells(rd, sl + 2) = "NOK"
End If
rd = rd + 1
Loop
End Sub
M@
více způsoby :-).
1) makrem v cyklu dosadit zmíněný vzorec
2) napsat si vlastní funkci a použít tuto
3) projet to v cyklu makrem a stejným způsobem porovnat hodnoty pomocí VBA a zapsat statický výsledek.
if cells(radek,sloupec) = left(cells(radek,sloupec+1),len(cells(radek,sloupec))) then cells(radek,sloupec+3)="OK" else cells(radek,sloupec+3)="NOK"
Za předpokladu že ve sloupci B budeš mít prvek rozkopírován všude, tak lze použít porovnávání:
=KDYŽ(B3=ZLEVA(C3;DÉLKA(B3));"OK";"NOK")
M@
Zlobit se nebude :-).
relativní adresu
NameCSV = ThisWorkbook.Path & "\cesta k souboru\soubor.csv"
změníš na absolutní
NameCSV = "\\SERVER\SLOŽKA\SOUBOR.CSV"
M@
Tak to zkus.
Udělal jsem vlastní "databanku" ke které se v pracovním souboru adresa uvádí na listu DB v buňce G1.
V pracovním souboru je modul s makrem pro načtení dat z databanky a pro přidání do databanky, což si můžeš upravit dle potřeby. Přidání do databanky proběhne ihned po zadání a to tak, že si nejprve stáhne aktuální data, porovná je s novou hodnotou a pokud neexistuje, tak přidá do databanky a hned na to si opět stáhne data.
Seznam na zadávacím listu jsem udělal jen v těch prvních 3 řádcích a to pomocí pojmenovaných oblastí odkazujících se na oblasti kam se načítají data z databáze.
Co jsem neudělal je volání načítacího makra po spuštění, ale to věřím, že zvládneš.
A možná tě pojmenované oblasti na jiném listu inspirují tak, že na tom zadávacím listu zruším ty skryté sloupce :-)
M@
M@
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.