Avatar billede jan_amdi Nybegynder
20. juni 2007 - 15:17 Der er 8 kommentarer

VBA - Excelberegninger fra Word

Hejsa

Jeg skal lave nogle større beregniner i Word, hvor jeg bruger en del af de funktioner der ligger i Excel.
Min første tanke er, at åbne Excel fra Word, oprette beregningerne i Excel og så hente resultatet over i Word.
Men findes der ikke en bedre måde at gøre det på?

Med venlig hilsen
Jan Amdi
Avatar billede supertekst Ekspert
20. juni 2007 - 17:12 #1
Jo - der kan oprettes et Excel-objekt, der kan forsynes med data, formler m.v. via VBA - resultater kan returneres til Word.
Avatar billede jan_amdi Nybegynder
21. juni 2007 - 08:32 #2
Det er så også det jeg har gjort og det virker i bund og grund perfekt, men det er samtidig lidt tungt, da jeg åbner og lukker Excel flere gange.
Jeg tænkte mere hen i retning af, om der evt. fantes en slags beregningsmotor, som jeg blot kunne sætte en reference til og dermed havde en "Excel Light"?
Avatar billede supertekst Ekspert
21. juni 2007 - 08:46 #3
Prøv evt. at vis den kode, som du har anvendt.
Avatar billede jan_amdi Nybegynder
21. juni 2007 - 09:27 #4
Dette er koden jeg benytter mig af.
Når brugeren har dannet sit brev - og i den forbindelse kaldt "Calculate" med en formel - vil jeg jo gerne rydde op, og lukker derfor pænt Excel igen.
Næste gang der så skal laves et brev, skal jeg så åbne Excel på ny - og det er den process der virker lidt tung.
Men jeg er heller ikke meget for, blot at lade Excel være Excel og ikke rydde op - eller er manuel oprydning bare et levn fra gamle dage? :-)

Function Calculate(ByVal sFormular As String) As Double
On Error GoTo Calculate_ERROR

  Xls.Cells(1, 1).Formula = "=" & sFormular
 
  Calculate = Xls.Cells(1, 1).Value

  Exit Function

Calculate_ERROR:

  Select Case Err.Number
    Case ERR_LEAVE_PROGRAM
      Err.Raise ERR_LEAVE_PROGRAM
    Case Else
      ShowMessageBox 1210, sFormular
      Err.Raise ERR_CALC_ERROR
  End Select

End Function


Function Xls() As Excel.Worksheet
On Error GoTo Xls_ERROR

  If oWkSheet Is Nothing Then
    Set oExcel = GetObject(, "Excel.Application")
    Set oWkBook = oExcel.Workbooks.Add
    Set oWkSheet = oWkBook.ActiveSheet
  End If
 
  Set Xls = oWkSheet
 
  Exit Function
 
Xls_ERROR:

  Select Case Err.Number
    Case 429
      Set oExcel = CreateObject("Excel.Application")
      Resume Next
    Case Else
      ShowMessageBox 1220, Err.Number, Err.Description
      Err.Raise ERR_LEAVE_PROGRAM
  End Select

End Function
Avatar billede supertekst Ekspert
21. juni 2007 - 10:20 #5
Hvor komplekse er beregningerne, som udføres i Excel?
Avatar billede jan_amdi Nybegynder
21. juni 2007 - 10:41 #6
Beregningerne vil typisk være nogle procentberegninger, beregning af gebyr samt ned- og oprundinger af beløb, før videre beregning.
Beregninger jeg tidligere har hardcodet i VBA, men da den slags beregninger altid ændre sig, så vil jeg nu lægge det ud til superbrugerne.
De skal så selv danne formlerne, som derefter kan bruges til pensionsberegninger i Wordbreve.
For at teste syntaksen i formlerne, og senere beregne dem rigtig, smider jeg dem lige over i Excel og hiver resultatet tilbage.
Der findes godt nok en selection.calculate i Word, men den kan ikke dække behovet.
Avatar billede kabbak Professor
27. juni 2007 - 19:21 #7
Hvis du i Word laver reference til Microsoft Excel xx.x Object library, skulle koden kunne bruges.

Laver en tekstboks og en  kommandoknap i word, kan denne måske bruges, formlen skrives i tekstboksen og resultatet kommer tilbege der.

Denne i et modul
Function Calculate(ByVal sFormular As String) As Double
    On Error GoTo Calculate_ERROR
    Calculate = Evaluate(sFormular)
    Exit Function

Calculate_ERROR:

    Select Case Err.Number
    Case ERR_LEAVE_PROGRAM
        Err.Raise ERR_LEAVE_PROGRAM
    Case Else
        MsgBox sFormular
        Err.Raise ERR_CALC_ERROR
    End Select

End Function


og denne  under kommandoknappen

Private Sub CommandButton1_Click()
TextBox1 = Calculate(TextBox1)
End Sub
Avatar billede kabbak Professor
27. juni 2007 - 19:36 #8
Du kan måske lave den så kort her

Private Sub CommandButton1_Click()
TextBox1 = Evaluate(TextBox1)
End Sub
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
Kurser inden for grundlæggende programmering

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