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