Jeg skal importere data fra en forespørgelse i access, det er også nemt nok, mit problem er at jeg gerne vil kunne flytte excel filen til andre placeringer. Når jeg så gør det passer linket til det importeret data ikke. databasen og filen ligger i samme mappe, og det vil de altid gøre. Kan man istedet for at hele stien til access databasen skal være feks. c:/mappe1/mappe2/access.dba lave det sådan at det kun er mappen man vælger, altså mappe2/access.dba
jeg ved ikke om det er til at forstå, er der nogen der kan hjælpe med det??
men når man så importere data, så skal man jo vælge hvilken database man tager forespørgelsen fra, og den ligger så på et eller andet drev. hvis så man flytter databasen så passer den sti jo ikke, og det er det jeg gerne vil undgå
Så vidt jeg kan se, giver det ikke problemer, at xls-filen flyttes. Den opdaterer korrekt efter en flytning, når der ændres data (og dermed forespørgselsresultat) i db. Men VBA er sikkert vejen, hvis det skal være dynamisk.
Prøv at stille dig i det ark det drejer sig om kør denne makro. Det gør ikke det hele dynamisk. Jeg tror ikke den mulighed eksisterer. Men dette vil ændre stien i query til at være samme sti som regnearket.
Sub ChangePath() Dim stDBase As String Dim vaTemp Dim stPath As String Dim vaConn As Variant stPath = ActiveWorkbook.path vaConn = Split(ActiveSheet.QueryTables(1).Connection, ";") vaTemp = Split(vaConn(2), "\") stDBase = vaTemp(UBound(vaTemp)) vaConn(2) = "DBQ=" & stPath & "\MyBase.mdb" vaConn(3) = "DefaultDir=" & stPath vaConn = Join(vaConn, ";") ActiveSheet.QueryTables(1).Connection = vaConn End Sub
Public Sub HentData() ' Kræver reference til ' Microsoft ActiveX Data Object 2.7 library
Dim rsData As ADODB.Recordset, strConnect As String, strSQL As String, Database As String Dim K As Integer, I As Long Database = ThisWorkbook.Path & "\Biler.mdb" ' Ændres til din DB, men behold \
' Vælg data via sql, ret til din sql strSQL = "SELECT * FROM Biler" Set rsData = New ADODB.Recordset rsData.Open strSQL, strConnect, adOpenStatic, adLockOptimistic, adCmdText
K = rsData.Fields.Count For I = 0 To K - 1 Cells(1, I + 1) = rsData.Fields.Item(I).Name Next I = UBound(GetCust) Range(Cells(2, 1), Cells(I + 1, K)) = GetCust rsData.Close Set rsData = Nothing End Sub
Sub ChangePath() Dim stDBase As String Dim vaTemp Dim stNewPath As String Dim vaConn As Variant Dim ws As Worksheet Dim qt As QueryTable stNewPath = ActiveWorkbook.path For Each ws In ActiveWorkbook.Worksheets On Error Resume Next For Each qt In ws.QueryTables vaConn = Split(qt.Connection, ";") vaTemp = Split(vaConn(2), "\") stDBase = vaTemp(UBound(vaTemp)) vaConn(2) = "DBQ=" & stNewPath & "\" & stDBase vaConn(3) = "DefaultDir=" & stNewPath vaConn = Join(vaConn, ";") qt.Connection = vaConn Next On Error GoTo 0 Next End Sub
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.