VBA Excel 2003 - Method Resresh of object QueryTable failed Vyřešeno

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

Moderátor: Mods_senior

Adalbert
nováček
Příspěvky: 28
Registrován: únor 11
Pohlaví: Muž
Stav:
Offline

VBA Excel 2003 - Method Resresh of object QueryTable failed

Příspěvekod Adalbert » 27 čer 2013 12:12

Zdravim,

vytvoril jsem si VBA makro na tahani informaci z Oracle DB do Excelu 2003.
Respektive nekolik maker, ktere se navzajem volaji a kazde z nich mi taha data na prislusna mista v excelovem sesitu.

Prvni makro taha z DB informace na zaklade promenne v bunce, kterou mohu zadavat rucne a ktere slouzi zaroven jako promenna pro SQL dotaz.

Problem je ten, ze spustim makro treba 10x a vse je OK a po jedenacte nastane err: Method Resresh of object QueryTable failed
Spustim li ho znovu pak err: Application defined or object defined error

Vypnu li cely excel a spustim sesit a makro znovu, opet nekolikrat probehne OK, ale drive nebo pozdeji opet err.
Kod uz jsem prepisoval tolikrat a bez vysledku, ze uz se obracim s prosbou na vas.

Pro ilustraci samozrejme prikladam kod:


Kód: Vybrat vše

Option Explicit


Sub Produkt()

Dim ID_produktu As Range, Vypis_produktu As Range
Dim strConn As String, strSql As String, qtProdukt As QueryTable

Set ID_produktu = Range("C4")
Set Vypis_produktu = Range("C20")



strConn = "ODBC;DRIVER={Oracle in XE};SERVER=server;UID=login;Pwd=password;DBQ=dbq;"
strSql = "select ...."


Application.ScreenUpdating = False

If Len(ID_produktu) = 18 Then


Set qtProdukt = ActiveSheet.QueryTables.Add( _
    Connection:=strConn, _
    Destination:=Vypis_produktu, _
    Sql:=strSql)
   
    With qtProdukt
        .Name = "Produkt"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = False
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
           
                If .Refreshing Then
                MsgBox "Aktualizace DB dotazu: prosím čekejte"
                Application.Wait (Now + TimeValue("0:00:03"))
                Else
                .Refresh BackgroundQuery:=False
                End If
   
    End With
   
Else
MsgBox ("Zadané číslo neodpovídá formátu ID_produktu")
End If
   
Set qtProdukt = Nothing
Set Vypis_produktu = Nothing
Set ID_produktu = Nothing
   
Application.Run "workbookname.xls!Module8.modulename"
   
End Sub

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

Re: VBA Excel 2003 - Method Resresh of object QueryTable fai

Příspěvekod cmuch » 30 čer 2013 09:34

Zkus za polední End IF dát Application.ScreenUpdating = True

Jinak nevím, jen zkouším.

lubo.
Level 2
Level 2
Příspěvky: 196
Registrován: červen 13
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA Excel 2003 - Method Resresh of object QueryTable fai

Příspěvekod lubo. » 30 čer 2013 10:56

Chyba je nejspíš v

Kód: Vybrat vše

Set qtProdukt = ActiveSheet.QueryTables.Add( _


Při každém spuštění přidáš jednu tabulku... To by se z toho asi každý po čase zbláznil.

Zkus tabulku po vytvoření pojmenovat a při dalším spuštění zkontroluj, jestli ji už nemáš, pokud ano měl by stačit refresh.

ps.: Taky můžeš nejpvrve staré querytables vymazat

Adalbert
nováček
Příspěvky: 28
Registrován: únor 11
Pohlaví: Muž
Stav:
Offline

Re: VBA Excel 2003 - Method Resresh of object QueryTable fai

Příspěvekod Adalbert » 01 črc 2013 10:01

to lubo:

je to tak; uz V patek jsem si vsiml, ze velikost exceloveho sesitu mi vesele narusta, prestoze do nej neukladam zadna data z DB (pred skoncenim prace se sesitem vzdy cely sesit mazu).
Takze jsem po trose hledani nalezl, ze mi zustavaji jmena QT nekde v pozadi sesitu.
Pro ucel odmazavanni techto dat v pozadi jsem nasadil podpurne macro:

Kód: Vybrat vše

Sub NoNames()
  For Each n In ActiveWorkbook.Names
    n.Delete
  Next n
End Sub


Spolehlive odstranuje vsechny pojmenovane QT.

Dnes budu testovat stabilitu sesitu.
Kazdopadne vyzkousim i cestu kontroly pojmenovanych QT a reseni prostrednictvim .Resresh
Naposledy upravil(a) Adalbert dne 03 črc 2013 10:14, celkem upraveno 1 x.

lubo.
Level 2
Level 2
Příspěvky: 196
Registrován: červen 13
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA Excel 2003 - Method Resresh of object QueryTable fai

Příspěvekod lubo. » 01 črc 2013 10:50

Spíš bych zkusil něco jako:

Kód: Vybrat vše

Dim qt As QueryTable
For each qt in ActiveSheet.QueryTables
    qt.Delete
Next


Ty jména obsahují i jiné údaje, jejich totální výmaz nemusí být nejlepší nápad.

Adalbert
nováček
Příspěvky: 28
Registrován: únor 11
Pohlaví: Muž
Stav:
Offline

Re: VBA Excel 2003 - Method Resresh of object QueryTable fai  Vyřešeno

Příspěvekod Adalbert » 03 črc 2013 10:13

Ano souhlasim, ze totalni vymaz vsech jmen je trochu humpolacky reseni, nicmene pro muj pripad dostacujici.
Zadna jina data do jmen muj sesit neuklada, tedy si to mohu dovolit.
Zaroven se take pripojuji do DB pres QT, ktere se mimo jine spousteji v cyklu For Each .... Next
a do Jmen se mi tedy generuji QT se jmeny, ktere si automaticky excel vygeneruje (pridanim cisla za opakovany QT).
Pokud bych potreboval mazat ze Jmen pouze konkretni QT, musel bych rozsirit kod na odmaz take o cyklus, ktery mi vybere vsechny QT, nejen mnou natvrdo definovane, ale i ty ktere si excel sesit sam zapise s vygenerovanym poradovym cislem.


Kazdopadne po osetrni odmazu QT je kod jiz funkcni a bez padu.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • EXCEL -jak otevřít 2 excel sobory abych je viděla současne a samostatně
    od Ketty02 » 30 srp 2024 21:19 » v Vše ostatní (sw)
    2
    4743
    od Riviera kid Zobrazit poslední příspěvek
    02 zář 2024 16:21
  • Přechod z Excel 21 na Excel 24
    od Snekment » 29 led 2025 13:46 » v Kancelářské balíky
    2
    12160
    od Snekment Zobrazit poslední příspěvek
    29 led 2025 15:05
  • Pohoda a excel Příloha(y)
    od brownwld » 06 kvě 2025 17:28 » v Kancelářské balíky
    1
    4527
    od atari Zobrazit poslední příspěvek
    07 kvě 2025 09:41
  • Excel - výpočet nočních hodin Příloha(y)
    od Uziv00 » 17 říj 2024 11:22 » v Kancelářské balíky
    3
    3296
    od lubo. Zobrazit poslední příspěvek
    24 říj 2024 00:00
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » 24 dub 2025 10:51 » v Kancelářské balíky
    5
    3903
    od atari Zobrazit poslední příspěvek
    26 dub 2025 09:11

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

Kdo je online

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