Скопируйте и вставьте строки Excel между двумя рабочими книгами на основе критериев из экспортированных данных Access. - PullRequest
0 голосов
/ 14 сентября 2018

У меня нет опыта работы с Access, VBA-кодированием или макросами Excel до того, как я обучался в прошлом месяце на этих форумах. Спасибо форумчанам и авторам. До сих пор я наслаждался своими знаниями по Access, поставленными задачами и ценю любую помощь, которую я могу получить. Таким образом, код и методы, которые я использовал до этого момента, вполне могут быть запутанными и запутанными. Я сделаю все возможное, чтобы предоставить соответствующие детали и точную терминологию.

Я работаю в лаборатории и создаю форму доступа для полуавтоматической отчетности. Образцы поступают от клиентов и регистрируются в таблице Excel R&D Log. Рабочий лист InProcess. Образцы сортируются на основе сайта, на котором они были созданы, и им присваивается одно- или двухбуквенный код сайта (G, D, WH и т. Д.) И идентификатор "yy-000" в отдельных столбцах Excel (т. Е. D 18-096). Образцы могут быть представлены для нескольких анализов (металлы, вода, почва и т. Д.) И могут даже иметь несколько строк отчета, если в образце идентифицировано несколько аналитов. Есть несколько других столбцов, таких как дата поступления, отчетная дата, единицы измерения и т. Д. После того, как образцы отправлены в отчет, я вручную копирую и вставляю их в лист Archived и удаляю запись и пустую строку из листа InProcess. Поскольку один образец может иметь несколько анализов и даже больше потенциальных результатов, каждая запись будет занесена в новую строку Excel (с тем же идентификационным номером D 18-096). Таким образом, не существует единственного уникального идентификатора или первичного ключа для каждой выборки в текущем формате. R&D Log обновляется вручную лаборантами, а рабочая таблица InProcess является связанной таблицей в базе данных Access.

База данных Access использует два поля со списком в форме frmInProcess для фильтрации запроса qryInProcess связанной таблицы. Поля со списком фильтруют назначение отчета (один клиент может получить несколько кодов сайта) и анализ (отчеты разделяются в зависимости от типа анализа). Запрос также отфильтровывает пустые результаты и пустые даты, поэтому в отфильтрованной форме будут отображаться только завершенные образцы. К этому моменту я сгенерировал код VBA, который будет экспортировать форму в .pdf, сохранить файл с уникальным именем файла и открыть Outlook для отправки отчета. Мне также удалось экспортировать отфильтрованную форму frmInProcess в файл Excel Access Test (не связанный файл).

Теперь я хотел бы автоматизировать перенос результатов завершенных тестов с рабочего листа Excel R&D Log: InProcess на R&D Log: Archived и удалить запись с рабочего листа InProcess. Я не уверен, смогу ли я экспортировать отфильтрованную форму в связанную таблицу Excel, или я должен использовать отдельный файл Excel (или если это даже имеет значение для простоты кода?). Теперь я хотел бы прочитать экспортированную отфильтрованную форму в Excel Access Test, найти подходящие строки в R&D Log на основе нескольких критериев (сайт, идентификатор, анализ, анализ, дата отчета) и автоматизировать передачу записей между R&D Log рабочими листами , В результате Access создает отчеты о выполненных тестах, а записи удаляются из InProcess тестирования и передаются в Archived тестирования в Excel. Я предполагаю, что мне может потребоваться закрыть приложение Access и выполнить это в Excel. Надеюсь, что это достаточно легко следовать.

Спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

По моему опыту, импортировать документ Excel во временную НОВУЮ (или полностью пустую) таблицу доступа обычно проще всего.Тогда вам не нужно беспокоиться о ссылках на ячейки, как в Excel VBA.Даже если в документе Excel содержатся старые данные с несколькими новыми изменениями каждый раз, импортировать их во временную таблицу Access может быть самым простым способом, потому что тогда вы можете сравнить данные в этой таблице с данными в другой,постоянный доступ к таблице и обновление последнего на основе первого.

Что касается исходного файла Excel, если вам нужно удалить строки из него, может быть быстрее экспортировать новый файл Excel, содержащий только старые данныеодин должен заканчиваться, а затем использовать VBA, чтобы удалить (или - безопаснее! - переименовать) старый файл.

Таким образом, процесс разработки идет примерно так:

  1. Сохраните этапы импорта, сначала импортировав файл Excel с помощью параметров ленты Access "Внешние данные" (вкладка) -> "Excel", а после завершения обязательно установите флажок "Сохранить этапы импорта" и запишите имя, которое выдайте «сохраненный импорт», потому что он вам понадобится в вашем коде VBA.

  2. В Access напишите функцию для удаления таблицы.Код VBA:

    Const cTable = "MyExcelTempTable"
    If TableExists(cTable) Then
      DoCmd.DeleteObject acTable, cTable
    End If
    

    Теперь вы можете протестировать функцию удаления для импортированных данных.

  3. Написать код VBA для импорта той же электронной таблицы, чтобы создатьта же таблица:

    Const cSavedImport = "Import-MyExcelTempTable"
    
    ' Import the Excel file
    DoCmd.RunSavedImportExport cSavedImport
    
  4. Напишите дополнительные функции VBA, чтобы проверить импортированную таблицу на наличие неверных данных, а затем скопировать ее в постоянную таблицу.Вы можете обновлять существующие записи или добавлять новые.В любом случае, вы можете использовать запросы Access или SQL для этого и запускать их из VBA.

  5. Написать функцию VBA для переименования старого файла Excel.(Вы можете использовать InputBox, если имя файла Excel каждый раз отличается. Я делаю это для импорта файлов Excel, и я устанавливаю значение по умолчанию, чтобы мне не приходилось так много печатать.)

  6. Напишите функцию VBA для экспорта новой версии файла Excel.

  7. Создайте себе кнопку на форме, которая при нажатии запускает функцию VBA.Внутри этой функции выполните шаги со 2 по 6, описанные выше.

Я не уверен, что мой ответ точно соответствует тому, что вы пытаетесь сделать, но, надеюсь, вы получите достаточно картины рабочего процессавыяснить детали того, что вам нужно.

...