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

VBA code van Windows naar Macbook

Status
Niet open voor verdere reacties.

Mbonka

Nieuwe gebruiker
Lid geworden
31 mrt 2025
Berichten
3
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!!
 
Wat geeft ChatGPT als je vraagt om een code voor MAC?
 
Ik krijg hierbij meerdere foutmeldingen omdat Mac de bestandspad niet kan lezen en/of openen. verschillende foutmeldingen mbt de bestandspad.

Ik gebruik Microsoft 365, Excel versie 16.95.1
 
ChatGPT gevraagt en kwam met dit.
Code:
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
    Dim fso As Object

    ' 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 (compatibel met Mac en Windows)
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FileExists(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(Filename:=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
 
VBA op een Mac heeft beperkte functionaliteit t.o.v. Windows.
Daarnaast wordt een bestandpad op een Mac totaal anders weergegeven.
 
Is mijn conclusie juist als ik veronderstel dat ChatGPT hier geen correct anywoord op geeft?
Zelfs niet als je expliciet aangeeft in de vraag dat het voor een MAC is?
 
Die conclusie had ik ook getrokken. Vandaar dat ik hier naar toe ben gekomen.
 
Dit zegt Claude.
Ik heb je VBA-code aangepast zodat deze compatibel is met Excel op Mac. De belangrijkste wijzigingen zijn:


  1. Toegevoegd #If Mac Then ... #Else ... #End If conditionele blokken om onderscheid te maken tussen Mac- en Windows-omgevingen
  2. De Dir() functie werkt niet op Mac, dus ik heb een alternatieve aanpak gebruikt
  3. Een Mac-specifieke manier toegevoegd om de laatste rij te vinden, omdat de standaardmethode soms problemen kan geven op Mac
Deze code zou nu zowel op Windows als op Mac moeten werken. Als je nog specifieke problemen tegenkomt tijdens het uitvoeren op Mac, laat het me weten, dan kan ik je verder helpen met het oplossen daarvan.
Code:
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 (MAC-compatible manier)
    #If Mac Then
        ' Voor Mac: we kunnen Dir niet gebruiken, dus slaan we deze controle over en proberen we het bestand direct te openen
    #Else
        If Dir(bestandspad) = "" Then
            MsgBox "Het bestandspad is onjuist of het bestand bestaat niet: " & bestandspad, vbExclamation
            Exit Sub
        End If
    #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)
    #If Mac Then
        ' Mac-specifieke manier om laatste rij te vinden
        Dim lastRow As Long
        With ws
            If Application.WorksheetFunction.CountA(.Columns(3)) > 0 Then
                lastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
            Else
                lastRow = 1
            End If
        End With
        aantalNamen = lastRow - 1
    #Else
        aantalNamen = ws.Cells(ws.Rows.Count, 3).End(xlUp).Row - 1
    #End If
    
    ' 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
 
@Warme bakkertje, ik heb echt geen idee omdat ik er helemaal geen verstand van heb.
Heb het via een andere chatbot geprobeerd, dus ook geen succes verhaal.
 
dus slaan we deze controle over
Jouw woorden, dus je wist het zelf ook al. :)
Van Mac heb ik ook helemaal geen verstand (wie gebruikt er ook zoiets LOL) dus dan gaan we maar te rade bij de experts (Ron de bruin)
 
edmoor, je brilletje is waarschijnlijk iets te donker want ik had die link al bij mijn antwoord gevoegd. :)
 
Bril aaan het poetsen... ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan