VBA Excel 2003 - Method Resresh of object QueryTable failed

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

Moderátor: Mods_senior

Zamčeno
Adalbert
nováček
Příspěvky: 28
Registrován: 09 úno 2011 13:13

VBA Excel 2003 - Method Resresh of object QueryTable failed

Příspěvek od Adalbert »

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
cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: 02 bře 2011 19:12
Bydliště: Drsná Vysočina :D

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

Příspěvek od cmuch »

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: 27 čer 2013 23:26

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

Příspěvek od lubo. »

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: 09 úno 2011 13:13

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

Příspěvek od Adalbert »

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: 27 čer 2013 23:26

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

Příspěvek od lubo. »

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: 09 úno 2011 13:13

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

Příspěvek od Adalbert »

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.
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Sniper Ghost Warrior 3 CryEngine Error Memory allocation for 4294967295 bytes failed
    od byron » » v Hry
    4 Odpovědi
    5037 Zobrazení
    Poslední příspěvek od byron
  • Přechod z Excel 21 na Excel 24
    od Snekment » » v Kancelářské balíky
    2 Odpovědi
    14399 Zobrazení
    Poslední příspěvek od Snekment
  • Pohoda a excel
    od brownwld » » v Kancelářské balíky
    1 Odpovědi
    7321 Zobrazení
    Poslední příspěvek od atari
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » » v Kancelářské balíky
    5 Odpovědi
    5895 Zobrazení
    Poslední příspěvek od atari
  • Excel 2016 - vzorec kombinace podmínek
    od MK_Vs » » v Kancelářské balíky
    5 Odpovědi
    6115 Zobrazení
    Poslední příspěvek od lubo.

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