Макрос не работает только для чтения - PullRequest
0 голосов
/ 27 февраля 2020

Итак, я создал файл Excel (файл 1) с макросом. Цель этого файла Excel - экспортировать входные данные Excel непосредственно в нашу базу данных Access.

Когда наши инженеры открывают файл, он открывается как файл только для чтения, поскольку он защищен паролем. Как только файл открыт, наши инженеры должны дать некоторую информацию по некоторым предметам. Когда все заполнено, они просто нажимают кнопку, чтобы сохранить ее в нашей базе данных Access.

При тестировании кода (НЕ только для чтения) он работал идеально. Мой вход был сохранен в базе данных. Как только файл открывается в режиме «Только чтение», он экспортирует последние сохраненные данные из этого файла Excel, полностью игнорируя новый ввод.

Пример: РЕЖИМ НЕ ЧИТАЙТЕ ТОЛЬКО После того, как инженер открывает файл, он видит пустая вкладка, так как им придется получать свои данные из нашей базы данных доступа. Инженер заполняет их ввод, нажимает сохранить, данные экспортируются в нашу базу данных. РЕЖИМ ТОЛЬКО ДЛЯ ЧТЕНИЯ Как только инженер откроет файл, он увидит пустую вкладку, поскольку ему придется получать свои данные из нашей базы данных доступа. Инженер заполняет их ввод, нажимает сохранить, данные из последнего сохраненного файла Excel (таким образом, пустой) экспортируется в базу данных

Если я сохраню файл с вводом от лица А в нем, ввод от лица А экспортируется, в то время как новый ввод от лица B. игнорируется.

Что я делаю не так? Это код, который я использую для экспорта из Excel для доступа:

dbWb = Application.ActiveWorkbook.FullName
dbWS = Application.ActiveSheet.Name

ssql = "INSERT INTO AssistAccruals (F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19)"
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=NO;DATABASE=" & dbWb & "]." & "[" & ActiveSheet.Name & "$A8:S" & Last_row & "]"
cnDB.Execute ssql

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема заключается в следующем: вы отправляете запрос SQL в вашу базу данных, и этот запрос SQL сообщает базе данных запросить ваш файл Excel (SELECT * FROM [Excel 8.0;HDR=NO;DATABASE=" & dbWb & "]." & "[" & ActiveSheet.Name). Теперь, конечно, база данных может получить доступ только к сохраненному файлу на диске, но не к несохраненному файлу в вашей памяти.

Ваш подход не может работать без сохранения файла Excel. Так как это только для чтения, вы не можете сохранить его.

Это проблемная часть c:

ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=NO;DATABASE=" & dbWb & "]." & "[" & ActiveSheet.Name & "$A8:S" & Last_row & "]"

Измените его так, чтобы вы генерировали SQL, не запрашивая свой Excel файл. Предоставьте список значений непосредственно для отправки его в вашу базу данных, например

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

без использования SELECT.

Конечно, вы должны написать код для генерации этой строки VALUES (value1, value2, value3, ...); из вашего источник данных "$A8:S" & Last_row &

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