Avatar billede jhack Nybegynder
22. november 2005 - 02:56 Der er 6 kommentarer og
2 løsninger

Pivot/SQL

Hej...

Er der nogen der kan fortælle mig hvorledes man opretter en pivottabel via VBA i Excel. Nedenfor har jeg vist mit SQL kald til ekstern database. Kort fortalt så henter jeg fra databasen et sæt konti med tilhørende posteringer. Det min pivottabel skal vise er kolonne1=konto og kolonne2=sum af poster.
Mit ønsker er at man kan oprette en knap i Excel som automatisk opretter pivottabellen.

Håber der er nogen der ude som kan hjælpe mig



Sub LavQT()
    Dim sConn As String
    Dim sSql  As String
    Dim oQt  As QueryTable
    Dim Konto As String
   
    sConn = "ODBC;DSN=xaltest;"
    sConn = sConn & "UID=xal_supervisor;PWD=xal_supervisor_pwd;APP=Microsoft Office 2003;WSID=SERVER;DATABASE=XALDB2;LANGUAGE=Dansk;Network=DBMSLPCN"

     
    sSql = "SELECT LEDTABLE.ACCOUNTNUMBER, LEDTABLE.ACCOUNTNAME, LEDTRANS.LASTCHANGED, LEDTRANS.DATE_, LEDTRANS.AMOUNTMST FROM XALDB2.dbo.LEDTABLE LEDTABLE, XALDB2.dbo.LEDTRANS LEDTRANS WHERE LEDTABLE.ACCOUNTNUMBER = LEDTRANS.ACCOUNTNUMBER AND LEDTABLE.DATASET = LEDTRANS.DATASET AND ((LEDTRANS.DATE_>{ts '2004-12-31 00:00:00'}))"
   
    'Oprette pivottabel'

End Sub
Avatar billede bak Forsker
22. november 2005 - 09:12 #1
det er ikke helt sikkert at det funker, da jeg ikke kan teste på dine data, men her er et bud, u måske selv kan modificere lidt

Sub LavQT()
  Dim sConn As New ADODB.Connection
  Dim RS As New ADODB.Recordset
  Dim sSql As String
  Dim PC As PivotCache
  Dim PT As PivotTable

  Dim oQt As QueryTable
  Dim Konto As String

  sConn = "ODBC;DSN=xaltest;"
  sConn = sConn & "UID=xal_supervisor;PWD=xal_supervisor_pwd;APP=Microsoft Office 2003;WSID=SERVER;DATABASE=XALDB2;LANGUAGE=Dansk;Network=DBMSLPCN"
  sSql = "SELECT LEDTABLE.ACCOUNTNUMBER, LEDTABLE.ACCOUNTNAME, LEDTRANS.LASTCHANGED ,LEDTRANS.DATE_, LEDTRANS.AMOUNTMST " & _
  "FROM XALDB2.dbo.LEDTABLE LEDTABLE, XALDB2.dbo.LEDTRANS LEDTRANS " & _
  "WHERE LEDTABLE.ACCOUNTNUMBER = LEDTRANS.ACCOUNTNUMBER AND LEDTABLE.DATASET = LEDTRANS.DATASET AND ((LEDTRANS.DATE_>{ts '2004-12-31 00:00:00'}))"
  sConn.Open


  'åbn recordsettet...
  Set RS = New ADODB.Recordset
  Set RS.ActiveConnection = sConn
  RS.Open sSql

  'klargør data til  pivottabellen....
  Set PC = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
  Set PC.Recordset = RS

  'opret pivottabellen ....
  Worksheets.Add Before:=Sheets(1)
  Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PC, _
                                        TableDestination:=Range("A1"))

  With PT
      .NullString = "0"
      .SmallGrid = False
      .AddFields ColumnFields:="ACCOUNTNUMBER"
      .PivotFields("AMOUNTMST").Orientation = xlDataField
  End With
End Sub
Avatar billede bak Forsker
22. november 2005 - 09:13 #2
Ps, husk at lukke sconn og rs igen efter brug
Avatar billede jhack Nybegynder
23. november 2005 - 01:33 #3
Det virker udmiddelbart men jeg får en fejl på linien sConn.open

run-time error -2147467259(80004005)
[Microsoft][ODBC Driver manager]Data Source name not found and no default driver specified.

Jeg kan sagtes lave en normal QT connection til databasen så jeg ved at connection strengen virker. Jeg har også checket at DSN'en er korrekt og servernavn er korrekt.

Håber du/i kan hjælpe mig med dette?

Sub LavQT()
  Dim sConn As New ADODB.Connection
  Dim RS    As New ADODB.Recordset
  Dim sSql  As String
  Dim PC    As PivotCache
  Dim PT    As PivotTable

  Dim oQt  As QueryTable
  Dim Konto As String
 
  sConn = "ODBC;DSN=xaltest;"
  sConn = sConn & "UID=xal_supervisor;PWD=xal_supervisor_pwd;APP=Microsoft Office 2003;WSID=SERVER;DATABASE=XALDB2;LANGUAGE=Dansk;Network=DBMSLPCN"
 
  sSql = "SELECT LEDTABLE.ACCOUNTNUMBER, LEDTABLE.ACCOUNTNAME, LEDTRANS.LASTCHANGED ,LEDTRANS.DATE_, LEDTRANS.AMOUNTMST " & _
        "FROM XALDB2.dbo.LEDTABLE LEDTABLE, XALDB2.dbo.LEDTRANS LEDTRANS " & _
        "WHERE LEDTABLE.ACCOUNTNUMBER = LEDTRANS.ACCOUNTNUMBER AND LEDTABLE.DATASET = LEDTRANS.DATASET AND ((LEDTRANS.DATE_>{ts '2004-12-31 00:00:00'}))"
 
  sConn.Open
   
  'åbn recordsettet...
  Set RS = New ADODB.Recordset
  Set RS.ActiveConnection = sConn
 
  RS.Open sSql

  'klargør data til  pivottabellen....
  Set PC = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
  Set PC.Recordset = RS

  'opret pivottabellen ....
  Worksheets.Add Before:=Sheets(1)
  Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PC, _
                                        TableDestination:=Range("A1"))

  With PT
      .NullString = "0"
      .SmallGrid = False
      .AddFields ColumnFields:="ACCOUNTNUMBER"
      .PivotFields("AMOUNTMST").Orientation = xlDataField
  End With

End Sub
Avatar billede bak Forsker
23. november 2005 - 13:09 #4
ok,måske kan dette gøre det

Sub LavQT()
  Dim sTemp as String
  Dim sConn As New ADODB.Connection
  Dim RS    As New ADODB.Recordset
  Dim sSql  As String
  Dim PC    As PivotCache
  Dim PT    As PivotTable

  Dim oQt  As QueryTable
  Dim Konto As String

  sTemp = "ODBC;DSN=xaltest;"
  sTemp = sTemp & "UID=xal_supervisor;PWD=xal_supervisor_pwd;APP=Microsoft Office 2003;WSID=SERVER;DATABASE=XALDB2;LANGUAGE=Dansk;Network=DBMSLPCN"
 
  sSql = "SELECT LEDTABLE.ACCOUNTNUMBER, LEDTABLE.ACCOUNTNAME, LEDTRANS.LASTCHANGED ,LEDTRANS.DATE_, LEDTRANS.AMOUNTMST " & _
        "FROM XALDB2.dbo.LEDTABLE LEDTABLE, XALDB2.dbo.LEDTRANS LEDTRANS " & _
        "WHERE LEDTABLE.ACCOUNTNUMBER = LEDTRANS.ACCOUNTNUMBER AND LEDTABLE.DATASET = LEDTRANS.DATASET AND ((LEDTRANS.DATE_>{ts '2004-12-31 00:00:00'}))"

  sConn.Open sTemp
 
  'åbn recordsettet...
  Set RS = New ADODB.Recordset
  Set RS.ActiveConnection = sConn

  RS.Open sSql

  'klargør data til  pivottabellen....
  Set PC = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
  Set PC.Recordset = RS

  'opret pivottabellen ....
  Worksheets.Add Before:=Sheets(1)
  Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PC, _
                                        TableDestination:=Range("A1"))

  With PT
      .NullString = "0"
      .SmallGrid = False
      .AddFields ColumnFields:="ACCOUNTNUMBER"
      .PivotFields("AMOUNTMST").Orientation = xlDataField
  End With

End Sub
Avatar billede jhack Nybegynder
24. november 2005 - 09:51 #5
Hej bak

Det virkede - Tak
Avatar billede bak Forsker
24. november 2005 - 10:26 #6
Godt :-)
Avatar billede jhack Nybegynder
24. november 2005 - 10:28 #7
Hej Bak
Har du fået 150 point?
Avatar billede bak Forsker
24. november 2005 - 10:42 #8
Nej, dem fik du selv
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester