• 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.

Twee VBA's 1 sheet

Status
Niet open voor verdere reacties.

MBG95

Gebruiker
Lid geworden
19 mei 2020
Berichten
21
Goedemiddag,

Graag wil ik onderstaande VBA's werkend hebben in één sheet. De eerste zorgt ervoor dat bij een overeenkomende waarde de tweede geklokte tijd achter de eerste geklokte tijd komt. De tweede VBA zorgt ervoor dat wanneer er een waarde aan kolom B wordt toegevoegd, hij automatisch naar Kolom A in de volgende rij verspringt. Momenteel heb ik ze aangepast als twee modules, maar alleen VBA 1 werkt.

VBA 1:
Code:
Function UitlogTijd(Tabel As Range, eindTijdDag)
Dim R, Naam, plaats
R = Application.Caller.Row - Tabel.Row + 1
Naam = Tabel(R, 1)
plaats = Tabel(R, 2)
UitlogTijd = Int(Tabel(R, 3)) + eindTijdDag
For R = R + 1 To Tabel.Rows.Count
    If Tabel(R, 1) = Naam And Tabel(R, 2) <> plaats Then
        UitlogTijd = WorksheetFunction.Min(Tabel(R, 3), UitlogTijd)
        Exit Function
    End If
Next
End Function

VBA 2

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        If Target.Row > 1 And Target.Row < 10000 Then
            Target.Offset(1, -1).Select
        End If
    End If
End Sub

Hoe kan ik dit oplossen?

Alvast bedankt!

MBG95
 
Je tweede code doet het prima; wat denk je dat het probleem is?
 
De combinatie tussen de twee. Ik ben namelijk niet goed genoeg onderlegd voor het combineren of meerdere modules op één sheet.

Zoals ik hem nu in mijn bestand heb; werkt de eerste code perfect, maar dan doet de tweede het niet.
In twee verschillende excels werken de codes prima, dus aan de VBA ligt het niet.
 
VBA 1 is een functie : maak je best toegankelijk voor de ganse Excel workbook dus in een Module

2020-06-16 16_08_52-Window.jpg

De tweede is een procedure die je wil draaien :

a) in één sheet - dan kies je voor 2 nl. VBA in de sheet zelf en dan mag het 'private'
b) in alle sheets als die er zijn - dan kies je voor 3 nl. in ThisWorkbook, maar maak je best een gewone 'Sub' en geen private
 
Hi Digicafee,

Oke, ik heb hem nu in 'This workbook' gezet en als normale sub. Echter doet hij nog steeds niet wat de bedoeling is.
Wat zou hier dan nog de oorzaak van kunnen zijn?

MBG95
 
Op dit moment niets.

Even wat context, mocht het hierna niet duidelijk zijn dan ga ik de file posten zonder persoonsgegevens.
In kolom A wordt de naam van de medewerker gescand en in kolom B de kostenplaats. Zodra kolom B gevuld is, moet hij automatisch doorspringen naar kolom A en dan één rij naar beneden.

Op dit moment krijg ik gewoon een tab (geprogrammeerd in de scanner) en geen enter.
 
Ook nog als toevoeging, waarvan ik dacht dat deze niet relevant was...

Deze geeft de tijd van scannen in kolom A aan, de tijd wordt dan weergeven in kolom C.

Een derde VBA:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
With Target.Offset(0, 2)
.Value = Now
.NumberFormat = "DD/MM/YYYY hh:mm"
End With
End Sub
 
Je hebt dus 2x een identiek event ..."Private Sub Worksheet_Change(ByVal Target As Range)"
Dat kan niet hé ... je moet de akties die in die beide subs staan combineren in één...
 
werkt dit naar verwachting?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 2 Then
    If Target.Row > 1 And Target.Row < 10000 Then
        Target.Offset(1, -1).Select
    End If
End If
If Target.Column = 1 Then 
    With Target.Offset(0, 2)
        .Value = Now
        .NumberFormat = "DD/MM/YYYY hh:mm"
    End With
End If
End Sub
 
werkt dit naar verwachting?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 2 Then
    If Target.Row > 1 And Target.Row < 10000 Then
        Target.Offset(1, -1).Select
    End If
End If
If Target.Column = 1 Then 
    With Target.Offset(0, 2)
        .Value = Now
        .NumberFormat = "DD/MM/YYYY hh:mm"
    End With
End If
End Sub


Deze werkt perfect! Merci.
 
Fijn, markeer je de vraag dan nog even als opgelost?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan