23. februar 2009 - 12:12Der er
9 kommentarer og 1 løsning
Åbning af access-databasde fra Excvel.
Angående kategori: VB i Excel. Kan man åbne og arbejde med en access-database fra et vb-scribt i Excel? Jeg skulle gerne kunne opdaterer data i en accessdatabase fra excel, og det skal køres fra excel. Brugerne skal ikke mærke berøringen med Access. Brug af ODBC er udelukket. Jeg håber, der findes et brubart svar.
Rem Database-def. Public db As database, tbl_budget Dim flag As Boolean
Dim xSti Public Sub findSti() xSti = ActiveWorkbook.Path If Right(xSti, 1) <> "\" Then xSti = xSti + "\" End If End Sub Rem Database - rutiner Rem ================== Public Sub LukDb() On Error Resume Next
tbl_budget.Close db.Close End Sub Public Sub åbnDatabase() findSti Set db = OpenDatabase(xSti + "budget.mdb") End Sub Public Sub åbnBudgetTabel() åbnDatabase Set tbl_budget = db.OpenRecordset("budget") End Sub Public Function findAfdeling(afdNr) On Error GoTo fejl
åbnBudgetTabel
With tbl_budget .Index = "primarykey" .Seek "=", afdNr
If Not .NoMatch Then findAfdeling = True Else findAfdeling = False End If End With Exit Function
fejl: findAfdeling = False End Function Rem ================ Rem Excel-funktioner Rem ================ Private Sub worksheet_Change(ByVal Target As Excel.Range) Dim aktuelleRække, aktuelleKolonne, aktuelleAfd, aktuelleVærdi, feltnr
On Error Resume Next
Rem Kolonne A - AFDELINGSNUMMER If Not Intersect(Target, Range("A:A")) Is Nothing Then flag = True If findAfdeling(Target.Value) = True Then indsætDataFraDB Target.Row Else If Target.Value <> "" Then MsgBox ("AfdNr.:" & CStr(Target.Value) & " kan ikke findes") End If End If Else Rem Kolonne E - F - G BUDGETTAL If Not Intersect(Target, Range("E:E;F:F;G:G")) Is Nothing Then If flag = False Then aktuelleKolonne = Target.Column aktuelleRække = Target.Row aktuelleAfd = Cells(aktuelleRække, 1) aktuelleVærdi = Cells(aktuelleRække, aktuelleKolonne) feltnr = aktuelleKolonne - 1 Rem Klar til opdatering If findAfdeling(aktuelleAfd) = True And IsNumeric(aktuelleVærdi) = True Then opdaterFelt feltnr, aktuelleVærdi End If End If End If End If
End Sub Private Sub opdaterFelt(feltnr, værdi) With tbl_budget .Edit .Fields(feltnr) = værdi .Update End With End Sub Private Sub indsætDataFraDB(rækkeNr) With ActiveSheet For x = 1 To 6 .Cells(rækkeNr, x + 1) = tbl_budget.Fields(x) Next x End With
flag = False End Sub Private Sub Worksheet_Deactivate() LukDb End Sub
Synes godt om
Ny brugerNybegynder
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.