xlnc napsal/a:
...(teď se někdo jistě kousne a dá sem řešení :-)...
No a na niekoľko viet v bunke je už potreba UDF.
Napr takouto UDF, ale treba ju ešte doošetriť napr. na to, aby preskočila bunku,ktorá je zároveň parameter.
Function HLADAJ_BUNKU(Co As Variant, Optional Typ As Byte = 1) As Variant
Dim Bunka As Range, WS As Worksheet, CX As Long, CY As Long
On Error GoTo KONIEC:
With ActiveWorkbook
With Worksheets(1)
CY = .Rows.Count: CX = .Columns.Count
End With
For Each WS In .Worksheets 'Prehľadá všetky listy
With WS
Set Bunka = .Cells.Find(What:=Co, After:=.Cells(CY, CX), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End With
If Not Bunka Is Nothing Then Exit For
Next WS
End With
If Not Bunka Is Nothing Then
Select Case Typ
Case 1: Set HLADAJ_BUNKU = Bunka 'Odkaz na bunku
Case 2: HLADAJ_BUNKU = Bunka.Address 'Adresa bunky
Case 3: HLADAJ_BUNKU = Bunka.Parent.Name 'List bunky
Case 4: HLADAJ_BUNKU = Bunka.Worksheet.Parent.Name 'Zošit bunky
Case 5: HLADAJ_BUNKU = Bunka.Address(External:=True) 'Celá cesta
Case 6: HLADAJ_BUNKU = Bunka.Row 'Súradnica Y - riadok
Case 7: HLADAJ_BUNKU = Bunka.Column 'Súradnica X - stĺpec
End Select
Else
HLADAJ_BUNKU = CVErr(xlErrNA) 'nenájdené
End If
KONIEC:
If Err.Number <> 0 Then HLADAJ_BUNKU = CVErr(xlErrValue) 'iná chyba
Set WS = Nothing: Set Bunka = Nothing
End Function
Myslím, že tak ako navrhujete, to bude asi najschodnejšie.
Neviem, ako toto pomôže. Skúste to rozvinúť. Neviem ako získať z práve zmenenej bunky naformátovanej ako čas (teda číslo) informáciu o tom, či bolo zadané:
• 8,25 - číslo s desatinnou čiarkou, ktorá má byť premenená na ":"
• 8:25 - čas vo formáte "h:mm", čo je tiež desatinné číslo
• 0,350694444444444 -prípadne ešte (to ale nepredpokladám) desatinné číslo, ako skutočné číslo času, reprezentujúce čas "8:25"
Najskôr ste zmienil oblasť dát
...vyhledat v oblasti C1:E357...
...to co chci hledat se může nacházet kdekoliv (v daném sešitě)...
...SOUČIN.SKALÁRNÍ((B1:Z2000=A1)*ŘÁDEK(B1:Z2000))...
...odkaz zapsat do buňky A2...
...abych dokázal určit umístění (souřadnice)...
...odkaz(souřadnice) hledané buňky...
... i bez přiloženého excelu (který by pouze směřoval ke konkretizaci výsledného vzorce)...
Předtím jsem neuvedl, nevím jak moc je to podstatné, že se hodnota bude v oblasti dat vyskytovat právě jednou.
"elninoslov" napsal/a:
Vy viete čo chcete, ale neviete to dať na papier.
My vieme čo ste dal na papier, ale nevieme čo chcete.
Function UDF_DATUM_SUBORU(Subor As String) As Date
Application.Volatile
UDF_DATUM_SUBORU = FileDateTime(Subor)
End Function
alebo
Function UDF_DATUM_SUBORU2(Subor As String) As Date
Application.Volatile
UDF_DATUM_SUBORU2 = CreateObject("Scripting.FileSystemObject").GetFile(Subor).DateLastModified
End Function
A do bunky si dajte obdobný vzorec, kde E1 je cesta a E12 je súbor:
=UDF_DATUM_SUBORU(E1&E12)
A čo Vám bráni odpovedať na to, na čo sa pýtam ?
Kde je teda reálna príloha ?
Ten vzorec, čo som dal, nieje jednoduchý, a preto, aby sa dal ľahšie čítať sa používa Definovaný názov, ale kľudne si to môžete spojiť do jediného supervzorca, to je na Vás. Rovnako ako reakcie...
Aby ste vedel, ako sa dá vnímať rôznymi spôsobmi to, čo popisujete, tak mrknite na prílohu, čo všetko človek môže z popisu-nepopisu vydedukovať.
Šmarjá ... to je zas iný popis ako na začiatku, a príloha, čo so začiatkom nekorešponduje, a navyše nepriekazná (chýbajú tie "iné stĺpce" čo spomínate).
V buňce A1 bude hodnota(text, číslo)
Hmm, no ono "nahradiť" tú čiarku dvojbodkou tak, aby vznikol správny zamýšľaný čas nieje problém, rozdelením desatinnej a nedesatinnej časti a použitím TimeSerial(). Ale vidím tam problém, čo ak niekto zadá čas v korektnom formáte 8:25 (nie 8,25)? Vy nájdete v procedúre Worksheet_Change desatinné číslo, ktoré už zodpovedá desatinnému číslu skutočného času, ale to neviete, lebo pre makro to bude zase iba číslo, ktoré treba zmeniť na "správnu" formu čísla času - teda ten čas pokaká. Zatiaľ ma nenapadá možnosť, ako zistiť či bolo zapísané desatinné číslo 8,25, alebo čas 8:25, lebo v oboch prípadoch dostanete až výsledok = desatinné číslo.
Ak ten oddeľovací znak bude iný ako čiarka, tak sa to bude dať identifikovať a spracovať. Ale zase nesmie to byť bodka na EN Office, lebo tá je desatinným oddeľovačom na EN.
No tak to Vám potom z toho všetkého stačí len tá jednoduchá funkcia UDF:
Function UDF_OBSAH_SUBORU(Cesta As String, Subor As String) As String
Dim F As Integer
Application.Volatile
F = FreeFile
Open Cesta & Subor For Input As #F
UDF_OBSAH_SUBORU = Replace(Input(LOF(F), F), vbCrLf, vbNullString)
Close #F
End Function
Iný príklad...
No a ktorá predstava bola tá správna ???
Zoznam súborov a obsahov v liste?
Výberový zoznam a následný VLOOKUP?
Výberový zoznam a následná UDF na obsah?
ListBox v liste naplnený definovanou oblasťou?
ListBox so súbormi vo formulári, a po kliku načíta do TextBoxu obsah súboru?
ListBox s obsahmi vo formulári?
...
Ani ste si nevšimol, že je tam viacero príkladov použitia?
S tým sa dá v makre dobre vyblbnúť
PS: Nieje to ošetrené ešte na chyby, napr. neexistencia súboru a pod. Možno neskôr po upresnení, či sa niečo z toho bude hodiť. Pretože, ako vždy, nechápem čo fortes chce
Worksheet_Change je procedúra vyvolaná pri zmene hodnoty nejakej bunky. Či už v jednom liste, alebo aj v celom zošite. Makro máte vložené v procedúre Worksheet_Change listu "1", ale máte tam aj "pokus nakopírovania" tohto makra v globálnej procedúre Worksheet_Change celého zošitu. Tam je to samozrejme nefunkčné, lebo globálna má o 1 parameter, ktorý určuje práve menený list, naviac.
Celé to píšem preto, že z Vášho popisu nieje zrejmé, ako to má fungovať.
Na prvom liste má byť zoznam mien listov A1:A6 ?
Kontrola zmeny bunky sa má diať práve a len na prvom liste, a podľa týchto hodnôt v A1:A6 sa premenujú listy ?
Bude vždy presne 6 listov ?
Alebo kontrola zmeny nejakej bunky má prebiehať v celom zošite, na každom liste ?
Ak áno, tak na každom liste sa kontroluje bunka s rovnakou adresou, napr. A1 ?
Ak áno, prečo pole adries obsahuje raz stĺpec A a inokedy stĺpec TA ?
Ak nie vždy rovnaká bunka, aký je kľúč na určenie adresy kontrolovanej bunky v každom liste ?
...
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.