Чтобы ответить на ваш вопрос напрямую, ваш M-код синтаксически неверен. (На этом конкретном изображении вы разместили: https://i.stack.imgur.com/AI6ca.png.)
Чтобы исправить это, избавьтесь от первого )
в вызове Csv.Document
. Другими словами:
Source = Csv.Document("someFilePath",[Delimiter=" ", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None]),
вместо:
Source = Csv.Document("someFilePath"),[Delimiter=" ", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None]),
Это должно по крайней мере решить синтаксическую ошибку.
Вместо вашего текущего подхода, это вместо этого может быть лучше:
- Измените запрос, чтобы найти путь к файлу из некоторого именованного диапазона (это можно сделать с помощью
Excel.CurrentWorkbook()
в Power Query и затем развернуть). - Когда ваша подпрограмма VBA выполняется, запишите путь к файлу (который пользователь предоставляет через
Application.GetOpenFilename
) в указанный именованный диапазон. - Refre sh запрос программно (как часть вашей подпрограммы VBA).
- Все остальное должно работать так же (поскольку путь к файлу по-прежнему динамический c).
Преимущество здесь в том, что вам не нужно манипулировать вашим M-кодом непосредственно в VBA, таким образом, нет такого же риска внесения синтаксических ошибок.
Другая проблема заключается в том, что вы вводите прямой код пользователя в свой код. В некоторых контекстах программирования это может быть уязвимостью. Может быть, это не проблема для вас, но это то, что нужно учитывать.