Avatar billede tinabymor Nybegynder
13. august 2000 - 23:14 Der er 13 kommentarer og
1 løsning

Udregning i Excel

Nu orker jeg ikke at prøve mere.
Please, hjælp mig !!!!
\"Opgaven\" er som følger:

Når en bestemt formular åbnes, skal en tabel (som ikke har noget med formularen at gøre) sendes over i et Excelark. Desuden skal indholdet fra 2 tekstbokse sendes over i hver sin celle i Excelarket, efter de er opdateret i formularen.
Excelarket er nødt til at være et bestemt et, da det skal indeholde en temmelig lang formel (HVIS + VOPSLAG),for at udføre den beregning, der skal bruges, med mindre man kan skrive den funktion i VB, sammen med alt det andet.
Når resultatet er regnet ud i Excel, skal det overføres til en tekstboks i formularen.
Jeg har forsøgt med både object og DDE, men nu opgiver jeg altså.
Fortæl venligst også, hvor \"tingene\" skal skrives/laves.
På forhånd tak for jeres indsats.
P.S. Jeg er kun på nettet, når jeg er på arbejde, så der kan ske at gå op til 5 dage, inden jeg ser jeres svar. Sorry!
Avatar billede driis Nybegynder
13. august 2000 - 23:26 #1
Jeg tror godt, udregningen kan laves i VB, så det ikke er nødvendigt at overføre til Excel. Hvis du skriver formlen fra Excel her, skal jeg se om jeg kan lave et stykke kode, der kan udføre tricket. Skriv også, hvilke felter/tabelværdier, der skal bruges i beregningen.
Avatar billede poulh Nybegynder
14. august 2000 - 11:33 #2
Hvis du sender din Db. Evt. uden data så skal jeg lave et løsnings foreslag til dig som sender data over i  regnearket.

phnielsen@jubiipost.dk
Avatar billede moses Praktikant
14. august 2000 - 12:24 #3
>>poulh
Det er synd at sende det hele til Excel og tilbage igen.
Alt muligt mærkeligt kan regnes ud i VB.

Avatar billede ras2000 Nybegynder
14. august 2000 - 15:27 #4
Been there! Jeg er enig med de andre at det er synd at sende det hele frem og tilbage. Men af og til kan det være meget rart at få fat i Excel, for eksempel til grafer. Her er noget kode jeg brugte. Jeg havde dog bøvl med at lukke min computer bagefter, så den er vist ikke bugfree:
Option Compare Database
Option Explicit

\' Erklær de nødvendige API-rutiner:
Declare Function FindWindow Lib \"user32\" Alias _
\"FindWindowA\" (ByVal lpClassName As String, _
                    ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib \"user32\" Alias _
\"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, _
                    ByVal wParam As Long, _
                    ByVal lParam As Long) As Long
Function start()
GetExcel

End Function
Sub GetExcel()
Dim MyXL As Object
Dim ExcelWasNotRunning As Boolean
Dim a As Integer, b As Integer, rst As Recordset
On Error Resume Next

Set rst = henttabel
Set MyXL = GetObject(, \"Excel.Application\")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear  \' Nulstil objektet Err, hvis fejlen opstod.
DetectExcel
Set MyXL = GetObject(\"q:\\data\\lvp\\må ikke slettes.xls\")
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True

MyXL.sheets(\"ark1\").cells(1, 2).Value = Forms!indtastning!et
Avatar billede tinabymor Nybegynder
14. august 2000 - 18:47 #5
At undgå Excel og lave det hele i VB lyder meget tiltalende, da det meget gerne må ske, uden at brugeren opdager noget, så her kommer lidt yderligere oplysninger.
De 2 tekstbokse, som iflg. ovenstående skulle overføres til Excel indeholder en \"Sværhedsgrad\" og en \"Placering\". Tabellen er nedenstående og er lavet sådan i Access.
Sværheds-              Placering
grad      1    2    3    4    5    øvr.
1          5    4    3    2    1      0
2        12    10    8    6    4      2
3        18    15    12    9    6      3
4        24    20    16    12    8      4
5        30    25    20    15    10      5
6        36    30    24    18    12      6

Hvis \"Sværhedsgrad\" er 4 og \"Placering\" er 3 = 16 point, som så skal vises i en tekstboks i formularen og derved gemmes i den underliggende tabel.
Håber dette kan få nogen til at komme med løsningen.
Hilsen tinabymor. 


Avatar billede driis Nybegynder
14. august 2000 - 20:28 #6
Det kan sagtens lade sig gøre:

1) Læs tabellen over i et VB - array; det kan du bare gøre med noget simpel kode, der tager dataene fra tabellen og smider dem over i arrayet.
2) Nu kan du udlæse antal point direkte fra arrayet.

Altså noget i retning af:
Dim Tabel(6, 6) As Integer

Så udfører du noget kode, der læser indholdet af tabellen over i Arrayet. Hvis så Sværhedsgrad og Placering er et tal mellem 1 og 6 skriver du således for at tildele værdien til en tekstboks i formularen:

Form.TekstBox.Text=Str(Tabel(Sværhedsgrad,Placering))
Avatar billede tinabymor Nybegynder
14. august 2000 - 22:35 #7
Til driis
Det lyder vældig smart, men kan jeg få dig til at specificere det lidt nærmere, for jeg er stadig nybegynder m.h.t. VB.
Hvis du kan skrive programmeringen helt ud og helst også fortælle, hvor det skal skrives, så bliver du \"dagens mand i skysovs\"
Avatar billede moses Praktikant
15. august 2000 - 09:40 #8
Du laver en tabel med 3 felter og indtaster nedenstående værdier:

Svær    Plads    Point
1    1    5
1    2    4
1    3    3
1    4    2
1    5    1
2    1    12
2    2    10
2    3    8
2    4    6
2    5    4
3    1    18
3    2    15
3    3    12
3    4    9
3    5    6
4    1    24
4    2    20
4    3    16
4    4    12
4    5    8
5    1    30
5    2    25
5    3    20
5    4    15
5    5    10
6    1    36
6    2    30
6    3    24
6    4    18
6    5    12
1    6    0
2    6    2
3    6    3
4    6    4
5    6    5
6    6    6

Dernæst laver du en query med følgende SQL sætning i:

SELECT Table1.Point FROM Table1 WHERE (((Table1.Svær)=[Sværhedsgrad]) AND ((Table1.Plads)=IIf([Placering]>6,6,[Placering])));

Når du kalder denne query og angiver Sværhedsgrad og placering, så får du det rigtige svar ud.

Avatar billede moses Praktikant
15. august 2000 - 09:40 #9
Undskyld, at tabellens tal er mast lidt sammen !
Avatar billede tinabymor Nybegynder
20. august 2000 - 15:16 #10
Det er lige ved at fungere.
Jeg har lavet SQL-sætningen om til SELECT Table1.Point FROM Table1 WHERE (((Table1.Svær)=Forms![MyForm]![Tekst1] AND ((Table1.Plads)=IIf([Placering]>6,6,Forms![MyForm]![Tekst2])));
Sålænge placeringen er 6 eller derunder, så virker det perfekt, men når placeringen bliver over 6, så returnerer den 0, istedet for at returnere pointene for en 6. plads.
Jeg troede IIf ville sørge for, at hente pointene for en 6. plads, når placeringen i Tekst2 var højere.
Be\' om lidt mere hjæp.
Avatar billede driis Nybegynder
20. august 2000 - 18:59 #11
Før du kører SQL sætningen kan du evt. udføre flg. VB kommando:

If Placering > 6 Then Let Placering = 6
Avatar billede moses Praktikant
21. august 2000 - 08:27 #12
Det virker også, som du ønsker, men du mangler nogle parenteser:

SELECT Table1.Point FROM Table1 WHERE (((Table1.Svær)=Forms![MyForm]![Tekst1]) AND ((Table1.Plads)=IIf([Placering]>6,6,Forms![MyForm]![Tekst2])));
Avatar billede moses Praktikant
21. august 2000 - 08:28 #13
HOV !!
Der var også en fejl i din formel. Den korrekte hedder:

SELECT Table1.Point FROM Table1 WHERE (((Table1.Svær)=Forms![MyForm]![Tekst1]) AND ((Table1.Plads)=IIf(Forms![MyForm]![Tekst2]>6,6,Forms![MyForm]![Tekst2]))); 


Avatar billede tinabymor Nybegynder
21. august 2000 - 11:38 #14
Tak til alle, der har forsøgt at hjælpe.
Det virker nu, med moses forslag.
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