Avatar billede per2edb Praktikant
07. april 2014 - 17:10 Der er 17 kommentarer og
1 løsning

Variabler overført fra Access til Excel

Jeg starter et excel project fra Access hvor der i VBA modulet ligger:

Shell "cmd /c  start """" """ & "C:/..Program.xlsm" & """"

Jeg vil gerne have overført 2 variabler fra Access til Excel
Kan man det og hvordan?

Ligesom ?Variabel1=xxx, Variabel2=yyy
Avatar billede bvirk Guru
07. april 2014 - 22:28 #1
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
Avatar billede per2edb Praktikant
07. april 2014 - 23:19 #2
Jeg vil prøve at gøre det mere jordnær:

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
Avatar billede prhan Juniormester
08. april 2014 - 08:02 #3
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
Avatar billede per2edb Praktikant
08. april 2014 - 09:01 #4
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
Avatar billede bvirk Guru
08. april 2014 - 19:30 #5
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.
Avatar billede bvirk Guru
08. april 2014 - 19:32 #6
Rettelse til #5 (setvars)

Sub testOpenExcel()
  With CreateObject("Excel.application")
    .Application.workbooks.Open ("C:/..Program.xlsm")
    .Run "setvars", 2, 3
    .Visible = True
  End With
End Sub
Avatar billede per2edb Praktikant
10. april 2014 - 13:41 #7
Jeg får fejlen setvars findes ikke
Kan du hjælpe
Avatar billede bvirk Guru
10. april 2014 - 18:29 #8
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
Avatar billede per2edb Praktikant
10. april 2014 - 22:16 #9
Jeg kan ikke få det til at virke.

Nu får jeg kaldt excel. Men intet kommer ud her.

Du skriver:

Excel
-----
Public var1, var2

Public Function setvars(v1, v2)
    var1 = v1: var2 = v2
    setvars = TypeName(v1) & "(" & v1 & ")," & TypeName(v2) & "(" & v2 & ")"
End Function

Men hvordan kalder jeg Function setvars(v1, v2)  ?
Og hvordan får jeg var1 og var2 ud ?
Avatar billede bvirk Guru
11. april 2014 - 19:00 #10
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.
Avatar billede per2edb Praktikant
12. april 2014 - 11:29 #11
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
Avatar billede bvirk Guru
12. april 2014 - 12:46 #12
Access
------

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
Avatar billede per2edb Praktikant
13. april 2014 - 16:28 #13
Hej

Jamen værdierne 2 og 3 er da ikke kommet med over
Se fra sidst  .Run "setvars", 2, 3
Avatar billede bvirk Guru
13. april 2014 - 17:09 #14
Det er rigtigt - det har jeg droppet for at vise værdioverførsel i sin enkleste form.
Avatar billede per2edb Praktikant
13. april 2014 - 17:16 #15
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
Avatar billede bvirk Guru
13. april 2014 - 17:57 #16
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 ;)
Avatar billede per2edb Praktikant
14. april 2014 - 12:45 #17
Så virker det. 1000 tak for hjælpen
Vil du lave det så du kan få point
Avatar billede bvirk Guru
14. april 2014 - 19:42 #18
Og jeg takker mest for endnu en anledningen til at have kunnet være verbal.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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