Hulp nodig!

Status
Niet open voor verdere reacties.

MacbookPro

Nieuwe gebruiker
Lid geworden
25 okt 2007
Berichten
4
Hallo iedereen,

Ik wil dus een klein programmaa'tje maken dat het volgende moet kunnen:

Ik heb 3 winkels en wil dus eigelijk een bedrag intikken, winkel kiezen en bewaren. Dit bewaren zou dan gebeuren in een excel sheet. De waarden van winkel 1 worden dan in kolom 1 geplaatst enzoverder...

Ik heb nu al een userform aangemaakt, maar hoe zeg ik nu dat als ik een winkel gekozen heb en op bewaar klik, dat deze waarde dan in een bepaalde kolom terecht komt?

Bedankt!
 
Maak een UserForm met de volgende componenten:
- een textveld "txtBedrag"
- een combobox "cboWinkel"
- een CommandButton "cmdOpslaan"

Maak in de sheet waarin je de gegevens wilt opslaan drie kolommen met - startend in A1 - de kolommen: "Blokker", "Hema" en "V&D".

Plak onderstaande code in de broncode:
Code:
Private Sub cmdOpslaan_Click()
    Dim row As Long
    Dim col As Long
    Dim myRange As Range
    
    'Find last cell with a value
    Set myRange = FindLastRow
    'Go one row deeper
    Set myRange = myRange.Offset(1, 0)
    'Set the amount in the correct column (cboWinkel.ListIndex + 1)
    myRange.Cells(1, cboWinkel.ListIndex + 1) = Val(txtBedrag)
    
End Sub

Private Sub UserForm_Initialize()
    cboWinkel.Style = fmStyleDropDownList

    'Add three shops in the same order as in the worksheet
    cboWinkel.AddItem "Blokker"
    cboWinkel.AddItem "Hema"
    cboWinkel.AddItem "V&D"
End Sub

Function FindLastRow() As Range
    Dim LastRow As Long
    If WorksheetFunction.CountA(Cells) > 0 Then
        'Search for any entry, by searching backwards by Rows.
        LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
        Set FindLastRow = Range("A" & LastRow & ":C" & LastRow)
    Else
        Set FindLastRow = Nothing
    End If
End Function

Wat de code doet is eerst de laatste rij bepalen via de functie 'FindLastRow'. Daarna gaan we 1 regel lager, want je wilt iets toevoegen en niet de laatste rij overschrijven.
Als je vervolgens dezelfde volgorde aanhoudt in de kolommen als in je combobox, dan kan je 'cboWinkel.listindex' gebruiken om de kolom te bepalen:
- kolom 1 (Blokker) = listindex 0
- kolom 2 (Hema) = listindex 1
- kolom 3 (V&D) = listindex 2

Succes!
 
Dankjewel!

Dit werkt, maar er is echter nog 1 probleem. Als ik een waarde heb ingegeven bij bv blokker, en later een nieuwe waarde bij Hema, dan wil ik dat de waarde van hema op de eerste lijn en niet op de lijn onder de voorgaande waarde tevoorschijn komt.
 
hoe bedoel je dat? Moeten de waarden dan opgeteld worden o.i.d.?
 
Neen, stel ik voor het programma uit via jouw code.

Ik kies blokker en geef 55 in. Dan verschijnt 55 in A2. Dit is goed
Nu kies ik hema en geef ook 55 in. Dan verschijnt 55 in B3. Maar ik wil dit in B2. Ik wil geen open cellen.

Bedankt voor je reacties trouwens!
 
Dat is zelfs iets eenvoudiger...

Code:
Private Sub cmdOpslaan_Click()
    Dim col As Long
    Dim myRange As Range
    
    'Find last cell with a value
    col = cboWinkel.ListIndex + 1
    Set myRange = FindLastRow(col)
    'Go one row deeper
    Set myRange = myRange.Offset(1, 0)
    'Set the amount in the correct column (cboWinkel.ListIndex + 1)
    myRange.Value = Val(txtBedrag)
    myRange.Select
    
End Sub

Private Sub UserForm_Initialize()
    cboWinkel.Style = fmStyleDropDownList

    'Add three shops in the same order as in the worksheet
    cboWinkel.AddItem "Blokker"
    cboWinkel.AddItem "Hema"
    cboWinkel.AddItem "V&D"
End Sub

Function FindLastRow(ByVal col As Integer) As Range
    Dim LastRow As Long
    Dim myRange As Range
    
    Set myRange = Cells(65536, col)
    Set FindLastRow = myRange.End(xlUp)
End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan