Моя компания создает тестовые данные для субъектов много за один раз (это отягчает; не лот субъектов, а лот субъектов ... черт возьми),и я пытался найти способ суммировать эти данные, когда наткнулся на сводные таблицы / диаграммы и модель данных в 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. Как мне а) сделать так, чтобы файл действительно появлялся каждый раз, когда я запускаю макрос, и б) убедиться, что файл закрывается, когда я закончу?
Я разместил так мало кода, какЯ думаю, что могу, пока еще представляю каждый аспект всей проблемы. Другими словами, я не могу придумать что-либо, что могло бы фундаментально изменить контекст вопроса.