• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Formulier Excel

Status
Niet open voor verdere reacties.

tur21

Nieuwe gebruiker
Lid geworden
20 jan 2021
Berichten
4
Goedemorgen allemaal,

Ik hoop dat jullie mij misschien kunnen helpen. Ik heb in Excel een formulier gemaakt voor het verwerken van gedane werkzaamheden op verschillende locaties. De gegevens die in het formulier ingevuld worden, komen op een totaal overzicht. Van alle locaties heb ik verschillende tabbladen gemaakt. Is het ook mogelijk om op basis van de locatie die geselecteerd wordt, het formulier te verwerken op een bepaald tabblad? Nu heb ik in de code staan:

If ValidateForm = True Then

With ThisWorkbook.Sheets("Overzicht gedane werkzaamheden")

Ik zoek eigenlijk zoiets als: If txtLocation = "....." Then With ThisWorkbook.Sheets
: If txtLocation = "....." Then With ThisWorkook.Sheets

Is zoiets realiseerbaar, hebben jullie een betere tip, is er iemand die mij kan helpen?

Ik hoor het graag, alvast bedankt!
 
Zoiets misschien?

Code:
With ThisWorkbook.Sheets(txtLocation.Value)

En misschien een betere optie:
zet alle gegevens in 1 tabel, en niet op verschillende werkbladen.
1 tabel is beter beheersbaar, en bovendien handiger. Met filters krijg je dan dezelfde info als de info die je nu op verschillende werkbladen wil stockeren.
 
Ik heb nu het volgende in VBA:

Application.ScreenUpdating = False

Dim iRow As Long

iRow = Sheets("Overzicht gedane werkzaamheden").Range("A1048576").End(xlUp).Row + 1

If ValidateForm = True Then

With ThisWorkbook.Sheets(txtLocation.Value)

If txtLocation.Value = "abc" Then ThisWorkbook.Sheets = "abc"
ElseIf txtLocation.Value = "def" Then This Workbook.Sheets = "def"

.Range("A" & iRow).Value = iRow - 1
.Range("B" & iRow).Value = txtDatu.Value
.Range("C" & iRow).Value = cmbLocation.Value
.Range("D" & iRow).Value = cmbWerkzaamheden.Text
.Range("E" & iRow).Value = txtWerkzaamheden.Value
.Range("F" & iRow).Value = txtUren.Value
.Range("G" & iRow).Value = txtUurtarief.Value

Echter krijg ik telkens foutmeldingen. Als ik het formulier naar 1 tabblad laat schrijven, werkt hij feilloos. Maar het zou echt fijn zijn als VBA op basis van de locatie de ingevulde gegevens op het juiste tabblad neerzet. Wat doe ik verkeerd?

Wat betreft jouw voorstel voor een betere optie:
Het gaat om werkzaamheden die op meer dan 50 locaties worden uitgevoerd. Er is 1 tabblad met een totaaloverzicht. Maar het kan zijn dat als een locatie opvalt, je wilt kijken wat daar gebeurd is. Daarom zijn er zoveel tabbladen.
Ik hoop dat ik zo een beetje het belang van alle tabbladen en de bedoeling van het bestand heb kunnen uitleggen. Mochten er verbetervoorstellen zijn, hoor ik ze graag:)
 
Ik heb het niet getest, want dan zou ik zelf je bestand moeten namaken.
Maar volgens mij staan er enkele overbodige regels in, en ontbreekt End With.

Overigens zal Excel zelf wel aanduiden waar het fout loopt.

Code:
Application.ScreenUpdating = False

Dim iRow As Long

iRow = Sheets("Overzicht gedane werkzaamheden").Range("A1048576").End(xlUp).Row + 1

If ValidateForm = True Then

With ThisWorkbook.Sheets(txtLocation.Value)

'If txtLocation.Value = "abc" Then ThisWorkbook.Sheets = "abc"   deze codes zijn nutteloos... dus als opmerking gezet.
'ElseIf txtLocation.Value = "def" Then This Workbook.Sheets = "def"

.Range("A" & iRow).Value = iRow - 1
.Range("B" & iRow).Value = txtDatu.Value
.Range("C" & iRow).Value = cmbLocation.Value
.Range("D" & iRow).Value = cmbWerkzaamheden.Text
.Range("E" & iRow).Value = txtWerkzaamheden.Value
.Range("F" & iRow).Value = txtUren.Value
.Range("G" & iRow).Value = txtUurtarief.Value
End With

Je verklaring waarom het op verschillende werkbladen moet is me nog steeds niet duidelijk, maar goed, het is ook niet aan mij om te zeggen dat het anders moet, terwijl ik jouw bestand noch jouw situatie ken.
 
Beste Luc Heyndrickx,

Ik heb voor de zekerheid even het formulier in de bijlage toegevoegd. Ik heb hem wel even geanonimiseerd, daarom kan het zijn dat hij er nu amateuristisch uitziet. Maar als je een oplossing weet ben ik geholpen. Als locatie A wordt geselecteerd in het formulier, wil ik de ingevulde gegevens van het formulier in tabblad A hebben, als B wordt geselecteerd, wil ik de ingevulde gegevens in tabblad B hebben.

Met de code die jij gegeven hebt, lukt het mij niet. Het kan zijn dat ik iets heel knulligs fout doe hoor, dit is voor mij ook nieuw. Ik hoop echt dat je mij wilt helpen en kunt helpen:)
 

Bijlagen

Deze code. Je zal het wel wat moeten bijschaven.

Code:
Private Sub cmdSave_Click()

    Application.ScreenUpdating = False
    
    Dim iRow As Long
    
    iRow = Sheets("Overzicht gedane werkzaamheden").Range("A1048576").End(xlUp).Row + 1
    
    If ValidateForm = True Then
    
        With ThisWorkbook.Sheets("Overzicht gedane werkzaamheden")
    
            .Range("A" & iRow).Value = iRow - 1
            .Range("B" & iRow).Value = txtDatu.Value
            .Range("C" & iRow).Value = cmbLocation.Value
            .Range("D" & iRow).Value = cmbWerkzaamheden.Text
            .Range("E" & iRow).Value = txtWerkzaamheden.Value
            .Range("F" & iRow).Value = txtUren.Value
            .Range("G" & iRow).Value = txtUurtarief.Value
      
        End With
        
        
        With Sheets(cmbLocation.Value)
            iRow = .Range("A1048576").End(xlUp).Row + 1
            .Range("A" & iRow).Value = iRow - 1
            .Range("B" & iRow).Value = txtDatu.Value
            .Range("C" & iRow).Value = cmbLocation.Value
            .Range("D" & iRow).Value = cmbWerkzaamheden.Text
            .Range("E" & iRow).Value = txtWerkzaamheden.Value
            .Range("F" & iRow).Value = txtUren.Value
            .Range("G" & iRow).Value = txtUurtarief.Value
        End With
            
        Call Reset
    Else
        Application.ScreenUpdating = True
        Exit Sub
    
    End If
    
        Application.ScreenUpdating = True
        
    Dim i As Integer
    
    i = MsgBox("Heeft u de gegevens juist ingevoerd?", vbQuestion + vbYesNo + vbDefaultButton2, "Invoeren")
    
    If i = vbYes Then
    
        Application.ScreenUpdating = True
   End If

End Sub
 
Alles in 1 tabel zettten is echt de beste optie.
Je zult het denken vanuit 'papier' moeten loslaten.

Hou het simpul:

Code:
Private Sub cmdSave_Click()
  y=sheet1.usedrange.rows.count
  Sheet1.cells(rows.count,1).end(xlup).offset(1).resize(,7)=array(y,txtDatu,cmbLocation,cmbWerkzaamheden,txtWerkzaamheden,txtUren,txtUurtarief)

  y=Sheets(cmbLocation).usedrange.rows.count      
  Sheets(cmbLocation).cells(rows.count,1).End(xlUp).offset(1).resize(,7)=array(y,txtDatu,cmbLocation,cmbWerkzaamheden,txtWerkzaamheden,txtUren,txtUurtarief)
End Sub
 
Laatst bewerkt:
Als ik je bestand zie, blijf ik inderdaad ook bij mijn mening om alles in 1 tabel op te slaan, en daar zet je dan een filter op.
Iets moeilijker, maar wellicht nog beter is 'Uitgebreid filter' toepassen.
Zoals jij het doet, lijkt het me eerlijk gezegd nog slechter dan alles op verschillende werkbladen plaatsen.
Je zet de gegevens immers in 1 tabel (prima), maar vervolgens zet je dezelfde gegevens nog 's in andere tabellen. Hierdoor loop je het risico dat gegevens van de ene tabel verschillen van gegevens van een andere tabel.
Als je dan een uitgebreide tabel hebt, zou ik niet graag het jobke krijgen, om uit te zoeken waarom het eindresultaat van de ene berekening verschilt van het eindresultaat van de andere berekening.
 
Ik ben al een stukje verder, maar het lukt nog niet helemaal. Hij heeft het net even gedaan zelfs. Maar nu krijg ik telkens de foutmelding: het subscript valt buiten het bereik. Weet iemand hoe dit mogelijk is? Ik ben jullie echt dankbaar voor de gegeven reacties. Ik heb alleen in mijn ogen wel legitieme redenen om in verschillende tabbladen te werken...
 
Zoals eerdere helpers al aangeven, zet alles in 1 tabel.
Dubbelkllick op een locatie in kolom A in het voorbeeldbestand.
 

Bijlagen

Je moet eens naar foutopsporing gaan. Als je de melding krijgt: het subscript valt buiten het bereik, dan zal de probleemcode geel oplichten. Dan moet je daar ergens de fout zoeken.
Wellicht een declaratie die buiten het bereik valt.
 
Ik heb alleen in mijn ogen wel legitieme redenen om in verschillende tabbladen te werken...

Je vraagt aan ons hulp om de zelf gecreëerde problemen van een verkeerde struktuur/ontwerp op te lossen.
De oplossing is afzien van die gesplitste tabellen.
Voor een gemankeerde struktuur bestaan geen valide argumenten.
Mijn code-suggestie moet werken, tenzij jij hem zelf om zeep helpt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan