Avatar billede puppetmaster Nybegynder
26. august 2005 - 09:48 Der er 31 kommentarer og
2 løsninger

Indsætte formel i Excel

Det er jo ingen sag at overføre data fra Access til Excel, men kan man overføre en formel (som i Access er angivet som en tekststreng)?
Avatar billede mugs Novice
26. august 2005 - 10:04 #1
Jeg ved ikke om du kan indsætte en formel, men du kan styre Excel fra Access. I flg. kpde sender jeg data fra Access til Excel. Til sidst tælles posterne og sættes ind nederst i Excel. Derefter justeres kolonnebredderne:

Dim Obvar As Object, wkb As Object, Rst As Recordset
Dim I As Integer, Tek As String, Tek1 As String, Tek2 As String, Excelpågrebet As String
Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset("Tabel1", dbOpenTable)
Set Obvar = CreateObject("excel.application")
Obvar.Visible = True
Set wkb = Obvar.Workbooks.Add
wkb.Worksheets("Ark1").Cells(1, 1).Value = "Dato"
For I = 2 To Rst.RecordCount + 1
wkb.Worksheets("Ark1").Cells(I, 1).Value = Str$(Rst.Fields![Datotid])
Rst.MoveNext
Next
Tek = "=Sum(R[" + Str$(-Rst.RecordCount) + "]C:R[-1]C)"
wkb.Worksheets("Ark1").Cells(Rst.RecordCount + 2, 5).Value = Tek
wkb.Worksheets("Ark1").UsedRange.Columns.AutoFit

Prøv at indspille en makro, kopier den og indsæt den i din overførselskode.
Avatar billede madschristensen Nybegynder
26. august 2005 - 10:11 #2
Et lille simpelt eksempel som indsætter to værdier og en formel!

Dim exObj As New Excel.Application
exObj.Visible = True
exObj.Workbooks.Add

exObj.ActiveSheet.Cells(1, 1).Value = 1
exObj.ActiveSheet.Cells(1, 2).Value = 2

exObj.ActiveSheet.Cells(1, 3).Value = "=A1+B1"
Avatar billede madschristensen Nybegynder
26. august 2005 - 10:12 #3
Kræver reference til Microsoft Excel object library.... ;O)))
Avatar billede mugs Novice
26. august 2005 - 10:15 #4
Hej Mads.

Min kode kræver også en reference til Excel. Men jeg tror faktisk ikke det er det spørgeren vil. Men derimod indsætte f.eks en Hvis formel i formelvinduet i Excel. Og der er jeg på bar grund.
Avatar billede madschristensen Nybegynder
26. august 2005 - 10:24 #5
="a1+b1" ER jo en formel... ??
Avatar billede mugs Novice
26. august 2005 - 10:26 #6
Enig. Men hvordan får dette i formelvinduet:

="a1+b1"
Avatar billede sjap Praktikant
26. august 2005 - 10:30 #7
Prøv med

.Formula

i stedet for

.Value
Avatar billede puppetmaster Nybegynder
26. august 2005 - 10:40 #8
Ja, det er noget derhenad, nu mangler jeg bare at formatere denne streng, så Access ikke skriver Application or object error i linien
xlsheet.Cells(j, i + 1) = "=VÆRDI(HØJRE($L$5)&TIME($I5)&MINUT($I5)"
Avatar billede madschristensen Nybegynder
26. august 2005 - 10:40 #9
Dim exObj As New Excel.Application
exObj.Visible = True
Sådan:

exObj.Workbooks.Add

exObj.ActiveSheet.Cells(1, 1).Value = 1
exObj.ActiveSheet.Cells(1, 2).Value = 2
exObj.ActiveSheet.Range("C1").Formula = "=a1+b1"
Avatar billede puppetmaster Nybegynder
26. august 2005 - 10:43 #10
Ups, det var sådan her den så ud nu.
xlsheet.Cells(j, i + 1) = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5)"
Avatar billede madschristensen Nybegynder
26. august 2005 - 10:49 #11
xlsheet.Cells(j, i + 1).formula = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5)"
Avatar billede puppetmaster Nybegynder
26. august 2005 - 10:52 #12
Der er ingen forskel på at skrive
xlsheet.Cells(j, i + 1).formula = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5)"
eller
xlsheet.Cells(j, i + 1).value = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5)"
eller
xlsheet.Cells(j, i + 1) = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5)"
Avatar billede puppetmaster Nybegynder
26. august 2005 - 10:54 #13
Jeg kan i hvert fald se at fejlen opstår i delen efter = tegnet
(xlsheet.Cells(j, i + 1).formula = "=A1+B1") virker nemlig fint.
Avatar billede madschristensen Nybegynder
26. august 2005 - 10:55 #14
Inserting a Worksheet Function into a Cell
To insert a worksheet function into a cell, you specify the function as the value of the Formula property of the corresponding Range object. In the following example, the RAND worksheet function (which generates a random number) is assigned to the Formula property of range A1:B3 on Sheet1 in the active workbook.

Sub InsertFormula()
    Worksheets("Sheet1").Range("A1:B3").Formula = "=RAND()"
End Sub
Avatar billede puppetmaster Nybegynder
26. august 2005 - 10:57 #15
Worksheets("Sheet1").Range("A1:B3").Formula = "=RAND()"
virker også fint.....hmmm....
Avatar billede mugs Novice
26. august 2005 - 10:57 #16
Og du er sikker på, at formlen er korrekt?
Avatar billede mugs Novice
26. august 2005 - 10:59 #17
Prøv at indsætte formlen direkte i Excel og se hvad der sker.
Avatar billede sjap Praktikant
26. august 2005 - 11:00 #18
Mangler der ikke en slutparentes ) ?
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:01 #19
formlen virker fint
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:02 #20
Denne er checket og formlen virker, koden i Access går bare i fejl alligevel...

xlsheet.Cells(j, i + 1) = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5))"
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:04 #21
Hvis jeg fjerner = fra formlen, så skrives der
VÆRDI(($L$5)&TIME($I5)&MINUT($I5))
i cellen
Hvis jeg så sætter et = foran formlen i cellen, regner den den korrekte værdi ud. :( :( :(
Avatar billede mugs Novice
26. august 2005 - 11:06 #22
xlsheet.Cells(j, i + 1).Formula = "=VÆRDI(($L$5)&TIME($I5)&MINUT($I5))"
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:11 #23
Heller ikke, det gør stadig ingen forskel m/u .Formula
Avatar billede madschristensen Nybegynder
26. august 2005 - 11:13 #24
Prøv med
.FormulaR1C1
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:16 #25
Heller ikke, mads.
Men jeg kan da sige så meget at denne også fejler!

xlsheet.Cells(j, i + 1).Formula = "=TIME(I5)"
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:17 #26
HMMM!!!!
Udtrykket
xlsheet.Cells(j, i + 1).Formula = "=HOUR(I5)"
virker tilgengæld!!!!!
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:17 #27
Så nu er jeg i det mindste på rette spor! :)
Avatar billede sjap Praktikant
26. august 2005 - 11:20 #28
xlsheet.Cells(j, i + 1).Formula = "=VALUE(($L$5)&HOUR($I5)&MINUTE($I5))"
Avatar billede sjap Praktikant
26. august 2005 - 11:20 #29
OK, du var der jo allerede selv ;0)
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:22 #30
Så har jeg en stump der VIRKER!
xlsheet.Cells(j, i + 1).Formula = "=VALUE(($L$" & j & ")&HOUR($I" & j & ")&MINUTE($I" & j & "))"
Takker for hjælpen allesammen, læg et svar, så I kan få nogle point.
Avatar billede madschristensen Nybegynder
26. august 2005 - 11:23 #31
svar ;O)
Avatar billede sjap Praktikant
26. august 2005 - 11:25 #32
Bare hold mig udenfor, min indsats var ret begrænset ;0)
Avatar billede puppetmaster Nybegynder
26. august 2005 - 11:27 #33
Well, du lå faktisk inde med den korrekte løsning, sjap.... :)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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