Hoi Allen,
Ik heb op mijn acer laptop een VBA-code gemaakt aan de hand van chat-GPT. die code werkte perfect. Nu heb ik laatst een MacBook Air (2025) gekocht, maar die code werkt daar niet op. Is het mogelijk dat iemand mij op de juiste weg helpt? Hieronder zie je de code die wel werkt op windows, maar niet op Macbook.
Sub KopieerNamenlijst()
Dim wsFilter As Worksheet, wsFormulier As Worksheet
Dim klas As String
Dim bestandspad As String
Dim wb As Workbook
Dim aantalNamen As Integer
Dim ws As Worksheet
' Stap 1: Koppel de juiste werkbladen aan variabelen
Set wsFilter = ThisWorkbook.Sheets("Filters")
Set wsFormulier = ThisWorkbook.Sheets("Formulier")
' Stap 2: Haal het bestandspad uit cel N2
bestandspad = Trim(wsFormulier.Range("N2").Value)
' Stap 3: Controleer of er een pad is ingevuld
If bestandspad = "" Then
MsgBox "Geen bestandspad gevonden in cel N2 van 'Formulier'. Vul een correct pad in.", vbExclamation
Exit Sub
End If
' Stap 4: Controleer of het bestand bestaat
If Dir(bestandspad) = "" Then
MsgBox "Het bestandspad is onjuist of het bestand bestaat niet: " & bestandspad, vbExclamation
Exit Sub
End If
' Stap 5: Lees de klas uit cel A3 in de sheet 'Formulier'
klas = Trim(wsFormulier.Range("A3").Value)
' Stap 6: Open het klassenlijst-bestand
On Error Resume Next
Set wb = Workbooks.Open(bestandspad)
On Error GoTo 0
' Stap 7: Controleer of het bestand geopend is
If wb Is Nothing Then
MsgBox "Het bestand kon niet worden geopend.", vbExclamation
Exit Sub
End If
' Stap 8: Zoek de juiste sheet met de naam van de klas
On Error Resume Next
Set ws = wb.Sheets(klas)
On Error GoTo 0
If ws Is Nothing Then
MsgBox "De klas '" & klas & "' bestaat niet in het klassenlijst-bestand!", vbExclamation
wb.Close False
Exit Sub
End If
' Stap 9: Bereken het aantal namen in kolom C (vanaf rij 2)
aantalNamen = ws.Cells(ws.Rows.Count, 3).End(xlUp).Row - 1
' Stap 10: Oude namen wissen en nieuwe kopiëren
wsFilter.Range("E2:E100").ClearContents
If aantalNamen > 0 Then
wsFilter.Range("E2:E" & aantalNamen + 1).Value = ws.Range("C2:C" & aantalNamen + 1).Value
End If
' Stap 11: Sluit het klassenlijst-bestand zonder op te slaan
wb.Close False
' Bevestiging
MsgBox "Namenlijst succesvol gekopieerd naar 'Filters'!", vbInformation
End Sub
Alvast bedankt!!
Ik heb op mijn acer laptop een VBA-code gemaakt aan de hand van chat-GPT. die code werkte perfect. Nu heb ik laatst een MacBook Air (2025) gekocht, maar die code werkt daar niet op. Is het mogelijk dat iemand mij op de juiste weg helpt? Hieronder zie je de code die wel werkt op windows, maar niet op Macbook.
Sub KopieerNamenlijst()
Dim wsFilter As Worksheet, wsFormulier As Worksheet
Dim klas As String
Dim bestandspad As String
Dim wb As Workbook
Dim aantalNamen As Integer
Dim ws As Worksheet
' Stap 1: Koppel de juiste werkbladen aan variabelen
Set wsFilter = ThisWorkbook.Sheets("Filters")
Set wsFormulier = ThisWorkbook.Sheets("Formulier")
' Stap 2: Haal het bestandspad uit cel N2
bestandspad = Trim(wsFormulier.Range("N2").Value)
' Stap 3: Controleer of er een pad is ingevuld
If bestandspad = "" Then
MsgBox "Geen bestandspad gevonden in cel N2 van 'Formulier'. Vul een correct pad in.", vbExclamation
Exit Sub
End If
' Stap 4: Controleer of het bestand bestaat
If Dir(bestandspad) = "" Then
MsgBox "Het bestandspad is onjuist of het bestand bestaat niet: " & bestandspad, vbExclamation
Exit Sub
End If
' Stap 5: Lees de klas uit cel A3 in de sheet 'Formulier'
klas = Trim(wsFormulier.Range("A3").Value)
' Stap 6: Open het klassenlijst-bestand
On Error Resume Next
Set wb = Workbooks.Open(bestandspad)
On Error GoTo 0
' Stap 7: Controleer of het bestand geopend is
If wb Is Nothing Then
MsgBox "Het bestand kon niet worden geopend.", vbExclamation
Exit Sub
End If
' Stap 8: Zoek de juiste sheet met de naam van de klas
On Error Resume Next
Set ws = wb.Sheets(klas)
On Error GoTo 0
If ws Is Nothing Then
MsgBox "De klas '" & klas & "' bestaat niet in het klassenlijst-bestand!", vbExclamation
wb.Close False
Exit Sub
End If
' Stap 9: Bereken het aantal namen in kolom C (vanaf rij 2)
aantalNamen = ws.Cells(ws.Rows.Count, 3).End(xlUp).Row - 1
' Stap 10: Oude namen wissen en nieuwe kopiëren
wsFilter.Range("E2:E100").ClearContents
If aantalNamen > 0 Then
wsFilter.Range("E2:E" & aantalNamen + 1).Value = ws.Range("C2:C" & aantalNamen + 1).Value
End If
' Stap 11: Sluit het klassenlijst-bestand zonder op te slaan
wb.Close False
' Bevestiging
MsgBox "Namenlijst succesvol gekopieerd naar 'Filters'!", vbInformation
End Sub
Alvast bedankt!!