odświeżenie tabel z SQL w excelu klikając w guzik

odświeżenie tabel z SQL w excelu klikając w guzik
xblazej85x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Plik posiada 3 tabele zaciągane z Oracle. Każda w innym arkuszu.
Chcę aby na kliknięcie w buttona odświeżało mi dane z dwóch tabel.

Stosuję poniższy kod:

Kopiuj
Private Sub CommandButton1_Click()    
    
    Dim sp As Worksheet
    Dim nal As Worksheet
     
    With ThisWorkbook
        Set sp = .Worksheets("Sprzedaż")
        Set nal= .Worksheets("Należności")
    End With
     
    With sp.QueryTables(1)
        .Refresh BackgroundQuery:=False
    End With
     
    With nal.QueryTables(1)
        .Refresh BackgroundQuery:=False
    End With
 
End Sub

Wyłazi błąd : SubScript out of range.
Dodam, że połączenia kwerend działają

Co robię źle ?

aurel
  • Rejestracja: dni
  • Ostatnio: dni
0

A w której linii ci ten błąd wyskakuje...?

Zgaduję, że w tej:
sp.QueryTables(1)
Prawdopodobnie sp.QueryTables nie posiada elementu 1, stąd subscript out of range.

xblazej85x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

gdy usunąłem oba (1) to teraz mam błąd:
run-time 438, object doesn't support this property or method

aurel
  • Rejestracja: dni
  • Ostatnio: dni
0

Hm, a czemu usunąłęś? Wiesz co robisz....? Wiesz co to jest QueryTables?

xblazej85x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

nie wiem co oznacza ta liczba w nawiasie :P
możesz mnie oświecić i podpowiedzieć rozwiązanie?

aurel
  • Rejestracja: dni
  • Ostatnio: dni
0

http://msdn.microsoft.com/en-us/library/office/aa174288(v=office.11).aspx

Use QueryTables(index), where index is the index number of the query table, to return a single QueryTable object.

Subscript out of range na With sp.QueryTables(1) oznacza, że w tej kolekcji nie ma elementu piewszego. Pokaż jak dodajesz query do QueryTables. W świetle posta powyżej nie chce mi się wierzyć w:

Dodam, że połączenia kwerend działają

Inna sprawa, że upewnij się, czy nazwy arkuszy podałeś prawidłowo:

Kopiuj
Set sp = .Worksheets("Sprzedaż")
Set nal= .Worksheets("Należności")

Literówka tutaj może sprawić sporo przykrości.

xblazej85x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

gdy zastosowałem kod :
ThisWorkbook.RefreshAll
to mi ładnie wszystkie kwerendy wczytało.
zdjęcie w załączniku

xblazej85x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

zastosowałem ten kod i zadziałało :

Kopiuj
Private Sub CommandButton2_Click()
Sheets("Sprzedaż").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
    Sheets("Raport obrotu").Select
End Sub

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.