Mating av en Excel QueryTable objekt fra minnet

stemmer
0

Hilsener,

VBA-koden nedenfor vil skape en Excel-QueryTable objekt, og å vise den starter på Range ( D2). Den spesifikke adresse i dette målområdet er uvesentlig.

Mitt spørsmål er - er det mulig å manuelt mate inn verdier til en in-memory Recordset, og deretter har tabellen leses fra den? Med andre ord, jeg ønsker å spesifisere tabellkolonnene og verdier i VBA, ikke ha dem komme fra en database eller fil.

Public Sub Foo()

    Dim blah As QueryTable
    Dim rngTarget As Range

    Dim strQuery As String

    strQuery = SELECT * FROM MY_TABLE
    Set rngTarget = Range(D2)
    Dim qt As QueryTable
    Set qt = rngTarget.Worksheet.QueryTables.Add(Connection:= _
        ODBC;DRIVER=SQL Server;SERVER=MY_SQL_SERVER;APP=MY_APP;Trusted_Connection=Yes, Destination:=rngTarget)

    With qt
        .CommandText = strQuery
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .Name = MY_RANGE_NAME
        .MaintainConnection = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = False
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
   End With

End Sub
Publisert på 23/10/2008 klokken 11:17
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Fra Excel VB Hjelp Para tilkoblingen kan være:

"En ADO eller DAO Recordset-objekt. Data lest fra ADO eller DAO post. Microsoft Excel beholder post til spørretabellen slettes eller tilkoblingen blir endret. Den resulterende spørretabellen kan ikke redigeres"

Så ja det ser ut som du kan gjøre det.

Svarte 23/10/2008 kl. 20:00
kilden bruker

stemmer
2

Ja sikkert.

  Dim vConnection As Variant, vCommandText As Variant
  Dim r As ADODB.Recordset
  Dim i As Long

  'Save query table definition
  vConnection = QueryTable.Connection
  vCommandText = QueryTable.CommandText


  Set r = New ADODB.Recordset
  <populate r>

  Set QueryTable.Recordset = r
  QueryTable.Refresh False

  'Restore Query Table definition
  Set QueryTable.Recordset = Nothing
  QueryTable.Connection = vConnection
  QueryTable.CommandText = vCommandText
Svarte 29/10/2008 kl. 19:40
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more