[ nenandi @ 21.08.2018. 12:46 ] @
Postoji li nacin da iz tabele koja ima listove od 1 do 31 (dani u mesecu)
pomocu vlookup-a na osnovu datuma koji je danas (primer danas je 21/08/2018 gadja sheet 21).
Hvala
[ Jpeca @ 21.08.2018. 13:37 ] @
U pomoćnoj ćeliji formiraj adressu VLOOKUP tabele kao treb. Npr. ako se na svim listovima koristi opseg A1:D20 može
Code:
="'"&DAY(TODAY())&"'!A1:D20" 

Onda u VLOOKUP pozoveš sadržaj ove ćelije preko INDIRECT funkcije
Naravno, može i da se izbegne pomoćna ćelija i da se sve iskobminuje u jednu (komplikovaniju) formulu
[ bokinet @ 21.08.2018. 13:43 ] @
Ako sam dobro razume u nastavku evo resenja pomocu VLOOKUP kao nacin kako da se to resi i da se iskoristi da se dobije sta se hoce.

[ nenandi @ 21.08.2018. 17:58 ] @
Evo fajlova u prilog napravio sam okvirno kako treba da izgleda u fajlu proizvodnja unosi se sta je proizvedeno, a u fajlu otpad treba na osnovu datuma da se povuce otpad za taj dan po smeni.
[ bokinet @ 21.08.2018. 21:49 ] @
@nenandi

Na osnovu primera mozes da odradis sta je potrebno.

Brzinski sam pogledao ova dva XLS file-a.
Ovde imate vezu gde se uzima u obzir i masina ali i proizvod i smena.

Takodje malo jasnije definisano sta se hoce i sta se zeli dobiti ne bi bilo lose da se napise obzirom da na pocetku vase teme, vec dati primeri s' moje strane i sa strane @Jpeca su odgovorili na vase pitanje s' pocetka.

[ Ivek33 @ 21.08.2018. 23:36 ] @
Citat:
nenandi:Evo fajlova u prilog napravio sam okvirno kako treba da izgleda .
Nešto slično sam radio u tutorijalu pa vidi ova dva linka

- Kako dijeliti podatke između dvije Excel datoteke
- Kopiranje podataka iz druge Excel radne knjige

Ako nije problem dodati jednu pomoćnu kolonu na svakom sheetu u stupac 'A'.

Formula u A3
Code:
=B3&C3

U ovom tvom primjeru probaj koristiti formulu ispod u ćeliji 'D3' u 'otpad' workbook. Kopiraj je u desno pa prema dolje
Code:
=VLOOKUP($A3;INDIRECT("[Proizvodnja.xlsx]"&DAY($G$1)&"!$A$3:$G$13");COLUMN(E$1);FALSE)

Da bi izbjegao Error ili 0 koristi IFERROR ili IF funkciju.
Vidi moj primjer u privitku. (btw: podrazumijeva se da su obje workbook otvorene prilikom rada)
[ nenandi @ 22.08.2018. 09:19 ] @
Ne smem da menjam fajl proizvodnja mozda bi zgodnije bilo da iskopiram $A$3:$G$13 u pomocnom listu za Otpad pa onda ra da predvajam po masini?
[ Ivek33 @ 22.08.2018. 14:56 ] @
Onda probaj ove tri formule ispod (malo poduži tekst ali ja ne znam kako da ti drugačije pojasnim).

U ovom primjeru koristio sam INDEX/MATCH kombinaciju funkcija/formula.

Workbook 'Otpad' u ćeliji 'D3' (kopiraj samo dolje)
ARRAY Formula (završavaš je sa Ctrl+Shift+Enter ili CSE)
Code:
=INDEX(INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!D$3:D$13");MATCH($A3;INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!A$3:A$13")&INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!B$3:B$13");0))

Workbook 'Otpad' u ćeliji 'E3' (kopiraj samo dolje)
ARRAY Formula (završavaš je sa Ctrl+Shift+Enter ili CSE)
Code:
=INDEX(INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!E$3:E$13");MATCH($A3;INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!A$3:A$13")&INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!B$3:B$13");0))

Workbook 'Otpad' u ćeliji 'F3' (kopiraj samo dolje)
ARRAY Formula (završavaš je sa Ctrl+Shift+Enter ili CSE)
Code:
=INDEX(INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!F$3:F$13");MATCH($A3;INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!A$3:A$13")&INDIRECT("'[Proizvodnja.xlsx]"&DAY($G$1)&"'!B$3:B$13");0))


Uoči da su ovo "Formule Polja" (ARRAY ili CSE formula) koje mogu opteretiti vrijeme Excel kalkulacije ako imaš puno redova i podataka. Ove formule ne možeš završiti samo sa 'Enter' tipkom već kombinacijom Ctrl+Shift+Enter.
Također uoči da je korištena Excel funkcija INDIRECT koja je "Volatile Funkcija" kao i tvoja =NOW() koju si koristio u G1 ćeliji i "nije je preporučljivo koristiti", ako se baše ne mora.

Tri iznad navedene formule funkcioniraju na slijedeći način:

- MATCH funkcija vraća broj reda za uvjet, ovdje sam koristio spajanje dva podatka iz stupaca 'A' i 'B' iz Workbook 'Proizvodnja'. Da bi mogao koristiti promjenjivi podatak iz ćelije 'G1' koristio sam Indirect funkciju.

- INDEX funkcija/formula vraća rezultat iz reda koji je dala Match formula. Da bi mogli koristiti promjenjivi podatak u ćeliji G1 ja sam upotrijebio INDIRECT funkciju koja uz tekstualni string vraća adresu u kojoj Index formula traži rezultat.
Ako malo bolje pogledaš INDEX funkciju i njenu sintaxu tada ćeš vidjeti da je prvi argument "array" ili "reference". Za ovaj prvi argument iskorisito sam INDIRECT funkciju/formulu.
Ova Excel ugniježđena funkcija tj. Indirect formula tijekom kalkulacije vraća rezultate iz svih ćelija navedenog raspona (A3:A13).
Da bi ovo provjerio koristi tipku "F9" ili "Evaluate Formula". Primjere možeš vidjeti na dotičnim linkovima.

- INDIRECT funkcija uz pomoć niza stringova vraća putanju/adresu koje onda ugniježđena formula pretvara u upotrebljiv podatak za nadređenu funkciju.

Napomena:
Ako u Workbook 'Otpad' ukloniš stupac 'A' u kojem se nalaze spojeni podaci iz stupaca 'B' i 'C' tada unutar MATCH formule možeš koristiti Concatenate funkciju. U stvari možeš i u ovom primjeru ispod, ali tek toliko ako želiš izbjeći stupac 'A'.
umjesto ovog ispod
Code:
;MATCH($A3;INDIRECT(

koristi ovaj dio koda ispod
Code:
;MATCH($B3&$C3;INDIRECT(

Ako želiš izbjeći error #N/A koristi funkciju IFERROR ili IF ako želiš izbjeći i nulu (0).

Moraš isprobati i vidjeti vrijeme trajanja kalkulacije u odnosu na količinu redova i podataka.
Vidi primjere u privitku.
[ nenandi @ 22.08.2018. 22:18 ] @
Uh samo sam ispustio da napomenem da fajl Otpad nema zakucan proizvod (napiso sam nasumicno), nego tek kad se proizvod proizvede onda se upunjava koji je proizvod i kolicina otpada po smenama.
Pokusavam da podatke povucem sa ovi macro-om ali ne uspevam da otvorim pravi fajl i list koji hocu, ne znam da li problem sto je fajl u *.xls formatu ili trebam u ovoj liniji "Sheets(Sheets(1).Range("G2")).Activate" da zakucam putanju fajla tu puca debuger

' DataGet

Workbooks.Open Filename:= _
"Z:\SProizvodnja\Proizvodnja.xls"
Sheets(Sheets(1).Range("G2")).Activate
Range("A3:F20").Select
Selection.Copy
Windows("Otpad.xlsx").Activate
Worksheets("Pomocne tabele").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

ActiveWorkbook.Save
Worksheets("Otpad").Activate
[ bokinet @ 22.08.2018. 22:34 ] @
najbolje da lepo prvo sednes i napises sta treba da se uradi i kako to treba da izgleda.
znaci logika koja ide i nacin rada i kako se sta unosi od strane krajnjeg korisnika i sta na kraju treba da se dobije.

sve ostalo je moguce resiti preko VBA ako se zna sta se hoce sto se tice Excel-a.

[ nenandi @ 23.08.2018. 06:26 ] @
U sustini to je to, kljuc je u tome da pomocu datuma iz celije otvoris pravi list i kopiras sadrzaj u fajl odakle ces dalje da razvrstas podatke.
[ Ivek33 @ 23.08.2018. 13:16 ] @
Citat:
nenandi:Uh samo sam ispustio da napomenem da fajl Otpad nema zakucan proizvod (napiso sam nasumicno), nego tek kad se proizvod proizvede onda se upunjava koji je proizvod i kolicina otpada po smenama........
Pa što nisi odmah rekao da ne gubim vrijeme. Riješi to sa VBA.
[ Ivek33 @ 23.08.2018. 13:17 ] @
Citat:
nenandi:U sustini to je to, kljuc je u tome da pomocu datuma iz celije otvoris pravi list i kopiras sadrzaj u fajl odakle ces dalje da razvrstas podatke.
Pa što onda ne štima?
Nakon povlačenja podataka napravi VBA koji će sve konvertirati u tekstualnom obliku.
[ nenandi @ 23.08.2018. 21:48 ] @
ovo ne znam gde gresim...
Citat:
Pokusavam da podatke povucem sa ovi macro-om ali ne uspevam da otvorim pravi fajl i list koji hocu, ne znam da li problem sto je fajl u *.xls formatu ili trebam u ovoj liniji "Sheets(Sheets(1).Range("G2")).Activate" da zakucam putanju fajla tu puca debuger

' DataGet

Workbooks.Open Filename:= _
"Z:\SProizvodnja\Proizvodnja.xls"
Sheets(Sheets(1).Range("G2")).Activate
Range("A3:F20").Select
Selection.Copy
Windows("Otpad.xlsx").Activate
Worksheets("Pomocne tabele").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

ActiveWorkbook.Save
Worksheets("Otpad").Activate
[ bokinet @ 23.08.2018. 22:21 ] @
1. Sta zelis da uradis pre svega konkretno?

2. Da li si proverio da li file koji si naveo fizicki postoji?

Dodato naknadno:

Mozes da iskopiras sve sta ti je potrebno iz XLS file-a koji mora da ostane nepromenjen i koji je znaci staticna u ovaj s' kojim radis.
Na kraju kad sve zavrsis mozes sve to obrises ako nije potrebno da budu u okviru ovog file-a s' kojim radis.
Opet bitan je ceo koncept i plan sta se radi.


[ nenandi @ 24.08.2018. 07:41 ] @
Normalno fajl postoji serovan je folder koji sam ja mapirao kao "Z:" iz fajla "Otpad.xlsx" na osnovu datuma ako je danas 24.08.2018. celija "G2" hocu da otvori 24 sheet u fajlu "Proizvodnja.xls" koji se nalazi na putanji "Z:\SProizvodnja\Proizvodnja.xls" i kopira od A3 do F20, makro radi kada se zakuca tacno sheet ali kad hocu da uradim da koristi vrednost iz polja G2 javlja mi gresku iz debagera nemogu da zakljucim, a na netu nemogu da nadjem bas ovakav specifican primer :)
[ Jpeca @ 24.08.2018. 09:43 ] @
U tvom primeru ne vidim šta je u G2

1/ Otvori Proizvodnja.xls
2/ Otvori VBE - F11
3/Prikaži Immediate window ako nije prikazan -Ctrl+G
4/ U Immediate window unesi:
?Sheets(1).Range("G2")

Pretpostavljam da ti se u G2 nalazi datum koji si formatirao da prikaže samo dan. Ovako kako si naveo uzima se sadržaj ćelije G2, bez obzira na format. U tom slučaju možeš da koristiš formulu da izvojiš dan iz datuma ili Sheets(1).Range("G2").Text da se uzme formatiran ispis iz ćelije.

[ bokinet @ 24.08.2018. 10:23 ] @
Evo primera.

Preuzeti sva tri Excel file-a i staviti u isti direktorijum (folder).

Pokrenuti work4me.xlsm u okviru koga se nalazi dole navedeni kod.

Sta radi dole navedeni VBA kod:

1. Ucitava xlsx file-ove ('otpad' i 'proizvodnja') i setuje promenljive za iste otvorene file-ove;

2. Odredjuje dan u mesecu na osnovu vrednosti iz 'otpad' file-a;

3. Kopira iz file-a 'proizvodnja' odgovarajucu tabelu u 'otpad' file na osnovu dana;

Napomene:
Trenutno se kopira na mesto ispod od polja A20 ali kao sto je vec navedeno u kodu to se lako moze prebaciti na A3 i vec je ubacena ali isklucena ta linija koda.




Code:

' Open Excel file and return value as Workbook
Private Function ExcelOpenFile(ByVal Filename As String) As Excel.Workbook

    On Error Resume Next
    
    ' Try to open file and return value as Workbook
    Set ExcelOpenFile = Excel.Workbooks.Open(Filename)
    
    ' If there was any error then
    If Err.Number <> 0 Then
    
        ' Show message
        MsgBox "Doslo je do greske prilikom ucitavanja file-a." & vbCrLf & "Lokacija: " & Filename & vbCrLf & vbCrLf & "Error: " & Err.Number & " - " & Err.Description, vbCritical
    
        Err.Clear
        
        ' Return nothing then
        Set ExcelOpenFile = Nothing
    
    End If

End Function

' Handle work load
Public Sub DoWork()

    Dim sCurrentPath As String
    Dim sOtpadFilename As String
    Dim sProizvodnjaFilename As String
    Dim wrkOtpad As Excel.Workbook
    Dim wrkProizvodnja As Excel.Workbook
    Dim wsProizvodnja As Excel.Worksheet
    Dim iCurDay As Integer
    
    ' Get current path of activeworkbook where macro is
    sCurrentPath = ActiveWorkbook.Path
    If Right(sCurrentPath, 1) <> "\" Then sCurrentPath = sCurrentPath & "\"
    
    ' Excel file locations (this bellow files are set to be on same location where active file with macro is - can be changed and adapted)
    sOtpadFilename = sCurrentPath & "otpad.xlsx"
    sProizvodnjaFilename = sCurrentPath & "proizvodnja.xlsx"
    
    Debug.Print Now, "Current path:", sCurrentPath
    Debug.Print Now, "File 'otpad':", sOtpadFilename
    Debug.Print Now, "File 'proizvodnja':", sProizvodnjaFilename
    
    ' Load file Otpad
    Set wrkOtpad = ExcelOpenFile(sOtpadFilename)
    
    ' Load file Proizvodnja
    Set wrkProizvodnja = ExcelOpenFile(sProizvodnjaFilename)
    
    ' If wrkOtpad is not set then
    If wrkOtpad Is Nothing Then
        
        ' Show message
        MsgBox "Excel file za 'otapd' nije ucitan." & vbCrLf & "Dalji rad nije moguc.", vbCritical
        
        GoTo EndStep
        
        Exit Sub
        
    End If
    
    ' If wrkProizvodnja is not set then
    If wrkProizvodnja Is Nothing Then
        
        ' Show message
        MsgBox "Excel file za 'proizvodnja' nije ucitan." & vbCrLf & "Dalji rad nije moguc.", vbCritical
        
        GoTo EndStep
        
        Exit Sub
        
    End If
    
    On Error Resume Next
    
    ' Get current day using date
    iCurDay = CInt("" & Day(wrkOtpad.Worksheets("Sheet1").Cells(1, 6)))
    
    Debug.Print Now, "iCurDay:", iCurDay
    
    ' If there was any error or iCurDay is <1 or >31 then
    ' Validation and checking for iCurDay var can be changed - this is just a sample code
    If Err.Number <> 0 Or iCurDay < 1 Or iCurDay > 31 Then
        
        ' Show message
        MsgBox "Vrednost za datum nije definisana ili nije validna." & vbCrLf & "Dalji rad nije moguc.", vbCritical
        
        GoTo EndStep
        
        Exit Sub
        
    End If
    
    ' Get worksheet based on current day in 'proizvodnja' file
    Set wsProizvodnja = wrkProizvodnja.Sheets(iCurDay)
    
    If Err.Number <> 0 Then
    
        ' Show message
        MsgBox "Nema definisanog lista za zadatu vrednost." & vbCrLf & "Dalji rad nije moguc.", vbCritical
        
        GoTo EndStep
        
        Exit Sub
    
    End If
    
    ' Tuned off
    'wsProizvodnja.Range("A3:F20").Copy wrkOtpad.Sheets("Sheet1").Range("A3")
    
    ' Example to compare and see --- bellow line should be turned off
    wsProizvodnja.Range("A3:F20").Copy wrkOtpad.Sheets("Sheet1").Range("A20")
    
    MsgBox "All done" & vbCrLf & "Thanks for using this VBA macro." & vbCrLf & "Till next time, have a lot of fun." & vbCrLf & "Bye"
    
EndStep:

    ' Free memory resource
    Set wsProizvodnja = Nothing
    Set wrkProizvodnja = Nothing
    Set wrkOtpad = Nothing

End Sub

[ nenandi @ 24.08.2018. 12:47 ] @
Citat:
Jpeca:
U tvom primeru ne vidim šta je u G2

1/ Otvori Proizvodnja.xls
2/ Otvori VBE - F11
3/Prikaži Immediate window ako nije prikazan -Ctrl+G
4/ U Immediate window unesi:
?Sheets(1).Range("G2")

Pretpostavljam da ti se u G2 nalazi datum koji si formatirao da prikaže samo dan. Ovako kako si naveo uzima se sadržaj ćelije G2, bez obzira na format. U tom slučaju možeš da koristiš formulu da izvojiš dan iz datuma ili Sheets(1).Range("G2").Text da se uzme formatiran ispis iz ćelije.




Uneo sam u Immediate ali i dalje imam problem na ovoj liniji "Sheets(Sheets(1).Range("G2")).Activate".
Akciju pokrecem iz fajla "Otpad.xlsx" i celija G2 se nalazi u istom fajlu
G2 prikazuje samo dan od celije G1.
[ Jpeca @ 24.08.2018. 15:03 ] @
Pa šta si dobio u Immediate?

Immediate služi da možeš da ineteraktivno probaš i proveriš vrednosti/akcije. Možeš npr. da zadaš tu komandu koja ti pravi problem
Sheets(Sheets(1).Range("G2")).Activate
Ali tu očekujem da dobiješ grešku - npr "Supscript out of range"
[ bokinet @ 24.08.2018. 17:05 ] @
@nenandi - imate reseno gore sve sta vam treba vec krzo VBA kod u mom poslednjem postu ovde.

[ nenandi @ 24.08.2018. 22:19 ] @
Citat:
bokinet: @nenandi - imate reseno gore sve sta vam treba vec krzo VBA kod u mom poslednjem postu ovde.

Boki to je to ali postoji li nacin na primeru koji sam dao da se uradi i putanje da ostanu kako jesu. U folderu "SProizvodnja" ne mogu da ostavljam fajlove po RM proceduri.

Citat:
Jpeca: Pa šta si dobio u Immediate?

Immediate služi da možeš da ineteraktivno probaš i proveriš vrednosti/akcije. Možeš npr. da zadaš tu komandu koja ti pravi problem
Sheets(Sheets(1).Range("G2")).Activate
Ali tu očekujem da dobiješ grešku - npr "Supscript out of range"

Provericu i napisacu ti sta tacno pise ali mislim da je bilo nesto genericki zato i nisam obratio paznju kad je ispisalo error.

[ bokinet @ 24.08.2018. 23:32 ] @
Ako su putanje sto se tice file-ova pa kao sto sam vec naveo to sam definises kako hoces.

U kodu koji sam dao je samo primer i to moze da se menja kako je volja.

Ako su neke druge stvari, molim da mi pojasnis posto nisam razumeo sta se hoce iz tvog pisanja.

Nadam se da mi ne zameras na ovome.

Opet, dobro definisan zahtev sta se hoce i sta treba da se radi ili uradi je vec 50% posla.

Na kraju ove poruke, jos jednom napisi idejno sta treba i kako treba.

Primer izmena je u nastavku gde se podrazumeva da su oba file-a u istom direktorijumu (folderu):

Trenutno u primeru koda koji sam prilozio u prethodnom post-u:

Code:


' Get current path of activeworkbook where macro is
sCurrentPath = ActiveWorkbook.Path



Promeniti u:

Code:


' Get current path of activeworkbook where macro is
sCurrentPath = "Z:\SProizvodnja\"



U slucaju da nisu onda uneti fiksne vrednosti u promenljivama za obe lokacije file-a.

Code:

sOtpadFilename = "--- ovde uneti kompletnu putanju do file-a 'otpad' ---"
sProizvodnjaFilename = "--- ovde uneti kompletnu putanju do file-a 'proizvodnja' ---"


[ nenandi @ 25.08.2018. 00:47 ] @
Citat:
bokinet

Nadam se da mi ne zameras na ovome.



Ma opusteno ne zameram cenim tvoje vreme i trud, sve je OK ovo ce nekom nekad sigurno koristiti.
Pocetni zahtev je bio skroz drugaciji i zahtevniji tako da sam se odlucio na ovu jednostavniju varijantu.
Pitanje je kao da u postojeci kod u fajlu Otpad.xlsx koji radi kada mu zakucam koji sheet.
Sad zelim da smanjim korake i da na osnovu datuma iz celije otvori fajl Proizvodnja.xls aktivira sheet po datumi iz polja G2 kopira sadrzaj A2:F20 i nalepi u Otpad.xlsx u sheet pomocna tabela.

Code:

Workbooks.Open Filename:= _
"Z:\SProizvodnja\Proizvodnja.xls"
Sheets(Sheets(1).Range("G2")).Activate
Range("A3:F20").Select
Selection.Copy
Windows("Otpad.xlsx").Activate
Worksheets("Pomocne tabele").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

ActiveWorkbook.Save
Worksheets("Otpad").Activate
[ bokinet @ 25.08.2018. 02:03 ] @
Pa mislim da ovo sto si napisao je ustvari vec odradjeno s' moje strane i da je princip rada taj kako si hteo.

Oko optmizacije imaj na umu da je to to i da na pogresnim stvarima vrsis optimizaciju :)

Jedino sto po tvom poslednjem pisanju i kodu koji si dao vidim da fale 'pomocne tabele'

Takodje po sustini napisanog koda sa tvoje strane, kaze da iz 'proizvodnje' sa 'sheet1' se uzima "A3:F20" i da se to posle kopira u 'pomocne tabele' od polja A1 i na kraju se isti snima i onda aktivira 'otpad'

Mislim da opet u celoj prici ti je losa koncepcija i da samom sebi pravis konfuziju jer nisi lepo definisao i obradio sta treba da se napravi kao kompletna stvar vec si se mozda malo vise fokusirao na VBA i neke stvari koje idu/su na kraju...

[ Ivek33 @ 25.08.2018. 08:24 ] @
Citat:
Sad zelim da smanjim korake i da na osnovu datuma iz celije otvori fajl Proizvodnja.xls aktivira sheet po datumi iz polja G2 kopira sadrzaj A2:F20 i nalepi u Otpad.xlsx u sheet pomocna tabela.
Slažem se sa @bokinet. I ja mislim da si "kompliciraš život". Ja još ne mogu skužiti cijelu suštinu organizacije. Spominjao si 'Share Folder' pa sam iz toga zaključio da možda više ljudi koristi isti file. Imaš određena ograničenja koja nisi do kraja pojasnio. Postavljaš kod ali ne i primjer datoteke. Koliko se sjećam sa početka i raspon podataka ćelija više nije isti. No ipak evo još jedna ideja za rješenje tvog problema.

U ovom prikačenom primjeru imaš situaciju

1. Otvoriš Otpad.xlsm
2. Pokreneš VBA
3. Na Sheet1 imaš rezultate za određeni datum.

VBA kod je jednostavan i u jednom koraku kopira sve sheets u datoteku Otpad.xlsm
Formule koje se već nalaze na Sheet1 automatski vrše izračun.

Tu još možda treba ponešto doraditi a sve zavisi o količini podataka i možda malo dotjerati/ubrzati VBA kod.

Code:
Option Explicit

Sub Importsheet()
Dim Importsheet As Worksheet
'postavi ispravan path gdje se nalazi izvorna wbk
    Sheets.Add Type:="Z:\SProizvodnja\Proizvodnja.xls" 'importiraj sve sheets iz zatvotrene wbk u otvorenu ovu wbk
        Sheets("Sheet1").Select 'selektiraj sheet da bude aktivan
            ActiveSheet.Move Before:=ActiveWorkbook.Sheets(1) 'premjesti sheet na početak
End Sub
[ nenandi @ 25.08.2018. 09:40 ] @
Citat:
Ivek33: Slažem se sa @bokinet. I ja mislim da si "kompliciraš život". Ja još ne mogu skužiti cijelu suštinu organizacije. Spominjao si 'Share Folder' pa sam iz toga zaključio da možda više ljudi koristi isti file. Imaš određena ograničenja koja nisi do kraja pojasnio. Postavljaš kod ali ne i primjer datoteke. Koliko se sjećam sa početka i raspon podataka ćelija više nije isti. No ipak evo još jedna ideja za rješenje tvog problema.


Sve te primere sam isprobao i treba mi jednostavnije resenje, normalno fajl koriste vise ljudi i da ne zelim da ga editujem fajl ili dodajem dodatne fajlove u foldere zbog polise cuvanje dokumentacije.
Kod koji sam vam dao radi je posao ali sam uvek morao da navedem koji dan = sheet da koristi za kopiranje, sad to zelim da parametarizujem vrednoscu iz celije G2.

[ bokinet @ 25.08.2018. 19:40 ] @
Definisi sta je jednostavnije resenje?

Kako zelis da navedes dan?

Da imas masku za unos ili da se na osnovu recimo sistemskog datuma se uzima taj dan?

... sve zavisi od tebe i sta hoces te tako mora da definises sta se pravi?

Elem, uzmi procitaj sve tvoje postove na ovu temu pa vidi i sam sta ti pricam i ja i ostali.



[ nenandi @ 26.08.2018. 10:16 ] @
Boki u prvom dokumentu je definisano vreme u celiji G1 "=now()" pa formulom se prikazuje dan u polje G2 ako je danas 26-08-2018 11:15 u G2 stoji samo 26 i to je broj sheet-a u Proizvodnja.xls
[ bokinet @ 26.08.2018. 14:04 ] @

Citat:

Kod koji sam vam dao radi je posao ali sam uvek morao da navedem koji dan = sheet da koristi za kopiranje, sad to zelim da parametarizujem vrednoscu iz celije G2.


Citat:

Boki u prvom dokumentu je definisano vreme u celiji G1 "=now()" pa formulom se prikazuje dan u polje G2 ako je danas 26-08-2018 11:15 u G2 stoji samo 26 i to je broj sheet-a u Proizvodnja.xls



Pa dobro to znamo :) sta sad s' tim ?

Na celu pricu oko svega sta je na kraju problem i sta je sustina opet nema konkretnih stvari vezano za sta se i kako se hoce?


U kodu koji je dat sa moje strane ti vec imas iCurDay promenljivu koja predstavlja dan od (nekog) datuma a u datom slucaju se uzima vrednost iz celije(1,6).

Code:


    ' Get current day using date
    iCurDay = CInt("" & Day(wrkOtpad.Worksheets("Sheet1").Cells(1, 6)))



druga varijanta kod moze da bude i da se stavi Now i da se uzima datum i vreme sa racunara (kao sto si ti vec stavio u celiji) pa da se na osnovu te vrednosti uzima dan.

Code:


    ' Get current day using date
    iCurDay = CInt("" & Day(now))



trece varijanta je da pita korisnika sa kojim datumom zeli da radi pa da onda na osnovu unete vrednosti preko neke maske se ta vrednost dodeli....

Code:


    ' Get current day using date --- ovo je primer ali bi trebalo da se pre uzimanja dana odradi i validacija ispravnosti unosa
    iCurDay = CInt("" & day(inputbox("Unesite datum za koji radite?","Vrednost",date)))



Dakle sustina 'parametarizacije' kako si to to nazvao je pitanje sta znaci posto se iz tvojih odgovora/pitanja/pisanja tacno ne plus vidi smisao 'parametarizacije' i 'jednostavnosti' ? Mnogo toga ima nejasnog i konfuznog sa tvoje strane.

Sorry mate.

[ nenandi @ 26.08.2018. 19:46 ] @
Citat:
bokinet: Pa dobro to znamo :) sta sad s' tim ?


Ne znam zasto to ignorises ali to mi treba da formulisem izraz koji ce koristiti vrednost iz celije za broj lista.
Sve vezano za datum su Jpeca i Ivek naveli u prva tri posta.
Da ne idemo u off navedi konkretno sta ne razumes ili nije ti jasno.
[ Ivek33 @ 26.08.2018. 19:53 ] @
Citat:
nenandi:
Boki u prvom dokumentu je definisano vreme u celiji G1 "=now()" pa formulom se prikazuje dan u polje G2 ako je danas 26-08-2018 11:15 u G2 stoji samo 26 i to je broj sheet-a u Proizvodnja.xls
Evo ti primjer gdje VBA macro kopira samo jedan specifični sheet koji je postavljen kao uvjet.

1. Postavi file Proizvodnja.xlsx na ispravnu putanju (tj. izmjeni Path u VBA - pazi na format datoteke *.xlsx ili *.xls)
2. Otvori OTPAD.xlsm file u prilogu ove poruke
3. Pokreni VBA
4. VBA kopira sheet za postavljeni dan ako imaš formulu u G2 (opcija 1)
4a. VBA kopira sheet za postavljeni dan iz G1 (opcija 2 by @bokinet)
5. Na sheet1 imaš rezultate pretraživanja (po potrebi izmjeni range u Array formulama)

Dakle imaš dvoije opcije kao uvjet (4 i 4a)

Ako ovo ne pomogne ja odustajem, Sorry
[ bokinet @ 26.08.2018. 20:01 ] @
Mora da sam ustao danas bunovan ili je od ovog vremena ali ja tek sad nista ne razumem...

Ja sam ti vec poslao celu pricu koja to radi kroz VBA kod (koji treba samo da prilagodis) po prici kako si napisao.
Takodje i ostali su dali svoj doprinos na svoj nacin isto na osnovu tvoje price.

Inace, ti kroz recimo Excel Add-in mozes da sakriejs kod i da ne bude sastavni deo ovih dokumenata ali isti moras da stavis da se ucitava na svakoj radnoj stanici kako bi taj kod bio ucitan u Excelu kada korisnik pocen da koristi isti.

Za dan sam ti vec napisao primere te opet ne razumem sta ti nije jasno.

U poslednjem je takodje isto bilo kako tu vrednost mozes da dodelis i opet tu tebi nesto ne stima ali nikako da kazes konkretno tako tako...

Na kraju balade pitanje opet da li si uopste pogledao work4me.xlsm koji sam poslao zajedno sa tvoja dva file u jednom od prethodnih mojih odgovora?

Sticem utisak da nisi posto opet se vrtimo u krug.

A ako jesi sta tu fali i sta nije kako treba?