Написание макроса в Access для открытия и переформатирования данных в Excel без использования макроса в файле Excel (другими словами, все VBA должны жить в Access) - PullRequest
0 голосов
/ 25 октября 2019

Моя компания создает тестовые данные для субъектов много за один раз (это отягчает; не лот субъектов, а лот субъектов ... черт возьми),и я пытался найти способ суммировать эти данные, когда наткнулся на сводные таблицы / диаграммы и модель данных в Excel. Это отлично подходит для суммирования данных, но не для простого хранения записей 2.4M, поэтому я ввел Access в миксе. Все работает отлично, за исключением того факта, что благодаря этому процессу я теперь знаком с VBA и моделью данных и с тем, как работают сводные диаграммы. То, что я хочу, - это способ сделать этот инструмент анализа данных защищенным от идиотов.

Я выяснил, как легко импортировать новые данные в таблицу в Access из формы;Моя проблема в том, что данные представлены таким образом, что я не мог понять, как заставить их вести себя в Access (результаты структурированы таким образом, что субъекты - это строки, а тесты - столбцы, поэтому каждая строка имеетОколо 50 столбцов, связанных с ним), поэтому я написал макрос в Excel, чтобы переформатировать данные таким образом, чтобы в каждой строке был только один результат теста;, что макрос работает отлично.

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

Вот весь мой макрос из Access и небольшая частьмакрос Excel, и он работает ... Я думаю ...

Sub fileLocator_Click()

Dim fDialog As Office.FileDialog
Dim varFile As Variant
Dim fChosen As Integer
Dim fName As String
Dim Xl As Object
Dim XlBook As Object
Dim XlSheet As Object

Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

With fDialog

    .Title = "Select test results file"
    .AllowMultiSelect = False

End With

fChosen = fDialog.Show

If fChosen <> -1 Then
    MsgBox "Canceled", vbExclamation, ""
    Exit Sub
Else
End If

fName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Set Xl = CreateObject("Excel.Application")
Xl.Visible = True
Set XlBook = GetObject(fName)
'Xl.Visible = True
'XlBook.Activate
XlBook.Windows(1).Activate
'XlBook.Sheets(1).Select
'Visible = True
Set XlSheet = XlBook.Worksheets(1)

Call excelDataReformatter

Excel.Application.Quit

End Sub

Public Sub excelDataReformatter()

If MsgBox("Do you want to reformat the data?", vbYesNo + vbApplicationModal + vbSystemModal) = vbNo Then Exit Sub

'This is where the reformatting happens; this stuff works perfectly, so it doesn't need to be included.

If MsgBox("Is the data formatted properly? Click Yes to save the file before closing.", vbYesNo + vbQuestion, "Save Workbook") = vbYes Then
    ActiveWorkbook.Save
End If

End Sub

Он предназначен для показа файла до и после (два окна сообщения, запрашивающие начало и завершение), и иногда это, ноне всегда делает это, и иногда, но не всегда, файл закрывается, когда это сделано, даже если приложение Excel закрывается. Я оставил закомментированные биты в середине, чтобы указать, что я пытался заставить файл вести себя правильно и одинаково каждый раз.

Я могу опубликовать больше макросов Excel здесьесли это поможет;все это 234 строки, что не кажется как целое. Если ничего другого, я приложу все это в виде файла .txt.

Кроме того, я новичок в VBA, поэтому я приветствую любые общие советы, которые могут быть у каждого.

Править: хорошо, очевидно, я не могу прикрепить файл .txt, но я могу опубликовать больше, если это поможет.

Edit2: сделать вопросы более явными.

Я бы хотелзаставлять макрос вести себя одинаково каждый раз: иногда он отображает файл Excel, отформатированный между «Вы хотите переформатировать файл?»и "Правильно ли отформатирован файл?"вопросы, а иногда нет;иногда он закрывает файл Excel, когда это сделано, а иногда нет, хотя он всегда закрывает приложение Excel. Как мне а) сделать так, чтобы файл действительно появлялся каждый раз, когда я запускаю макрос, и б) убедиться, что файл закрывается, когда я закончу?

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

...