Para simplificar, basta adicionar as seguintes linhas ao seu código antes de "strFilename = strOutputFolder &" \ "& strItem":
strItem= replace(strItem, "~", "_")
strItem= replace(strItem, """, "_")
strItem= replace(strItem, "%", "_")
strItem= replace(strItem, "#", "_")
' and so long ...
strFilename = strOutputFolder & "\" & strItem
[ATUALIZADO] Bem, como o @Dave mencionou (e ele está certo) melhora assim:
Function ReplaceSpecialChars(strIn As String, strChar As String) As String
Dim strSpecialChars As String
Dim i As Long
strSpecialChars = "~"#%&*:<>?{|}/"
For i = 1 To Len(strSpecialChars)
strIn = Replace(strIn , strSpecialChars(i), strChar)
Next
ReplaceSpecialChars = strIn
End Function
... e depois ligue assim:
strFilename = strOutputFolder & "\" & ReplaceSpecialChars(strItem, "_")