VBA - Как очистить строку подключения из подключения - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть функция, которая пытается очистить каждую строку подключения от каждого подключения, она работает следующим образом:

Public Sub RemovePasswordByNamePrefix()
    Dim w As Worksheet
    Dim qt As QueryTable
    Dim cn As Object
    Dim odbcCn As ODBCConnection
    Dim oledbCn As OLEDBConnection

    For Each cn In ThisWorkbook.connections
        If cn.Type = xlConnectionTypeODBC Then
            Set odbcCn = cn.ODBCConnection
            odbcCn.SavePassword = False

            odbcCn.connection = ""
            odbcCn.CommandText = ""

        ElseIf cn.Type = xlConnectionTypeOLEDB Then

            Set oledbCn = cn.OLEDBConnection
            oledbCn.SavePassword = False

            oledbCn.connection = ""
            oledbCn.CommandText = ""

        End If
    Next
End Sub

Проблема заключается в том, что это происходит со следующей ошибкой (в разделе OLEDB, connection = ""):

Ошибка времени выполнения '1004'

Ошибка приложения или объекта *

Попытка сделать это с помощью интерфейса тоже не работает, это немного забавно:

enter image description here

Когда вы нажимаете кнопку «ОК», он просто ничего не делает ... как будто окно не закрывается, никаких изменений, это очень странно. На самом деле такое же поведение сохранится, если вы не введете что-либо (действительное или недействительное) в разделы текста команды и командной строки ...

Почему это так? Есть ли способ обойти это? Это похоже на то, как MS называет это «скрытым» требованием и не документирует и не предоставляет обратную связь, когда пользователь / разработчик пытается обойти это.

Очевидный вопрос, который я получу по этому вопросу: зачем мне это делать, я открою еще один тикет для решения этой проблемы и добавлю ссылку здесь

1 Ответ

0 голосов
/ 09 ноября 2018

Попробуйте вместо этого; удалите соединение и создайте его позже, когда оно вам понадобится.

Public Sub RemovePasswordByNamePrefix()
    Dim w As Worksheet
    Dim qt As QueryTable
    Dim cn As Object
    Dim odbcCn As ODBCConnection
    Dim oledbCn As OLEDBConnection

    For Each cn In ThisWorkbook.Connections
        If cn.Type = xlConnectionTypeODBC Then
            cn.Delete
        ElseIf cn.Type = xlConnectionTypeOLEDB Then
            cn.Delete
        End If
    Next
End Sub
...