automatické vkládání fotografií do doc dokumentu   zodpovězená otázka

VB6/VBA

Provádím evidenci vybavení několika objektů, s tím, že mám v excelovské tabulce seznamy jednotlivých věcí, kde ke každé věci mám vedle ostatních informacích navíc v jednom poli název fotografie včetně celé cesty k fotografii na disku.

Z této databáze potřebuji vytvořit karty, pro každou věc jednu kartu.

Prostřednictvím hromadné evidence umím libovolně rozložit texty (včetně názvu fotografie), ale fotografii do Wordu natáhnout neumím. Zkoušel jsem to makrem, které by na jediný povel vyhledalo název fotky, zkopírovalo cestu k ní a vložilo tento obrázek na správné místo, ale makro má po jeho nahrání v kódu Visual Basicu napevno adresu první vkládané fotky.

Bylo by možné pozměnit kód tak, aby na místě názvu souboru obrázku nebyla pevná adresa, ale proměnná, jejíž hodnota by se čerpala z určitého místa doc souboru, s nímž se pracuje?

Děkuji za případnou pomoc či radu

Roman Zima


Sub vf()
'
' vf Makro
' Makro zaznamenáno 15.8.2011, zaznamenal Roman Zima
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "jpg"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.HomeKey Unit:=wdLine
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Copy
    Selection.EndKey Unit:=wdLine
    Selection.TypeParagraph
    Selection.InlineShapes.AddPicture FileName:= _
        "E:\Fotky_nemazat\110524 - Hrad Krupka\P5240482.JPG", LinkToFile:=False, _
        SaveWithDocument:=True
    Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

"Bylo by možné pozměnit kód tak, aby na místě názvu souboru obrázku nebyla pevná adresa, ale proměnná, jejíž hodnota by se čerpala z určitého místa doc souboru, s nímž se pracuje?"

Bylo a přesně tak, jak uvažujete: adresu nahradíte proměnnou, která bude obsahovat adresu - např.

  Dim soub as String
  soub = "E:\Fotky_nemazat\110524 - Hrad Krupka\P5240482.JPG" ' nebo načíst z tabulky
  Selection.InlineShapes.AddPicture FileName:= soub, LinkToFile:=False, _
        SaveWithDocument:=True

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Píšete: "ale fotografii do Wordu natáhnout neumím" - možná by stálo zato najít správný postup či najít chybu v hromadné korespondenci.

Zkuste (pokud nemáte) v seznamu adres duplikovat zpětná lomítka a celé adresy uzavřít do uvozovek - nezbytné, v adresách jsou mezery!

"E:\\Fotky_nemazat\\110524 - Hrad Krupka\\P5240482.JPG"

Slučovací pole lze vytvoři více způsoby - pomocí průvodce, použitím voleb z nabídky anebo ručně. Pro výklad je nestručnější třetí možnost, tedy:

V dokumentu Wordu s připojeným zdrojem dat

- nastavte kurzor na zvolené místo

- stiskněte CTRL-F9 (vloží se prázdné pole)

- do pole napište: INCLUDEPICTURE a mezeru (kurzor nechte za mezerou)

- stiskněte CTRL-F9 (vloží se další - vnořené - prázdné pole)

- do nového pole napište: MERGEFIELD a za mezeru do uvozovek název zdrojového pole s adresami - např. "foto" - dostanete

{ INCLUDEPICTURE { MERGEFIELD "foto" } }

- přepněte zobrazení polí (ALT-F9) - zobrazí se chyba "Chyba! Není zadaný název souboru.", tu ignorujte

- slučte dokument

- ve sloučeném dokumentu vyberte vše (CTRL-A) a stisknete F9 - obrázky se načtou

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Dobrý den. To je skvělé! Funguje! Děkuji moc za perfektní návod. Ušetří spoustu práce.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, po roce.

Rada mi skutečně velmi pomohla. Mám ale ještě jednu otázku, která mi nyní vyvstala a na niž jsem nebyl schopen nikde najít odpověď:

Zda a případně jak je možné určit, jak má být obrázek, který do wordu natahuji, velký. A pokud je to možné, zda je to možné stanovit v absolutní hodnotě nebo určit procento zmenšení oproti tomu, jak by se obrázek natáhl bez určení parametrů.

Snažil jsem se to určit velikostí jpg souboru, ale na to Word reaguje podivně. Dřívější sadu snímků (z původního fotoaparátu) natáhl ve velikosti, kterou jsem si představoval, ale jinou sadu, z novějšího fotoaparátu, i když jsem ji upravil v programu na stejnou px velikost jako tu první, natahuje mnohem větší.

Existují nějaké parametry zadatelné k INCLUDEPICTURE? V jaké syntaxi? Nebo jiné řešení?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Slyšel jsem i četl vícekrát, že Word zachází s obrázky záhadně. Sám jsem však žádnou záhadu nikdy neobjevil (pouze ve Wordu 2002, žádný novější nemám). Nemám to nijak nastudované ani ověřené z odborných pramenů, tak nebudu rozsévat moudra, jen tipuji ze zkušenosti.

Fyzické délkové míry obrázku jsou dané rozlišením (dpi) zařízení (HW). Obrazovka má běžně 96 dpi, tiskárny stovky až tisíce dpi a rozlišení se dá nastavovat. Čím vyšší rozlišení, tím menší fyzický rozměr obrázku. A v tom právě vidím podobnost mezi HW a Wordem.

Samotný obrázek má jednoznačně daný počet pixelů na šířku a výšku a rozlišení vlastně nemá, to má až HW (a zná Word, ač SW). Jde tedy o nějaký jen zapsaný údaj, kterým se v podstatě obrázek nemění. Jestliže jste na problém narazil až s novým fotoaparátem, pak údaj zapisuje on. A možná úplně obráceně. Z nového údaj chybí a hodnotu si nastaví Word - pokud na 96 dpi, pak je obrázek na stránce velký.

Řešení vidím v nastavení fotoaparátu, pokud má, anebo v zápisu rozlišení do souboru v editoru, kterým obrázky měníte - pokud umí.

Tedy žádná konkrétní rada, možná malé nakopnutí či výzva pro někoho, kdo se vyzná a uměl by problém lépe vysvětlit a poradit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback