Výsledky 1 až 5 z 5

Téma: [VBA] - Otevření XLS listu z PPT prezentace

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1
    Senior Member Avatar uživatele D_a_v_i_d
    Založen
    08.12.2002
    Bydliště
    Praha
    Věk
    44
    Příspěvky
    5 153
    Vliv
    358

    Standardní [VBA] - Otevření XLS listu z PPT prezentace

    Zdravím, předem předesílám, že nevím, jestli "se to dá", ale zkusím to...

    Jde o následující - mám prezentaci v PPT a k ní bych potřeboval na určitém místě otevřít XLS tabulku (kterážto je dlooouhá takže se na slajd prostě nevejde). Potřeboval bych to udělat nejlépe klikem na prvek na slajdu (třeba tlačítko nebo formou kliku na slovo s URL odkazem).

    Jednoduchým svázáním URL s daným XLS souborem sice docílím jeho otevření, ale pouze "na pozadí", tedy zobrazen je pouze snímek...

    Potřeboval bych "nakopnout" nějakým správným směrem (VBA makro?), případně utvrdit v tom, že to nejde, pro dosažení následujícího:

    1) V prezentaci (v "prezentačním módu") kliknout na odkaz/ovl. prvek
    2) Otevřít soubor XLS s tabulkou
    3) NASTAVIT NA NĚJ FOCUS, aby se "zobrazil", protože takhle musím dát Esc a ručně na něj "překliknout"...

    P.S: Není to nijak kritický, v nejhorším to prostě udělám ručním otevřením nebo "překliknutím", ale jen mě zajímá, zda to jde... Když si safra můžu v Excelu pomocí VBA celkem nenáročně cucat data z jinejch tabulek, tak proč by nešla taková blbá banalita, jako otevřít soubor a nastavit na něj focus, ne?
    A Jedi gains power through understanding; a Sith gains understanding through power

    Destkop machine: Intel Core i5 2400/MSI P67A-C45 /2x4 GB DDR3 1333 MHz/Sapphire HD6790/22" LCD HP w2216/DSL 8MBit connected
    Na filmy v posteli: Lenovo IdeaPad S9e/1,6 GHz Intel Atom, 1 GB RAM, 80 GB HDD
    Na práci: Dell E5500/T9550 2,66 GHz Intel, 3 GB RAM, 120 GB HDD

  2. #2

    Standardní Re: [VBA] - Otevření XLS listu z PPT prezentace

    Tak jsem si s tím trošku hrál a fungoval mi pouze jeden způsob.
    Excelovský sešit jsem měl otevřený předem.

    V slidu jsem měl tlačítko a k němu takovýto kód
    Kód:
    Option Explicit
    Option Base 0
    Option Compare Text
     
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Sub SwitchToThisWindow Lib "user32.dll" (ByVal lhWindow As Long, ByVal pbAltTab As Long)
     
    Private Const SW_SHOW          As Long = 5
    Private Const SW_SHOWMAXIMIZED As Long = 3
    Private Const SW_SHOWNORMAL    As Long = 1
     
          'Udalostni procedura kliknuti na tlacitko 
    Private Sub CommandButton1_Click()
        Dim loWorkbook As Excel.Workbook
        Dim loWrkSheet As Excel.Worksheet
        Dim lhWnd      As Long
        Dim lsWndTitle As String
     
        lsWndTitle = souborGetJmeno("C:\Mojecesta\prezentace.xls")
        If (lsWndTitle <> vbNullString) Then
            lsWndTitle = "Microsoft Excel - " & lsWndTitle
        Else
                 'Něco je špatně ve funkci souborGetJmeno, každopádně to určitě nenajde dané okno, takže nemá cenu pokračovat, na zvážení MsgBox s hláškou, ať víš co se děje
            Exit Sub
        End If
     
        lhWnd = FindWindow(vbNullString, lsWndTitle)      'najit handle okna Excelu
        If (lhWnd <> 0&) Then
            Call SwitchToThisWindow(lhWnd, CLng(False))   'prepnout do okna excelu
            'Call ShowWindow(lhWnd, SW_SHOW)              'tohle mi ho nechtelo zobrazovat, hm?
        Else
              'Okno Excelu nebylo nalezeno, opět MsgBox (?)
        End If
    End Sub
     
          'Vrati jmeno souboru bez cesty uvedeneho v psCesta. pbPripona urcuje, zda se ma nebo nema vratit i s priponou
    Private Function souborGetJmeno(ByVal psCesta As String, Optional ByVal pbPripona As Boolean = True) As String
        On Error GoTo ERR_DEF_HANDLER
        Dim lnLomitko As Integer, lnTecka As Integer
     
        lnLomitko = InStrRev(psCesta, "\", , vbTextCompare)
        lnTecka = InStrRev(psCesta, ".", , vbTextCompare)
        If (lnLomitko > 0) Then
            lnLomitko = lnLomitko + 1
        Else
            lnLomitko = 1
        End If
        If (lnTecka > 0 And lnTecka > lnLomitko And pbPripona = False) Then
            souborGetJmeno = Mid$(psCesta, lnLomitko, lnTecka - lnLomitko)
        Else
            souborGetJmeno = Mid$(psCesta, lnLomitko)
        End If
     
        Exit Function
     
    ERR_DEF_HANDLER:
        souborGetJmeno = vbNullString
     
    End Function



    Poznámky:
    1. Zavolat okno metodou ShowWindow se mi nedařilo, kdo znáte lépe WinApi, dejte případně vědět, co je blbě.
    2. Deklaraci metody SwitchToThisWindow jsem v souborech v definičních souborech s API pro Visual Basic nenašel, tak jsem si jí napsal sám. Není na ní co zkazit, jen si nejsem stoprocentně jistý, zda je BOOL braný jako int.
    3. Zkoušel jsem taky klasicky mít referenci na Microsoft 9.0 Excel Library, spustit Excel pomocí New Excel.Application a následně otevřít sešit a nastavit si daný list. Všechno samozřejmě fungovalo, našlo se i okno Excelu (alias lhWnd), ale okno nebylo vidět, není ani v task baru.
    4. Taky jsem zkoušel
      Kód:
      VBA.Shell "C:\Program Files\\MsOff_2k\Office\Excel.exe ""C:\mojecesta\prezentace.xls""", vbMaximizedFocus
      , neboli otevřít Excel i se sešitem. Potom jsem opět hledal handle okna atd., ale taky to nedávalo správný výsledek.
    Prezentaci, kde jsem to dělal se mi nepodařilo nahrát (zazipována), v případě zájmu na mail.

  3. #3
    Senior Member Avatar uživatele D_a_v_i_d
    Založen
    08.12.2002
    Bydliště
    Praha
    Věk
    44
    Příspěvky
    5 153
    Vliv
    358

    Standardní Re: [VBA] - Otevření XLS listu z PPT prezentace

    Díky moc za snahu, teď jsem to v práci narychlo zkusil, ale nějak to ne a ne dokopat k funkčnosti, dokonce jsem si nastavil breakpoint na

    lsWndTitle = souborGetJmeno("C:\Mojecesta\prezentace.xls")

    tedy řádek, kam by se to mělo zcela určitě dostat, a kulový? Zabezpečení maker jsem stáhnul, takže to by to blokovat nemělo... divný... Nu ještě se v tom doma pohrabu, každopádně i tak díky moc!
    A Jedi gains power through understanding; a Sith gains understanding through power

    Destkop machine: Intel Core i5 2400/MSI P67A-C45 /2x4 GB DDR3 1333 MHz/Sapphire HD6790/22" LCD HP w2216/DSL 8MBit connected
    Na filmy v posteli: Lenovo IdeaPad S9e/1,6 GHz Intel Atom, 1 GB RAM, 80 GB HDD
    Na práci: Dell E5500/T9550 2,66 GHz Intel, 3 GB RAM, 120 GB HDD

  4. #4

    Standardní Re: [VBA] - Otevření XLS listu z PPT prezentace

    Jestli chceš, můžu ti poslat na mail tu mojí prezentaci, jestli ti to bude fungovat. Vypadá to, jakoby ta událostní procedura vůbec neprobíhala.
    Musí se samozřejmě shodovat jméno tlačítka atd. ale to jsi předpokládám zkontroloval.

  5. #5
    Senior Member Avatar uživatele D_a_v_i_d
    Založen
    08.12.2002
    Bydliště
    Praha
    Věk
    44
    Příspěvky
    5 153
    Vliv
    358

    Standardní Re: [VBA] - Otevření XLS listu z PPT prezentace

    Já jsem si udělal jen klik na odkaz v textu a na něj jsem přímo přes "Nastavit akci" pověsil makro ZkusTo (přejmenovaný CommandButton1_Click) a prostě se ta událostní procedura vůbec nezavolá, fakt na palici tohle? Pochopil bych, kdyby to makro padalo, ale proč se doprd... vůbec nevolá?!

    Přitom v tý samý prezentaci mám na UserFormech obrázky který kliknutím na odkazy můžu "vyvolávat" a mám to otvíraný taky přes makra a fachá to v klidu... Nechápu
    A Jedi gains power through understanding; a Sith gains understanding through power

    Destkop machine: Intel Core i5 2400/MSI P67A-C45 /2x4 GB DDR3 1333 MHz/Sapphire HD6790/22" LCD HP w2216/DSL 8MBit connected
    Na filmy v posteli: Lenovo IdeaPad S9e/1,6 GHz Intel Atom, 1 GB RAM, 80 GB HDD
    Na práci: Dell E5500/T9550 2,66 GHz Intel, 3 GB RAM, 120 GB HDD

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •