Spojení více maker (predchozí příspěvek) Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Spojení více maker (predchozí příspěvek)

Příspěvekod jiri255 » 11 čer 2014 19:19

Ještě jednou zdravím,
narazil jsem na malý problém se spojením maker s tím s předchozího příspěvku a prosím ještě o pomoc.
http://www.pc-help.cz/viewtopic.php?f=35&t=133974

Mám 3 funkční makra Module2, Module3, Module 4 a chtěl bych k nim na konec přidat i to z předchozího
příspěvku, které jsem si nakopíroval do Module5. Mám to takto zapsáno v Module1:

Kód: Vybrat vše

Sub spoustec()
      Module2.sloupce
      Module3.vymaz
      Module4.zmena
      Module5.GetAllWorkbookWindowNames
End Sub


Problém je v tom, že první tři makra proběhnou v pohodě a na tom posledním to vždy vyhodí chybovou hlášku,
kterou když odklepnu, tak makro doběhne.
Pokud to makro v Module5, ale spustím samostatně bez těch ostatních problém nenastane.
Nevíte jak to makro viz níže (předchozí příspěvek) správně přidat k ostatním, aby to proběhlo bez chyb?

Kód: Vybrat vše

'------------- Code Module --------------

Option Explicit

Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function GetClassName Lib "User32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function IIDFromString Lib "ole32" (ByVal lpsz As Long, ByRef lpiid As UUID) As Long
Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal hWnd As Long, ByVal dwId As Long, ByRef riid As UUID, ByRef ppvObject As Object) As Long

Type UUID 'GUID
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
  Data4(7) As Byte
End Type


'------------- Code (Module, Form) --------------

Const IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}"
Const OBJID_NATIVEOM As Long = &HFFFFFFF0

'Sub Command1_Click()
Sub GetAllWorkbookWindowNames()
    On Error GoTo MyErrorHandler

    Dim hWndMain As Long
    hWndMain = FindWindowEx(0&, 0&, "XLMAIN", vbNullString)

    Do While hWndMain <> 0
        GetWbkWindows hWndMain
        hWndMain = FindWindowEx(0&, hWndMain, "XLMAIN", vbNullString)
    Loop

    Exit Sub

MyErrorHandler:
    MsgBox "GetAllWorkbookWindowNames" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Sub

Private Sub GetWbkWindows(ByVal hWndMain As Long)
    On Error GoTo MyErrorHandler

    Dim hWndDesk As Long
    hWndDesk = FindWindowEx(hWndMain, 0&, "XLDESK", vbNullString)

    If hWndDesk <> 0 Then
        Dim hWnd As Long
        hWnd = FindWindowEx(hWndDesk, 0, vbNullString, vbNullString)

        Dim strText As String
        Dim lngRet As Long
        Do While hWnd <> 0
            strText = String$(100, Chr$(0))
            lngRet = GetClassName(hWnd, strText, 100)

            If Left$(strText, lngRet) = "EXCEL7" Then
                GetExcelObjectFromHwnd hWnd
                Exit Sub
            End If

            hWnd = FindWindowEx(hWndDesk, hWnd, vbNullString, vbNullString)
            Loop

        On Error Resume Next
    End If

    Exit Sub

MyErrorHandler:
    MsgBox "GetWbkWindows" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Sub

Public Function GetExcelObjectFromHwnd(ByVal hWnd As Long) As Boolean
    On Error GoTo MyErrorHandler

    Dim fOk As Boolean
    fOk = False

    Dim iid As UUID
    Call IIDFromString(StrPtr(IID_IDispatch), iid)

    Dim obj As Object
    If AccessibleObjectFromWindow(hWnd, OBJID_NATIVEOM, iid, obj) = 0 Then 'S_OK
        Dim objApp As Excel.Application
        Set objApp = obj.Application
       
        Dim wbCount As Integer
        For wbCount = 1 To objApp.Workbooks.Count
       
            ' Debug.Print objApp.Workbooks(wbCount).name
           
            ' Sheets Workbooks
            ' Dim myWorksheet As Worksheet
            ' For Each myWorksheet In objApp.Workbooks(1).Worksheets
            '     Debug.Print "     " & myWorksheet.name
            '     DoEvents
            ' Next
           
            If InStr(objApp.Workbooks(wbCount).name, "crd") > 0 Then
       
                objApp.Workbooks(wbCount).Close False
                wbCount = wbCount - 1
                If wbCount = objApp.Workbooks.Count Then Exit For
            End If
        Next
        fOk = True
    End If

    GetExcelObjectFromHwnd = fOk

    Exit Function

MyErrorHandler:
    MsgBox "GetExcelObjectFromHwnd" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Function

Reklama
cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod cmuch » 11 čer 2014 19:34

Jakou hlášku to vyhodí?

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod jiri255 » 11 čer 2014 20:05

hlášku zjistím a napíšu zítra bohužel jsem to měl na usb disku a zapomněl jsem ho u známého :-(

cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod cmuch » 12 čer 2014 05:54

Ten spouštěč můžeš mít i takto

Kód: Vybrat vše

Sub spoustec()
      sloupce
      vymaz
      zmena
      GetAllWorkbookWindowNames
End Sub

nebo

Kód: Vybrat vše

Sub spoustec()
      call sloupce
      call vymaz
      call zmena
      call GetAllWorkbookWindowNames
End Sub

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod jiri255 » 12 čer 2014 09:59

děkuji za nápovědu... ta hláška je:

GetExcelObjectFromHwd
Err = 9
Description: Sub script out of range

a v příloze přikládám celý ten soubor s těmi makry + to makro z minulého příspěvku
je Module06.
Do excelu zkopíruju data a když makro doběhne končí to tou hláškou. Ta hláška vyskakuje
i pokud se makro spustí bez dat.
Přílohy
pokus.xlsm
(31.57 KiB) Staženo 18 x

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod jiri255 » 17 čer 2014 19:22

nikdo netuší jak by to šlo opravit?

cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod cmuch » 18 čer 2014 21:08

Možná dělám něco špatně, ale mě to funguje tak jak má.

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod jiri255 » 19 čer 2014 08:17

hmm... nedalo mi to a zkusil jsem to místo na svém pc Win XP a office 07, na jiném PC s Win 7 a office 07
a tam to proběhlo opravdu bez problémů... ,tak teď nevím co si o tom mám myslet :-(
Problém by tedy mohl být v XP nebo v nastavení office? Můžu se zeptat na OS a office, na kterých to proběhlo
bez problémů.
Protože já bych to ještě nějaký čas potřeboval používat na těch XP a O07...

cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod cmuch » 20 čer 2014 17:21

Možnost zkusit to na Xp nemám.
Jinak na Win7 (různé verze) a Ex2007 nebo Ex2010 to chodí bez chyby.

Zkus si ten kód krokovat ( v editoru VBA klikni do makra GetAllWorkbookWindowNames , mačkej F8 ) a třeba zjistíš při čem to vyhodí tu chybu.

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod jiri255 » 23 čer 2014 19:42

tak jsem s tím laboroval, a když to jedu krok po kroku, tak problém není... jediné co jsem zjistil je,
že v tom kódu je obsažen přesně ten error co mi to hlásí

Kód: Vybrat vše

MyErrorHandler:
    MsgBox "GetExcelObjectFromHwnd" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Function

šlo by ten kód nějak ořezat o všechny ty chybové hlášky, které tam jsou nadefinované s toho vyhodit?

cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)

Příspěvekod cmuch » 27 čer 2014 19:41

Zakomentuj ten řádek s MSGBOXem.

Chyba tam vyskočí, že nemůže najít nějaký sešit. Pokud podle tebe proběhlo vše v pořádku klidně zakomentuj.

jiri255
Level 1.5
Level 1.5
Příspěvky: 105
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Spojení více maker (predchozí příspěvek)  Vyřešeno

Příspěvekod jiri255 » 30 čer 2014 19:05

tak to vypada, že to problém vyřešilo teď už to funguje, tak jak má :-) díky za pomoc a trpělivost


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • MINI PC spojeni z internim HDD 3,5 ze stareho PC Příloha(y)
    od Veroniqua » 20 srp 2023 08:53 » v Vše ostatní (hw)
    10
    1562
    od Veroniqua Zobrazit poslední příspěvek
    20 srp 2023 09:33
  • Vypínaní spojení mezi mobilem reprákem.
    od nulka » 08 říj 2023 14:06 » v Mobily, tablety a jiná přenosná zařízení
    0
    3526
    od nulka Zobrazit poslední příspěvek
    08 říj 2023 14:06
  • Nejde nastavit vyšší rychlost spojení než 100/100 (Mbps) Příloha(y)
    od Kubista33a » 24 kvě 2023 12:06 » v Sítě - hardware
    8
    1576
    od ITCrowd Zobrazit poslední příspěvek
    25 kvě 2023 22:55
  • 144hz monitor nefunguje na více než 120hz Příloha(y)
    od fakeyn » 11 kvě 2023 21:37 » v Problémy s hardwarem
    1
    849
    od kecalek Zobrazit poslední příspěvek
    12 kvě 2023 12:30
  • Tisk více excel souborů najednou.
    od Myerina » včera, 17:42 » v Kancelářské balíky
    1
    89
    od elninoslov Zobrazit poslední příspěvek
    dnes, 00:33

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů