Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel VBA pomoc se vzorcem

Dobrý den, mám vzorec VBA a potřebuji, aby se to samo aktualizovala.
Vyhledává obrázek když do buňky F5 pomocí svyhledat se vyhledá číslo např.: 002 tak to vyhledá obrázek
ale neaktualizuje se to samo. Můžete mi, prosím pomoci, aby to aktualizovalo samo.

Děkuji

Vzorec je:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$F$5" Then
    Dim N As String
    Const Cesta = "F:\002. Fotky Osobností\"
    N = Cells(5, 6)
    If N <> "" Then
      N = Cesta & N
      Select Case True
        Case Len(Dir(N & ".png")) > 0: Call ZmenObrazok(N & ".png")
        Case Len(Dir(N & ".jpg")) > 0: Call ZmenObrazok(N & ".jpg")
        Case Len(Dir(N & ".gif")) > 0: Call ZmenObrazok(N & ".gif")
        Case Len(Dir(N & ".bmp")) > 0: Call ZmenObrazok(N & ".bmp")
      End Select
    Else
      Shapes("imgHDD").Fill.Solid
    End If
  End If
End Sub

Private Sub ZmenObrazok(S As String)
  Shapes("imgHDD").Fill.UserPicture (S)
Předmět Autor Datum
ak vysvetlíš každý riadok svojho vzorca, popíšeš hodnoty premenných a riadok v ktorom to padne, tak…
čitateľ 20.09.2016 09:56
čitateľ
Etkine, nabudúce si uvedom, že zdieľanie takých údajov, čo si vycapil, je trestné! Veď preboha vytvo…
robert13 20.09.2016 11:59
robert13
Není nutné ten kód pouštět. On neumí používat google, protože by se přes správná klíčová slova dosta…
TNT 20.09.2016 12:24
TNT
myslím, že nesprávne formuluje požiadavku... prílohu ani nemusí dávať, dá sa pochopiť, čo chce. Ak…
robert13 20.09.2016 12:54
robert13
To byli vymyšlené data. Zde je nový soubor upravený. Nevím jak to automaticky aktualizovat. Děkuji
Etkin 20.09.2016 12:53
Etkin
hledej nějakou metodu .refresh. Nemám tu žádný novější excel, takže ti přesně neporadím. zkus toto:…
touchwood 20.09.2016 13:32
touchwood
Aha, takže dle popisu přímo v XLS Ti nefunguje aktualizace, pokud se změní obsah buňky F5, v které j…
Machr55 20.09.2016 13:53
Machr55
Můžete mi to prosím napsat ten vzorec nijak mi to nejde. Děkuji
Etkin 20.09.2016 14:03
Etkin
Jakej vzorec zase? Žádnej vzorec, událost. Postupuj dle obrázku.
Machr55 20.09.2016 14:35
Machr55
Udělal jsem to podle návodu a nefunguje to.
Etkin 20.09.2016 14:55
Etkin
Nefunguje co? Kde? Jak se to projevuje? Nějaká chyba? Člověče, chceš pomoct a prozradíš toho ještě m…
Machr55 20.09.2016 15:06
Machr55
Worsheets_Change je OK a funguje, celá procedúra prebehne ako má, akurát pri volaní procedúry ZmenOb…
robert13 20.09.2016 15:08
robert13
Dovolím si nesouhlasit: pokud se hodnota buňky změní vlivem vzorce, který je v té buňce, událost Wor…
Machr55 20.09.2016 15:19
Machr55
Nejde to. Můžete prosím poslat vzor. Moc děkuji
Etkin 20.09.2016 15:51
Etkin
Prosím: http://www.uschovna.cz/zasilka/KWKAIPLJT2ZIUM8P-AY R/ Měním buňky A2 a A3, v buňce C2 mám v…
Machr55 20.09.2016 16:12
Machr55
Ok, nehadam sa a verim, nakoniec je to logicke, osobne som neskusal. Ako pisem, simuloval som to vo…
robert13 20.09.2016 16:37
robert13
I tak mě to nejde podle vzoru obrázek to nepřepíše.
Etkin 20.09.2016 17:30
Etkin
Stavaj na tomto: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$5" The…
robert13 21.09.2016 08:12
robert13
Děkuji, už jsem to vyřešil. =OBR_Z_VYHLEDANI a funguje to. Díky za radu.
Etkin 21.09.2016 09:53
Etkin
Děkuji, už jsem to vyřešil. =OBR_Z_VYHLEDANI a funguje to. Díky za radu. Jen tak pro pořádek: inde…
Siki83 21.09.2016 21:11
Siki83
Aj sa mi to zdalo nejake pokrocile... ;-)
robert13 22.09.2016 06:26
robert13
Siki, takže časopriestorový skokan Eilsa to už vyriešil... :-) nuž... proste hľadal, kde sa dá... Al…
robert13 22.09.2016 09:03
robert13
nuž... proste hľadal, kde sa dá... Můj příspěvek možná vyzněl jinak než byl zamýšlen. Ale jó, já mu…
Siki83 22.09.2016 21:32
Siki83
naviac žiadny OBR_Z_VYHLEDANI v tejto poradni nikde vo svojom vzore nemal, nenašiel som ho nikde...… poslední
robert13 22.09.2016 21:36
robert13

Není nutné ten kód pouštět. On neumí používat google, protože by se přes správná klíčová slova dostal k nějakému řešení. Ale abych si sám nasypal popel na hlavu, tohle forum použiju pro dotaz s výhledem získat rychlou odpověď-řešení.......... např. zapracovat do makra "application.ontime" http://www.snb-vba.eu/VBA_Application.OnTime_en.ht ml nebo http://stackoverflow.com/questions/15337008/excel- vba-run-macro-automatically-whenever-a-cell-is-cha nged atd. atd.

myslím, že nesprávne formuluje požiadavku...
prílohu ani nemusí dávať, dá sa pochopiť, čo chce.

Ak prepíše F5, má mu to rámik vyplniť obrázkom.
Zdá sa že to funguje až na samotný príkaz naplnenia, t.j. má nefunkčnú procedúru ZmenObrazok
Ale priznám sa, že nateraz neviem, v čom je ten fígel, aký má správny tvar zápis pre naplnenie...

On tou aktualizáciou nazýva naplnenie...

Nefunguje co? Kde? Jak se to projevuje? Nějaká chyba?
Člověče, chceš pomoct a prozradíš toho ještě míň, než partyzán při výslechu!

Tip: nenechal jsi v tom kódu podmínku

If Target.Address = "$F$5" Then

?

Mimochodem - deklarace proměnné až za podmínkou je teda pěkná prasečina...

A ještě pozor - jak jsem se ještě kouknul, událost Worksheet_Calculate nedokáže rozeznat, jaká buňka se změnila! Musíš si tedy nějak sám ošéfovat, že se změnila právě ta buňka, kterou chceš hlídat...

Worsheets_Change je OK a funguje, celá procedúra prebehne ako má, akurát pri volaní procedúry ZmenObrazok sa objekt imgHDD nenaplní.
To je celé, v čom je problém, len to kostrbato vysvetľuje...
Tiež som skúšal metódy EnableEvents a Calculate ale bez účinku.

(samozrejme, chýba mu tam na konci End Sub)
Nebol by problém to zobraziť v užívateľskom formulári, ktorý by mal vložený objekt Picture (aspoň myslím - neskúšal som), ale pokiaľ to používa v hárku ako prvok ActiveX tak mi to nechce ísť...

Je pravda že v F5 má vzorec ale procedúra preberie hodnotu...
Ja som si to simuloval s jednoduchou hodnotou a vlastným zdrojom obrázkov a ani tak to obrázok neprepíše...

Prosím: http://www.uschovna.cz/zasilka/KWKAIPLJT2ZIUM8P-AY R/
Měním buňky A2 a A3, v buňce C2 mám vzorec "=A2&A3", buňku D2 používám jako odkládací pro testování změny v události Calculate.
Makra tam jsou jednoduchá:

Private Sub Worksheet_Calculate()
  Application.EnableEvents = False
  If Cells(2, 3).Value <> Cells(2, 4).Value Then
    MsgBox "Worksheet_Calculate"
    Cells(2, 4).Value = Cells(2, 3).Value
  End If
  Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Address = "$C$2" Then
    MsgBox "Worksheet_Change"
  End If
  Application.EnableEvents = True
End Sub

Pokud změním některou z buněk A2, A3, vyvolá se událost Calculate. Ta nejprve zkontroluje, jestli se výsledek vzorce v buňce C2 opravdu změnil a pokud ano, vypíše zprávu a do D2 uloží novou hodnotu.

Pokud se postavím na C2 a stisknu F2 a ENTER, vyvolám událost Change, která jen vypíše zprávu.

Ok, nehadam sa a verim, nakoniec je to logicke, osobne som neskusal. Ako pisem, simuloval som to vo vlastnom experimentacnom zosite a nepouzil som vzorec, prepisoval som priamo F5. Takto to fungovalo na Change ale neprepisoval sa obrazok... Hladal som riesenie len tejto stranky problemu, t.j. prepis obrazka. To, ak som z diskusie pochopil (nie som na pc), este nejde... ci?

Stavaj na tomto:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$F$5" Then
    Dim N As String
    Const Cesta = "F:\002. Fotky Osobností\"
    N = Cells(5, 6)
    If N <> "" Then
      N = Cesta & N
      Select Case True
        Case Len(Dir(N & ".png")) > 0: Call ZmenObrazok(N & ".png")
        Case Len(Dir(N & ".jpg")) > 0: Call ZmenObrazok(N & ".jpg")
        Case Len(Dir(N & ".gif")) > 0: Call ZmenObrazok(N & ".gif")
        Case Len(Dir(N & ".bmp")) > 0: Call ZmenObrazok(N & ".bmp")
      End Select
    Else
'      Shapes("imgHDD").Fill.Solid
    ActiveSheet.DrawingObjects.Delete
    End If
  End If
End Sub

Private Sub ZmenObrazok(S As String)
'  Shapes("imgHDD").Fill.UserPicture (S)
    On Error Resume Next
    Range("A1").Select
    ActiveSheet.DrawingObjects.Delete
    ActiveSheet.Pictures.Insert(S).Select
    Range("F5").Select
End Sub

Neoživil som to na udalosť Calculate, tak som to poriešil na WorkSheet_Change.
Hľadal som riešenie na aktualizáciu obrázka podľa obsahu bunky F5
Vyskúšaj si to, ale s tým, že musíš priamo prepisovať F5. "Aktualizácia", t.j. prepísanie obrázka, bude fungovať.
Potom treba poriešiť to, že bunka F5 obsahuje vzorec a teda, ako píše Machr555, procedúra sa nespustí.
Dá sa to ale obísť tak, že nájdeš vhodný spúšťač (ako vidím, vytváral si formulár, neskúmal som ho ale hneď ma napadá možnosť spúšťania zmenou vhodného prvku na formulári).

Tento spôsob Ti naplní obrázok do aktuálnej bunky, teda aký veľký bude obrázok, s takou veľkosťou sa načíta... Pokiaľ sú obrázky rôznych rozmerov, musíš si to poriešiť prispôsobujúcimi výpočtami.

P.S. pokiaľ je východzí stav bez obrázka, bude potrebné doplniť i do prvej procedúry príkaz On Error Resume Next (ak však môže nastať chyba i z iného dôvodu, musíš príkaz On Error ošetriť inak)

Siki,
takže časopriestorový skokan Eilsa to už vyriešil... :-)
nuž... proste hľadal, kde sa dá... Ale tie vysvetlenia požiadaviek, či už tu alebo tam, sú neskutočne zmätočné... Terminológia a chápanie mimo...

Bolo zrejmé, že je to sotva jeho výtvor, s takými formuláciami požiadaviek ťažko čosi takého mohol vytvoriť, ale ok... Lenže takýmto prístupom bude večne odkázaný na zlepence čiastkových riešení z rôznych strán...

Etkin, to je pre Teba.
(ak si sa už vrátil pozrieť i sem z Wall...)
Ak sa tomu ozaj chceš venovať, začni štúdiom základov Office, aby si vedel vôbec pomenovať prvky a nástroje týchto programov. Potom by bolo fajn trocha viac sa oboznámiť s funkciami Excelu a potom, ako ďalší krok, sú základy VBA. Až potom môžeš chcieť ako-tak rozumieť makrám.

Alebo Ti nevadí sa zas a znova, bez pokroku, pýtať amatérske dotazy bez toho, aby si vlastne vedel vysvetliť, o čo Ti ide? (trebárs ako má Eilsa vysvetliť, že akú ikonu chce kam vlastne vložiť)? Ak sa tomu chceš venovať, tak musíš zmeniť prístup. Inak je to k ničomu...

nuž... proste hľadal, kde sa dá...

Můj příspěvek možná vyzněl jinak než byl zamýšlen.
Ale jó, já mu to neberu. Sám mám na různých fórech jiný nick. Kdyby napsal

už jsem to vyřešil.

tak si toho ani nevšimnu, ale tohle

=OBR_Z_VYHLEDANI a funguje to.

mě prostě praštilo do očí, tak sem kouknul "vedle". Kdyby alespoň vlepil celý kód nebo napsal, už sem to vyřešil jinde a dal odkaz.
Trefil by mě šlak, když něco hledám na fórech kde je ve vlákně spousta návrhů a nakonec se dozvím jen suché konstatování VYŘEŠENO :-/

Prostě sem vlepil odkaz i pro další, kteří se ve vlákně nějakým způsobem angažovali.

Zpět do poradny Odpovědět na původní otázku Nahoru