23. maj 2005 - 17:25Der er
38 kommentarer og 1 løsning
hjælp til løn program
Hej jeg har lavet et lille lønprogram i visual basic men mangler at oprette en lønseddel ud fra nogle data jeg har i en database. nogen der har et forslag til hvordan jeg nemmest kan oprette en lønseddel.
Hvis den skal gemmes som en fil, der senere skal kunne printes ud, så vil jeg foreslå at du simpelthen udskriver den som en html-fil. Så kan du relativt let sætte den op sådan at det ser pænt ud. Desuden kan lønseddelen efterfølgende udskrives via din foretrukne browser.
Hvis du ved hvordan man skriver til en tekst fil så skriver du simpelthen bare din html-kode på denne måde. Eller er problemet at du ikke er vildt meget inde i html?
lige nu skriver jeg til en word-fil men er det næsten det samme som at skrive til en html-fil. jeg har ikke arbejdet ret meget med html men det går nok må jo bare sætte mig mere ind i det.
Hvis du allerede ved hvordan du skriver til Word eller som html (om end det så kræver noget øvelse) så er jeg ikke helt sikker på at jeg har forstået hvad det er du egentlig spørger om?
jeg skriver til word det har jeg først lige fundet ud af at gøre. men vil gerne hvis det kunne gøres nemmere med excel foreksempel. men jeg prøver mig frem
jeg ville da gerne hvis det er muligt at skrive til excel istedet for. For så kan jeg sætte excel til at lave alt regne arbejdet istedet og så er det jo meget nemmere og der er ikke så meget der skal føres over som der er i word
Du bruger excel.application i stedet for word.application
fx. Indsæt værdien 100 i celle A1 :
Dim oExcelApp As Object Dim NyTekst As String Set oExcelApp = CreateObject("excel.Application") oExcelApp.Workbooks.Open ("F:\1.xls") NyTekst = "Ib Petersen" oExcelApp.Visible = True oExcelApp.range("A1").Value = 100 '... '... 'Og så hust at sæt dine objekter = nothing efter endt brug oExcelApp = nothing
oki men jeg vil have nogle bestemte felter i en database lagtsammen og resultatet skal overføres til excel.
eks. jeg har en textbox hvor jeg skriver et medarbejder nummer og og et felt hvor jeg skriver en dato hvor måneden starter og et felt hvor jeg skriver en dato hvor måneden slutter og så skal den gå ned i databasen og hente de tal der står i de felter hvor det Medarbejder nummer og de datoer der ligger fra og til de 2 indtastede datoer står foran og lægge dem sammen og så overføre resultatet til excel. Kan man det.?
Jeg har et felt der hedder Dato og et der hedder medarbejder nummer samt et felt der hedder indkørt i min database
og det ligger i Private Sub Form_Load() så databasen hele tiden er åben
Nielle jeg skal have excel til at lave hele regnestykket men jeg skal jo kun bruge nogle enkelte data fra hele tabellen og dem skal jeg have taget ud og lagt sammen inden jeg overføre det til excel
jeg har en tabel der hedder førernr og en der hedder indkørt samt en der hedder dato jeg skal have nogle beløb trukket ud af tabellen indkørt og det skal kun være dem med det førernr jeg har indtastet i feltet førernr i mit program og med de datoer der ligger fra og til de datoer jeg har skrevet i felterne fra og til.
Et sted i programmet bruger jeg denne sætning til at lægge hele tabellen kilometer sammen. denIndkort.rscomIndkort.Open "SELECT SUM(Kilometer) AS sumkm FROM Indkørt"
Så Det må være noget i stil med denIndkort.rscomIndkort.Open "SELECT sum(*) AS totalen FROM indkørt WHERE ..." men hvad skal der så stå efter WHERE
Nielle hvis du kan hjælpe mig er jeg selvfølgelig villig til at give dig nogle point for det.
Umiddelbart forstår jeg ikke hvorfor du nævner tabellerne "førernr" og "dato" (foruden tabellen "indkørt"). Er det ikke sådan at tabellen "indkørt" indeholder alle de data som du skal have trukket ud? Eller er der måske nogle relationer mellem "indkørt" og de to?
Det næste jeg gerne vil vide er hvordan du har defineret din "indkørt" tabel; Hvilke felter er der, og hvilke datatyper har de?
Undskyld det er mig der har formuleret mig forkert.
Jeg har en tabel der hedder indkørt og under den har jeg felterne Førernr, Dato og Indkørt. Det jeg så gerne vil er at ud fra det førernr og de to datoer jeg indtaster skal den kunne lægge de tal som er under Indkørt sammen men kun dem der passer til det intastede førernr og de datoer der ligger fra og til de intastede datoer.
Alle mine felter i databasen er datatypen tekst og jeg har felterne Førernr, Dato, Indkørt samt kilometer men skal kun bruge de 3 førstnævnte.
Indtastningsfelterne i programmet hedder txtFørernrlønseddel, txtfralønseddel samt txttillønseddel.
Du burde jo nok først overveje om dit dato-felt ikke skulle være af typen DATE. Det ville gøre noget nemmere.
Men eftersom at du nu har valgt at lave det som tekst, så skal jeg lige vide, hvordan du har valgt at skrive datoerne. Jeg gætter på formatet dd-mm-yyyy, men der er mange andre muligheder.
dato typen er dd-mm-yyyy og når det er nemmere med typen DATE har jeg ændret typen til DATE og valgt dd-mm-yyyy. Er det så ikke muligt at få programmet til at tjekke at der ikke står 00-00-0000 i feltet txtDatoindkørt lige nu tjekker jeg med en If sætning om der er intastet 8 tegn i feltet og hvis der ikke er, kommer den med en melding om at der ikke er intastet nogen dato i feltet.
Her er koden til min If sætning If A <> 8 Then MsgBox "Du har ikke indtastet nogen dato.", vbExclamation + vbOKOnly, "Indtast venligst en dato" txtDatoindkørt.SetFocus Exit Sub End If
Problemet med Access og danske datoformater er at Access internt bruger amerikansk datoformat: mm-dd-yyyy. Hvis du vil have samtlige poster for maj måned 2005, skal din SQL derfor se sådan her ud:
"SELECT * FROM indkørt WHERE #05-01-2005#<=dato AND dato<=#05-31-2005#"
(Læg i øvrigt mærke til at der er '#' tegn rundt om datoerne.)
Du skal derfor gøre en ekstraordinær indsats for at konvertere fra dit danske datoformat til det amerikanske før at du sammensætter din SQL-kommando.
Løsningen på dit problem kunne derfefter se nogenlunde sådan her ud:
"SELECT sum(indkørt) FROM indkørt WHERE #05-01-2005#<=dato AND dato<=#05-31-2005# AND førernr='Fører1234'"
- eller:
"SELECT sum(indkørt) FROM indkørt WHERE #05-01-2005#<=dato AND dato<=#05-31-2005# AND førernr=1234"
- alt efter om dit førernr er en tekst eller et tal.
Nu har jeg prøvet at skrive sådan "SELECT sum(Indkørt) as sumindkørt FROM Indkørt WHERE #05-01-2005#>=Dato AND Dato<=#05-31-2005# AND Førernr='1818'" og det virker men jeg vil gerne selv indtaste førernummeret og datoerne i de 3 felter txtFørernr, txtTillønseddel og txtFralønseddel i programmet har prøvet at skrive følgende denIndkort.rscomIndkort.Open "SELECT sum(Indkørt) as sumindkørt FROM Indkørt WHERE txtTillønseddel.Text>=Dato AND Dato<=txtFralønseddel.Text AND Førernr=txtFørernrlønseddel.Text" men det virker ikke så skriver den bare 0 fordi jeg siger If denIndkort.rscomIndkort.Fields("sumindkørt") > 0 Then Indkørt = denIndkort.rscomIndkort.Fields("sumindkørt") Else Indkørt = sumindkørt End If
har lige siddet og leget lidt med det der sker en fejl hvis jeg ændre førernummeret fra 1818 til 1630 der har jeg 2 som tilsammen skal give 6045 men programmet siger 12125 men hvis jeg bruger 1818 hvor jeg har 5 som skal give 12891 så siger den det rigtige kan du forklare mig hvad der går galt.
Fejlen sker også med førernr 1818 men har fundet fejlen.
når man skriver sådan WHERE #05-01-2005#>=Dato AND Dato<=#05-31-2005# så tager den både dem der ligger før datoen og efter datoen der er blevet angivet men hvorfor den gør det ved jeg ikke.
oki nu virker det ved ikke hvorfor jeg har vendt den ene forkert, men hvad skal jeg skrive når jeg vil bruge tekst boksene i programmet i stedet for de faste datoer. og er det muligt at få programmet til at vende datoerne fra dd-mm-yyyy til mm-dd-yyyy ved hjælp af en kode
Dim StartDatoDk As String = txtTillønseddel.Text Dim SlutDatoDk As String = txtFralønseddel.Text
Dim StartDatoUs As String = DateFormatDk2Us(StartDatoDk) Dim SlutDatoUs As String = DateFormatDk2Us(SlutDatoDk)
"SELECT sum(indkørt) FROM indkørt WHERE #" & StartDatoUs & "#<=dato AND dato<=#" & SlutDatoUs & "# AND førernr=" & txtFørernrlønseddel.Text
- sammen med denne funktion:
function DateFormatDk2Us(ByVal DateDk As String) Dim DateParts() As String = Split(DateDk, "-") DateFormatDk2Us = DatePars(1) & "-" & DatePars(0) & "-" & DatePars(2) end function
function DateFormatDk2Us(ByVal DateDk As String) Dim DateParts() As String = Split(DateDk, "-") DateFormatDk2Us = DateParts(1) & "-" & DateParts(0) & "-" & DateParts(2) end function
oki tak nu virker det som jeg gerne vil have det til har oprettet et spørgsmål på http://www.eksperten.dk/spm/621779 så kan du sende et svar så får du pointene. mange tak for hjælpen
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.