Excel Добавить метод запроса - PullRequest
0 голосов
/ 17 декабря 2018

Следующее прекрасно работает на моем компьютере, но не работает на компьютере коллеги:

    GetUserName = Environ$("username")

    If GetUserName = "user1" Then
        o_dsn = """dsn=mydbs"""
    Else
        o_dsn = """dsn=dbs2"""
    End If

    ActiveWorkbook.Queries.Add Name:="Query1", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Odbc.Query(" & o_dsn & ", ""Select InvoiceNo, EffectDate from " & _
            "batchcontract " & _
            "where InvoiceNo in( " & _
            RangeToString & _
            ") """ & _
        ")" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    Source" & _
        ""

На его компьютере происходит сбой с ошибкой «Объект не поддерживает свойство или метод» в операторе «Queries.Add».,Мы оба работаем с Office 365 ProPlus в Windows 10 и используем одни и те же ссылки на Excel.В то время как наши уведомления о доставке имеют разные метки, обе указывают на одну и ту же базу данных MySQL, сохраняют учетные данные в определении ODBC и проходят проверку соединения.

Я не уверен, что Excel возражает против "Queries.Add"метод или предложение "Odbc.Query".Кто-нибудь может уточнить причину этой ошибки?Любые идеи будут приветствоваться.Спасибо.

1 Ответ

0 голосов
/ 18 декабря 2018

При использовании ODBC имя соединения имеет большое значение.С другой стороны, я обнаружил, что все, что вам действительно нужно, это DSN, и он отзовет любую информацию о соединении в зависимости от того, как вы установили соединение.

Тем не менее, вы, похоже, имеетеэто обрабатывается в вашем if / then.

Я никогда не использовал запросы в списке, который вы перечисляете - я всегда делаю их в виде таблиц в рабочем наборе.В этом духе, вот быстрый и грязный шаблон для того, как я добавляю таблицу через VBA.По сути, это способ VBA сделать то, что указано в этом ответе:

https://stackoverflow.com/a/51444029/1278553

Попробуйте - на обеих машинах - и посмотрите, работают ли они оба с соответственно именованным DNS.

Dim lo As ListObject
Dim ws As Worksheet

Set ws = Sheets("Sheet1")

Set lo = ws.ListObjects.Add(SourceType:=0, _
  Source:=Array(Array("ODBC;DSN=mydbs")), _
  Destination:=Range("A1"))
lo.QueryTable.CommandText = "select foo from bar"
lo.Refresh

Также, есть ли вред при добавлении соединения ODBC с подходящим именем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...