Avatar billede gp Nybegynder
03. november 2004 - 23:00 Der er 15 kommentarer og
1 løsning

Vise værdi af formel i VBA

Jeg er gået i stå.

Hvordan for jeg værdien(me.Tal) af indholdet(me.Formel) af et felt til at blive til værdi som jeg kan skrive til at andet felt(me.Antal)?

A=10
B=55
Ex. me.Formel felt indhold =(A+B)
me.Antal = me.Formel, så giver den fejl fordi =(A+B) er ikke et tal.

Hvad gør jeg galt?
Avatar billede gp Nybegynder
03. november 2004 - 23:22 #1
Jeg får fejlen "Type mismatch" . Fejlen måvære at jeg får min formel ser ud således "=(A+B)" og ikke =(A+B)
Avatar billede bbkdk Seniormester
04. november 2004 - 08:06 #2
Hej qp !!!
Hvis jeg har forstået det korrekt har du tal fra en tabel, der skal summeres. Summen skal herefter anvendes videre i forløbet.
Mangler du så ikke at erklære variablen Formel (der så vidt jeg kan se indeholder summen af tallene) således:
Dim Formel as integer
Avatar billede gp Nybegynder
04. november 2004 - 08:53 #3
Jeg har min formel i me.formel (ex. =(A+B)  )
Værdien af formelen skal indsættes i me.Antal. Jeg har styr på A og B. Mit problem er at den ikke regner formlen ud med indsætter =(A+B), når jeg kigger på min VBA kode ser der således ud  "=(A+B)" og ikke =(A+B)

HVORFOR?
Avatar billede supertekst Ekspert
04. november 2004 - 11:29 #4
Så vidt jeg forstår - har du i et tekstfelt i tabellen - et udtryk, der repræsentere en formel. Som det er nævnt i tidligere indlæg er dette en TEKST og IKKE et formeludtryk.

Jeg har på basis af en tilfældig tabel, der indeholder et par tal-felter - dannet en formular. Indsat en knap - der får en hændelsesegenskab v/klik - således at beregningen udføres:

Koden er således:

Option Compare Database
Option Explicit
Dim sum, db, tabx
Private Sub Kommandoknap12_Click()
Dim a, b, p, x As Field, y As Field
    Set db = CurrentDb
    Set tabx = db.openrecordset("booking")    'åbn den underliggende tabel (Eksempel)

    p = InStr(Me.formel, "+")
    If p > 0 Then
        a = Mid(Me.formel, 1, p - 1)          'henter og adskiller formel-teksten
        b = Mid(Me.formel, p + 1)
       
        sum = tabx.Fields(a) + tabx.Fields(b) 'anvender feltnavnene på tabellen
    End If
   
    Me.Tekst13 = sum
End Sub

Det skal dog anføres - at jeg i koden IKKE har søgt frem til den aktuelle post - men dette kan naturligvis gøres.

I hvilket regi, har du VBA-koden liggende - i en formular eller ?

Hvorfor har du formlen liggende som et felt - skal felterne kunne ændres - eller hvad - hvis jeg ellers har forstået situationen rigtigt.

MVH
Avatar billede bbkdk Seniormester
04. november 2004 - 12:18 #5
ER du sikker på, at alle de involverede felter er sat til at være tal - anførselstegn omkring formler tyder på, at Access anser feltet for at indeholde tal og ikke tekst
Avatar billede bbkdk Seniormester
04. november 2004 - 12:18 #6
Omvendt - tekst i stedet for tal
Avatar billede fdata Forsker
04. november 2004 - 18:51 #7
Har du prøvet med Eval, f.eks.:

  Const a = 10
  Const b = 55
  Dim f As String
 
  f = "a+b"
  f = Replace(f, "a", a)
  f = Replace(f, "b", b)
  MsgBox Eval(f)
Avatar billede gp Nybegynder
04. november 2004 - 18:58 #8
Jeg køre denne function, det er en del af den
...
If MyRe.RecordCount > 0 Then
    KolCount = 1
 
    Do While Not MyRe.EOF
        MyRe.Edit
        If IsNull(MyRe!Formel) Then GoTo Next1
        testny = " & MyRe!FORMEL & " ' DET ER HER DET GÅR GALT VÆRDIEN AF MyRe!FORMEL kommer i "" så er det ikke et tal og jeg får fejlen "Type mismatch"
        MyRe!Test = testny
Next1:
        MyRe.Update
        KolCount = KolCount + 1
        SendKeys "{f9}"
       
        MyRe.MoveNext
    Loop
End If
...
Avatar billede gp Nybegynder
04. november 2004 - 19:13 #9
Jeg vil jo bare fjerne de " " der kommer omkring mit tal som er værdien af min formel.
Avatar billede fdata Forsker
04. november 2004 - 19:48 #10
Hvorfor afviser du så hurtigt?
Metoden virker jo. I din notation ville den hedde:
  Dim f As String
  A=10
  B=55
  ' Ex. Me.Formel felt indhold =(A+B)
 
  f = Me.Formel
  f = Replace(f, "a", a)
  f = Replace(f, "b", b)
  Me.Antal = Eval(f)
Avatar billede fdata Forsker
04. november 2004 - 19:49 #11
... måske kan du undvære "=" i formlen
Avatar billede gp Nybegynder
04. november 2004 - 20:00 #12
Nu har jeg jo forskellige formler til hver post, hvad gør jeg så?
Avatar billede gp Nybegynder
04. november 2004 - 20:04 #13
Hallo fdata,

Jeg gir mig der virker jo... Opret et svar så giver jeg med fornøjelse Point
Avatar billede fdata Forsker
04. november 2004 - 21:33 #14
Glæder mig, du fik det til at spille.
Avatar billede gp Nybegynder
04. november 2004 - 22:37 #15
Hvad gør jeg med kommatal?
Avatar billede fdata Forsker
05. november 2004 - 16:33 #16
Du indsætter bare en linie med
  f = Replace(f, ",", ".")
inden du evaluerer
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