Ikke helt hvad du spørger om, men hvis excel dokumentet 'Program.xlsm' har nogle public variabler eller funktioner til at sætte værdier, og dokumentet åbnes i excel, IKKE vha. ovenstående, men vha. automation (createObject("Excel.application"), så er det måske mulig fra koden i Access at tilgå disse. Søgetip: automation open excel
Her nogle væsentlige linier snupper lidt tilfældigt fra nettet - åbner excel dokument: (ikke testet - der er måske mere i det)
with createObject("Excel.application") .Application.Workbooks.Open("C:/..Program.xlsm") .Visible =true end with
Access kalder excel og ønsker et bestemt firma selekteret ud blandt mange ved hjælp af sql select placeret i excel.
Jeg kan selvfølgelig benytte en tabel fra access hvor variablen firma nr placeres men det burde kunne laves enklere når firma nr f.eks 123 bare skal overføred til excel
Noget i retning af man indenfor web i asp.net overfører variabler med xxx.aspx?FirmaNr=123
I Excel går du ind i fanebladet Data--> Hent eksterne data fra Access--> Find din Access database og vælg tabel eller view--> Inden du godkender dataforbindelsen, så gå ind i egneskaber og definition--> Her kan du i komandoteksten lave din SQL på tabellen
Som jeg skriver ovenfor - "Jeg kan selvfølgelig benytte en tabel.... Altså den løsning kender jeg og benytter i forvejen
Indenfor mange programmer (F.eks web) kan en simpel variabel overføres ved at hægte den på "kaldet" her Shell "cmd /c start ...
Besvarelsen fra jer indikerer det ikke kan lade sig gøre mellem Access og Excel så jeg laver en tabel i Access, men det er at skyde gråspurge med kanoner
Det var skam klart nok i #1 - og man kan ikke overføre info over kommandolinien.
Yderligere uddybet kan det opnåes således
I et excel kodemodul: (i filen C:/..Program.xlsm)
public var1,var2 public sub setvars(v1,v2): var1=v: var2=v2: end sub
Fra Access kode åbnes excel med værdierne 2,3 i var1,var2 således:
Sub testOpenExcel() With CreateObject("Excel.application") .Application.workbooks.Open ("C:/..Program.xlsm") .Run "setvar", 2, 3 .Visible = True End With End Sub
Men iøvrigt er der en pointe i at anvende databaseopslag fra excel som nævnt ovenover - det er mere veldokumenteret data.
Sub testOpenExcel() With CreateObject("Excel.application") .Application.workbooks.Open ("C:/..Program.xlsm") .Run "setvars", 2, 3 .Visible = True End With End Sub
Koden der kaldes vha run, skal befinde sig i et kodemodul under mappe moduler i project explorer - prøv at teste for stavefejl og prøv i excel immediate vindueret kopieret fra Access argument fra run kommandoen (idé til at udelukke stavefejl)
Uddyber lige - der er banalt hvis man ved det - med der er intet specielt med navnet setvars - enhver public kodestump som sub eller function kan kaldes når det ligger i et kodemodul.
Det virker her! (filtype .xls) - prøvede lige med denne til at verificere at men overføre typer nøjagtig som var det kald af lokale subs/functions.
Access ------ Sub testoe() With CreateObject("Excel.application") .Application.workbooks.Open ("....test.xls") Debug.Print .Run("setvars", #1/1/2014#, 34#) .Visible = True End With End Sub
Excel ----- Public var1, var2
Public Function setvars(v1, v2) var1 = v1: var2 = v2 setvars = TypeName(v1) & "(" & v1 & ")," & TypeName(v2) & "(" & v2 & ")" End Function
Nej - der 'kommer ikke noget ud' i excel - variablerne var1 og var2 er blot tildelt værdi. Du kan åbne vba editoren i Excel (alt-f11) og skrive '?var1' i immediate vinduet, så skulle du gerne se den anden parameter til kaldet af run fra access. Det er op til dig at skrive kode der anvender variablerne.
At tildele globale variabler værdi, er blot det simpleste jeg kunne finde på - måske passer det bedre til din anvendelse at skrive værdier til bestemte celler. - de overlever faktisk et break hvad globale variabler ikke gør.
Functionen setvars, i mit eksempel, kaldes af noget i windows styresystem som konsekvens af kald af run på com objektet der returneres ved kald af createobject i access koden.
Prøv at glemme min eksempel 'setvars' og kald en funktion eller sub du selv har skrevet.
Jeg kan ikke få det til at virke Lad os "skære det til" 1) Lad os tage det fra VBA i Access til VBA i Excel 2) Jeg skriver mine koder 3) Du retter dem (Helst ikke verbalt)
Access ------- Public Sub OpenExcel() With CreateObject("Excel.application") .Application.Workbooks.Open (C:....xxx.xlsm) .Run "setvars", 2, 3 .Visible = True End With End Sub
Excel -------- Sub xxx Dim TestVaerdi As String TestVaerdi = setvars(v1, v2)
MsgBox (TestVaerdi) end sub
Public Function setvars(v1, v2) var1 = v1: var2 = v2 setvars = TypeName(v1) & "(" & v1 & ")," & TypeName(v2) & "(" & v2 & ")" End Function
Public Sub OpenExcel() With CreateObject("Excel.application") .Application.workbooks.Open ("C:....xxx.xlsm") .Run "xxx", "Do you want to open excel?" .Visible = True End With End Sub
Excel -----
Public Sub xxx(TestVaerdi) If MsgBox(TestVaerdi, vbYesNo, "Message box startet from within excel vba code") = vbNo Then Application.Quit end if End Sub
Jamen hele opgaven består i at overføre f.eks værdierne 2 og 3 Jeg har hele tiden kunnet starte Excel fra Access, men min 2 variabler skal med over - det er alene her problemet ligger
Undlod bevidst setvars fordi jeg, måske fejlagtigt, fornemmede at du antog den for at være noget specielt. Den er ikke mere speciel end xxx. Hvis du gerne vil have det så kommer her overførsel af ikke bare 2,3 men 2,3,4,5,6... lige så mange det skal være.
Access ----- Public Sub OpenExcel() With CreateObject("Excel.application") .Application.workbooks.Open ("D:\home\dev\hadm\cases\finans\test.xls") .Run "xxx", 2, 3, 4, 5, 6, #4/13/2014# .Visible = True End With End Sub
excel -----
Public Sub xxx(ParamArray TestVaerdi()) Dim item, mes For Each item In TestVaerdi mes = mes & item & vbCrLf: Next If MsgBox("Værdiliste:" & vbCrLf & mes & "do you want to open excel?", _ vbYesNo, "Message box startet from within excel vba code") = vbNo Then Application.Quit End Sub
Og igen - det er IKKE nogen speciel access til excel teknik, der er som jeg antager at du har skrevet det 100'er af gange hvor man kalder en function eller en sub som med nogle parametre. Håber 10 øren er ved at falde - du er jo ikke helt ny i dette per2edb ;)
Og jeg takker mest for endnu en anledningen til at have kunnet være verbal.
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.