Quel file, dal nome "adovbs.inc" non c'entra nulla con gli apici.
Quel file serve per rendere con nomi comprensibili dei valori numerici da passare all'oggetto Recordset in modo da definire il tipo di puntatore e bloccaggio dello stesso.
Se io scrivo:
codice:
rs.open sql, conn, 1, 3
oppure (includendo quel file "adovbs.inc") scrivo:
codice:
rs.open sql, conn, adOpenKeyset, adLockOptimistic
in pratica ho scritto la stessa cosa.

Il problema dell'apice, passato dentro una stringa sql, crea la chiusura della stringa stessa, mentre tutto ciò che sta dopo l'apice crea errore (in quanto non istruzione sql).
Mi spiego meglio:
se io scrivo staticamente questa query di insert:
codice:
sql = "INSERT INTO tabella (nome_campo) VALUES('Valle D'Aosta')"
l'apice dopo la lettera D chiuderebbe in anticipo il valore intero, mandando in errore l'esecuzione della query di insert.
Nota: 'Valle D'Aosta'
Quanti apici conti? 3
Il primo apre la stringa e il secondo la chiude. Tutto ciò che va dal secondo al terzo causa errore.
Allora per ovviare al problema si scrive:
codice:
sql = "INSERT INTO tabella (nome_campo) VALUES('Valle D''Aosta')"
In questo modo è come se scrivessi due blocchi di stringhe separate che si concatenano da sole:
'Valle D'
'Aosta'
Nell'insieme diventano 'Valle D''Aosta'
L'engine sql intrepreterà questa stringa, alla fine in:
Vall D'Aosta.
Lo so che è complesso e che forse non ho saputo spiegarlo bene, ma spero che qualcosa l'hai capita.