Использовать информацию, введенную пользователем в форму в макросе - PullRequest
1 голос
/ 28 февраля 2012

(это в Access 2003.) Я пишу макрос, который открывает форму, позволяющую пользователям вводить путь и имя файла, который они хотят импортировать. Затем он закрывает форму и импортирует данные в указанный файл. У меня есть код, который открывает форму и пользовательский ввод правильно. У меня также есть код, который выполняет импорт / манипулирование данными после получения пути и имени файла.

У меня вопрос: как использовать информацию, введенную в форму в макросе / других подпрограммах после закрытия формы?

Вот простая версия кода моей формы («Введите информацию об импорте»):

Option Compare Database
Option Explicit

Sub RunButton_Click()

    FilePathTextBox.SetFocus
    DataPath = FilePathTextBox.Text
    FileNameTextBox.SetFocus
    DataName = FileNameTextBox.Text

    DoCmd.Close

End Sub

Вот простая версия моей попытки макроса (которая не удалась):

Option Compare Database
Option Explicit
Option Base 1

Public DataPath As String
Public DataName As String
Public CompleteName As String

Function StartImport()

    'Open form to let user enter import file info
    DoCmd.OpenForm "Enter Import Info", acNormal, , , , acDialog

    'Get complete file path/name. I think this is where the problem is.
    CompleteName = DataPath & "\" & DataName

    'Import
    ImportData

    'Data clean up
    DataCleanup
End Function


Function ImportData()

    'Import CompleteName
    'The import code here works fine when CompleteName has the right info

End Function

Sub DataCleanup()

    'cleans up the data as needed (using DoCmd.RunSQL). Works fine.

End Sub

Я потратил более 2 часов на поиски решений в Интернете, но не смог их найти. Друг предлагает создать временную таблицу для хранения значений, введенных в форму, в виде строки (то есть таблица будет иметь только 1 поле и 1 запись). Но я не знаю, как извлечь его как строку из таблицы.

Извините за очень длинный пост - я хотел быть максимально ясным. Заранее спасибо за помощь !!

============== Редактировать (Дополнительная информация)

Исходный код в форме просит пользователя вручную ввести путь и имя файла. Весь код работал тогда.

Однако я хотел избежать ошибок / ошибок, используя FileDialog для определения пути и имени, поэтому я создал подпрограммы, которые вызываются при щелчке по текстовому полю (FileNameTextBox_Click и FilePathTextBox_Click). Код для FileNameTextBox_Click () можно найти здесь: FileDialog не работает

Это влияет на что-нибудь?

1 Ответ

0 голосов
/ 28 февраля 2012

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

Используя ваши имена и ваш код, я получил путь и имя файла, переданные обратно в модуль со следующими изменениями:

RunButton_Click

Debug.Print "Form " & DataPath              ) Check values are stored
Debug.Print "Form " & DataName              )

' Close form and nothing else.
DoCmd.Close objecttype:=acForm, objectname:="Enter Import Info"

Module1

После DoCmd.OpenForm "Enter Import Info", acNormal, , , , acDialog

Debug.Print "Module " & DataPath            )  Check have values
Debug.Print "Module " & DataName            )
...