Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketUserform

 Besvar Besvar Side  12>
Forfatter
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Emne: Userform
    Sendt: 11.Maj.2015 kl. 08:51
Hej
Jeg har et problem med denne userform1, den skal indsætte data i ark1.  Men den kommer med følgende fejl: Compile error: Sub or Function not defined.

uploads/1212/Bogføring.xlsm

 
Søren Hansen, anvender Excel 2007.
Til top



Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
Direkte link til dette indlæg Sendt: 11.Maj.2015 kl. 09:24
Du har lavet en stavefejl!

Du har skrevet 'RangeA' i stedet for 'Range' i makroen...

Du kan let finde sådanne fejl, hvis du vælger menu punktet 'Compile VBAProject' under 'Debug' menuen i VBA Editoren..
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 11.Maj.2015 kl. 13:54
Citat: EXCELGAARD EXCELGAARD skrev:

Du har lavet en stavefejl!

Du har skrevet 'RangeA' i stedet for 'Range' i makroen...

Du kan let finde sådanne fejl, hvis du vælger menu punktet 'Compile VBAProject' under 'Debug' menuen i VBA Editoren..


Ok, men selvom det er rettet kommer der en fejl. Se vedhæftet fil. uploads/1212/Bogføring_1.xlsm
Søren Hansen, anvender Excel 2007.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
Direkte link til dette indlæg Sendt: 11.Maj.2015 kl. 14:06
Øh, ja... selvfølgelig...

Du skriver:
Cells(NyRække, 5).Value = Konto.Value
...men, du har ingen tekstboks, der hedder 'Konto'.

Den tekstboks, hvor du indtaster konto nummeret hedder 'TextBox1', så enten skal du omdøbe din tekstboks til at hedde 'Konto', eller også skal du ændre din kode til at benytte 'TextBox1' i stedet:
Cells(NyRække, 5).Value = TextBox1.Value
Og, det samme med dine øvrige kontrolfelter i din UserForm, for øvrigt.
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 11.Maj.2015 kl. 14:18
Citat: EXCELGAARD EXCELGAARD skrev:

Øh, ja... selvfølgelig...

Du skriver:
Cells(NyRække, 5).Value = Konto.Value
...men, du har ingen tekstboks, der hedder 'Konto'.

Den tekstboks, hvor du indtaster konto nummeret hedder 'TextBox1', så enten skal du omdøbe din tekstboks til at hedde 'Konto', eller også skal du ændre din kode til at benytte 'TextBox1' i stedet:
Cells(NyRække, 5).Value = TextBox1.Value
Og, det samme med dine øvrige kontrolfelter i din UserForm, for øvrigt.


Tak, nu faldt tiøren.

Søren Hansen, anvender Excel 2007.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
Direkte link til dette indlæg Sendt: 11.Maj.2015 kl. 14:22
Den faldt vist i 1-ører, hva'?  LOL

Godt, du fik det til at virke Thumbs Up
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 13.Maj.2015 kl. 08:23
Jo, nu går det fremad, men hvis jeg får indtastet en ny post og finder udaf at en tidligere skal slettes, hvad skal der så stå i koden?
Søren Hansen, anvender Excel 2007.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
Direkte link til dette indlæg Sendt: 13.Maj.2015 kl. 10:26
Citat: Soeren49 Soeren49 skrev:

hvis jeg får indtastet en ny post og finder ud af at en tidligere skal slettes, hvad skal der så stå i koden?
Det må du forklare lidt nærmere???
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 13.Maj.2015 kl. 15:16
Citat: EXCELGAARD EXCELGAARD skrev:

Citat: Soeren49 Soeren49 skrev:

hvis jeg får indtastet en ny post og finder ud af at en tidligere skal slettes, hvad skal der så stå i koden?
Det må du forklare lidt nærmere???

Hvis jeg sletter i en række længere oppe, vil excel ikke efterfølgende indsætte en ny række.

Et andet spørgsmål er hvad er koden til at resætte userform, når man har indtastet en post og trykket ok, så vil jeg gerne have rydet felterne så de er klar til en ny post.

Søren Hansen, anvender Excel 2007.
Til top
froksen Se dropdown
Sølv bruger
Sølv bruger


Medlem: 21.Maj.2011
Land: DK
Status: Offline
Point: 196
Direkte link til dette indlæg Sendt: 14.Maj.2015 kl. 10:14
Hej Søren

Til den første del du spørger om. Kunne du da lægge en opdateret version af dit ark ud? Det kan måske gøre det lettere at fejlfinde.

Til den sidste del, om hvordan man nulstiller felterne. Det kan gøres på mange måder. Nogle foretrækker, at sætte felternes værdi til "blanke". Altså efter du har trykket "Tilføj", da sættes 
TextBox1.value="" 
TextBox2.value=""
osv....

Dette kan naturligvis også lægges ind i en subrotine :-)

Andre foretrækker, at "unloade" og derefter åbne UserFormen igen. Det kan f.eks. gøres ved at tilføje følgende subrotine i din UserForms-codebase
Sub LukOgAabenUserform()
    'Lukker UserFormen ned.
    Unload UserForm1

    'Åbner den op igen.
    UserForm1.Show
End Sub

Fordelen ved den første metode er, at den er hurtigere og lettere for dig at kontrollere hvilke formularfelter der rent faktisk skal nulstilles. Du har altså mere kontrol! Det er også lettere at fejlfinde :-)

Fordelen ved den anden metode er, at den er let og ALT vil blive nulstillet. Den fungere altså lidt ligesom, at du har lukket userformen ned og startet den op igen. 
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 14.Maj.2015 kl. 19:51
Citat: froksen froksen skrev:

Hej Søren

Til den første del du spørger om. Kunne du da lægge en opdateret version af dit ark ud? Det kan måske gøre det lettere at fejlfinde.

Til den sidste del, om hvordan man nulstiller felterne. Det kan gøres på mange måder. Nogle foretrækker, at sætte felternes værdi til "blanke". Altså efter du har trykket "Tilføj", da sættes 
TextBox1.value="" 
TextBox2.value=""
osv....

Dette kan naturligvis også lægges ind i en subrotine :-)

Andre foretrækker, at "unloade" og derefter åbne UserFormen igen. Det kan f.eks. gøres ved at tilføje følgende subrotine i din UserForms-codebase
Sub LukOgAabenUserform()
    'Lukker UserFormen ned.
    Unload UserForm1

    'Åbner den op igen.
    UserForm1.Show
End Sub

Fordelen ved den første metode er, at den er hurtigere og lettere for dig at kontrollere hvilke formularfelter der rent faktisk skal nulstilles. Du har altså mere kontrol! Det er også lettere at fejlfinde :-)

Fordelen ved den anden metode er, at den er let og ALT vil blive nulstillet. Den fungere altså lidt ligesom, at du har lukket userformen ned og startet den op igen. 

Hej
Den sidste version af filen er her: uploads/1212/Bogføring_2.xlsm. Hvordan laver du det som en subrutine?
 

Søren Hansen, anvender Excel 2007.
Til top
froksen Se dropdown
Sølv bruger
Sølv bruger


Medlem: 21.Maj.2011
Land: DK
Status: Offline
Point: 196
Direkte link til dette indlæg Sendt: 15.Maj.2015 kl. 08:18
Hej

Først og fremmest. En Subrutine eller Subroutine (som det vidst hedder rigtigt, min fejl :-)) er en af VBA´s måder at lave "metoder/funktioner" på. Det er altså groft sagt, alle de steder hvor du har skrevet:
Sub GørNoget

End Sub

"Sub" er en forkortelse af Subroutine :-)

Dernæst til dit problem. Jeg har forsøgt at løse dit problem ved at indføre en ID-kolonne. Denne kolonne _skal_ udfyldes, da det er her regnearket finder ud af hvad den næste frie celle er. Uanset hvad, siger min erfaring, at det altid er godt, at have et unikt ID på sine optegnelser. Hvis du engang skal lave en "søge" eller "opslagsfunktion", da er ID´et næsten uunværligt :-)

Jeg har ændret lidt i dine variabler og UserFormFeltnavne. Desuden har jeg fået din "Initialize" funktion til at virke :-) 

Koden i arket er her, men se også det vedhæftede ark. Håber det kan bruges.
'Subroutinen hedder altid UserForm_Initialize uanset hvad du har navnet userformen :-)
Private Sub UserForm_Initialize()
    'Tilføjer Kontonummerne til Comboxen
    With cmbKonto
        .AddItem ("1000")
        .AddItem ("1050")
    End With
    
    'Sætter Standardteksterne
    tbDato.Value = "dd-mm-åååå"
    tbTekst.Value = "Hvad er der købt!"
    tbUdgift.Value = ""
    tbIndtaegt.Value = ""
End Sub

Private Sub btnAfslut_Click()
'Afslutter UserFormen
Unload Me
End Sub

Private Sub cmbTilføj_Click()
    Dim NuvarrendeMaksId As Integer
    Dim NytId As Integer
    Dim NyCelle As Range

    'Aktiverer Hovedarket. "shHovedArk" er arkets kodenavn, som jeg har givet det. Det gør, at du kan ændre teksten/navnet på arket som brugeren ser uden at det påvirker koden. Smart :-)
    shHovedArk.Activate
    
    'Lidt tjek af data inden vi fortsætter
    If Not cmbKonto.ListIndex > -1 Then
        MsgBox "Du skal vælge en konto", vbOKOnly + vbCritical, "Fejl"
        Exit Sub
    End If
    
    If Not IsDate(tbDato.Value) Then
        MsgBox "Du skal skrive en gyldig dato. Format: dd-mm-åååå", vbOKOnly + vbCritical, "Fejl"
        Exit Sub
    End If
    
    If Not IsNumeric(tbIndtaegt.Value) Or Not IsNumeric(tbUdgift.Value) Then
        MsgBox "Indtægter og udgifter skal være tal", vbOKOnly + vbCritical, "Fejl"
        Exit Sub
    End If
    
    'Finder ud af hvad den nuværrende maksimale værdi af ID er.
    NuvarrendeMaksId = WorksheetFunction.Max(Range("A:A"))
    
    'Sætter det nye ID
    NytId = NuvarrendeMaksId + 1
    
    'Finder ud af hvad den næste frie celle er, hvor der skal stå ID.
    Set NyCelle = Range("A9999").End(xlUp).Offset(1, 0)
    
    'Skriver værdierne. Offset-Funktionen skal læses som. Tag cellen NyCelle, og gå 0-rækker til højre og hhv. 0,1,2,3,4,5 kolonner til højre.
    NyCelle.Offset(0, 0).Value = NytId
    NyCelle.Offset(0, 1).Value = cmbKonto.Value
    NyCelle.Offset(0, 2).Value = tbDato.Value
    NyCelle.Offset(0, 3).Value = tbTekst.Value
    NyCelle.Offset(0, 4).Value = tbUdgift.Value
    NyCelle.Offset(0, 5).Value = tbIndtaegt.Value
    
    'Til respons
    MsgBox "Tilføjet ny bon", vbOKOnly + vbInformation, "Tilføjet"
    
    'Gøres når alt overstående er gennemkørt
    NulstilAlleFelter
End Sub

Private Sub NulstilAlleFelter()
    cmbKonto.ListIndex = -1 ' Nulstiller comboboxen. Hvis sættes til 0, da vælges det første item i listen, 1 vælges det 2. item osv.

    'Nulstiller alle felter
    tbDato.Value = "dd-mm-åååå"
    tbTekst.Value = "Hvad er der købt!"
    tbUdgift.Value = ""
    tbIndtaegt.Value = ""
End Sub

Til top
froksen Se dropdown
Sølv bruger
Sølv bruger


Medlem: 21.Maj.2011
Land: DK
Status: Offline
Point: 196
Direkte link til dette indlæg Sendt: 18.Maj.2015 kl. 16:49
Fik du det til at virke? :-)
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 19.Maj.2015 kl. 09:06
Citat: froksen froksen skrev:

Fik du det til at virke? :-)

Ja, men jeg tænker på at udvide det se fil uploads/1212/Bogføring-ny.xlsm. Har du et bud på hvordan jeg får userform ændret sådan, at jeg kan vælge hvilken bank konto, der skal bogføres på?  Jeg har endvidere problemmer med denne formel =HVIS(ELLER(F4="0";E4="0");"";SUM(F4-E4)+G3). Saldo cellen skulle gerne være blank, hvis der ikke står noget i udgift eller indtægt celen.

Man kan jo godt stille spørgsmål til hvad jeg nu vil med sådan et ark, men det overordnet mål er at lave data udtræk i form af en privot tabel. Men det kommer senere.


Søren Hansen, anvender Excel 2007.
Til top
froksen Se dropdown
Sølv bruger
Sølv bruger


Medlem: 21.Maj.2011
Land: DK
Status: Offline
Point: 196
Direkte link til dette indlæg Sendt: 19.Maj.2015 kl. 17:50
Vedr. formlen, da har jeg fået det til at virke med følgende:
=HVIS(ELLER(IKKE(ER.TOM(F6));IKKE(ER.TOM(E6)));(F6-E6)+G5;"")

Hvis du vil have trukket dine data ud i en pivottabel efterfølgende, da skal du _ikke_ stille dine data op på den måde du har gjort. Det er vigtigt, at du opfatter dine indtastninger som data/registeringer, altså et sæt data pr. række - altså groft sagt ingen formatering/beregning (eller så lidt som muligt). 

Se evt. nemprogrammerings video om pivot: http://www.nemprogrammering.dk/Tutorials/excel/12-pivottabeller.php 
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 20.Maj.2015 kl. 16:22
Citat: froksen froksen skrev:

Vedr. formlen, da har jeg fået det til at virke med følgende:
=HVIS(ELLER(IKKE(ER.TOM(F6));IKKE(ER.TOM(E6)));(F6-E6)+G5;"")

Hvis du vil have trukket dine data ud i en pivottabel efterfølgende, da skal du _ikke_ stille dine data op på den måde du har gjort. Det er vigtigt, at du opfatter dine indtastninger som data/registeringer, altså et sæt data pr. række - altså groft sagt ingen formatering/beregning (eller så lidt som muligt). 

Se evt. nemprogrammerings video om pivot: http://www.nemprogrammering.dk/Tutorials/excel/12-pivottabeller.php 


Nu virker det med formlen. Er der andre måder man kan udtrække data på, end pivottabel?
Søren Hansen, anvender Excel 2007.
Til top
froksen Se dropdown
Sølv bruger
Sølv bruger


Medlem: 21.Maj.2011
Land: DK
Status: Offline
Point: 196
Direkte link til dette indlæg Sendt: 20.Maj.2015 kl. 19:45
Hej Søren

Det jeg mente var, at du bare skulle stille dine data op anderledes. Jeg har vedhæftet et lille eksempel. Jeg har dog ikke tilpasset formularen eller ligende, men bare så du kan se hvordan man kunne gøreuploads/271/Bogføring-ny_2.xlsm

Jeg har brugt et "beregnet felt" i pivotabellen for at finde saldoen, altså indtægt-udgift. Læs mere om beregnede felter: http://https://support.office.com/da-dk/article/Beregne-v%C3%A6rdier-i-en-pivottabel-11f41417-da80-435c-a5c6-b0185e59da77?ui=da-DK&rs=da-DK&ad=DK#__toc254345829

Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 20.Maj.2015 kl. 20:51
Citat: froksen froksen skrev:

Hej Søren

Det jeg mente var, at du bare skulle stille dine data op anderledes. Jeg har vedhæftet et lille eksempel. Jeg har dog ikke tilpasset formularen eller ligende, men bare så du kan se hvordan man kunne gøreuploads/271/Bogføring-ny_2.xlsm

Jeg har brugt et "beregnet felt" i pivotabellen for at finde saldoen, altså indtægt-udgift. Læs mere om beregnede felter: http://https://support.office.com/da-dk/article/Beregne-v%C3%A6rdier-i-en-pivottabel-11f41417-da80-435c-a5c6-b0185e59da77?ui=da-DK&rs=da-DK&ad=DK#__toc254345829


Ja, det giver da mening. Jeg prøver at ændre userform sådan at indtastningen bliver lettere.
Søren Hansen, anvender Excel 2007.
Til top
Soeren49 Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 14.Aug.2014
Land: Danmark
Status: Offline
Point: 105
Direkte link til dette indlæg Sendt: 21.Maj.2015 kl. 08:47
Kan man lave userform sådan at comBoxen (Konto) henter data fra et ark via lopslag? Dette ark kan evt. hedde kontoPlan. På dette ark skal der være 2 kolonner, foreksempel kan kolone A indeholde (1050) og kolonne B indeholder forklaring til værdien i celle/kolonne A.  KontoPlanen vil komme til at indeholde flere rækker end der er vis nedenstående.

Kontonr. Beskrivelse
1000 indtægt
1050 køb
Søren Hansen, anvender Excel 2007.
Til top
froksen Se dropdown
Sølv bruger
Sølv bruger


Medlem: 21.Maj.2011
Land: DK
Status: Offline
Point: 196
Direkte link til dette indlæg Sendt: 25.Maj.2015 kl. 13:02
Hej Søren

Det kan gøres på flere måder. Her er et forslag: uploads/271/Bogføring-ny_2_4.xlsm
Jeg har også tilpasset din "UserForm_Initialize" funktion, så den får alle kontonr. med der står i arket "kontoPlan"

Herunder koden
Private Function findKontonavn(kontonr As Long) As String
    Dim rng As Range
    
    'finder ud af hvor kontonr. står
    Set rng = Ark2.Range("A:A").Find(What:=kontonr, lookat:=xlWhole)
    
    'Tjekker om der rent faktisk blev fundet noget
    If Not rng Is Nothing Then
        'Retunerer værdien fra cellen ved siden af (altså beskrivelsen)
        findKontonavn = rng.Offset(0, 1).Value
    Else
        'Hvis der ikke bliver fundet noget
        MsgBox "Der blev ikke fundet nogen konto, med kontonr " & kontonr, vbOKOnly + vbCritical, "Ingen konto fundet"
        findKontonavn = vbNullString
        Exit Function
    End If
End Function

Private Sub cmbKonto_Change()
    'Sætter teksten til label.
    lblKontonavn.Caption = findKontonavn(cmbKonto.Value)
End Sub

Den nye "UserForm_Initialize"
'Subroutinen hedder altid UserForm_Initialize uanset hvad du har navnet userformen :-)
Private Sub UserForm_Initialize()
    Dim kontonr As Variant

    'Tilføjer Kontonummerne til Comboxen. Tilføjer alle de kontonr. som står i arket kontoPlan
    For Each kontonr In Ark2.Range("A2", Ark2.Range("A2").End(xlDown))
        cmbKonto.AddItem kontonr
    Next kontonr
    
    'Sætter Standardteksterne
    tbDato.Value = ""
    tbTekst.Value = "Hvad er der købt!"
    tbUdgift.Value = ""
    tbIndtaegt.Value = ""
End Sub
Til top
 Besvar Besvar Side  12>

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk