Использование определенного пользователем параметра в VBA

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

01 01 09

Хорошо, новый год начался. извините за задержку, но я был в отпуске.

Подробности.

У меня есть база данных доступа, которая выводит отчет в формате Excel, отчет зависит от параметра даты, который выбирается пользователем. Этот параметр выбирается через текстовое поле (text100) с всплывающим календарем. Я хотел бы использовать дату в текстовом поле (text100) в имени файла.

10.12.2008 17:56:35
Вы не предоставляете достаточно информации для ответа на этот вопрос. Главным образом: как вы в настоящее время создаете файлы экспорта?
Tomalak 10.12.2008 18:06:42
2 ОТВЕТА
РЕШЕНИЕ

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

Просто нужна пара сабов / функций в модуле:

Some Module

Dim vParam1 as variant
Dim vParam1 as variant

Public Sub ParameterSet(byval pParamName as String, byval pParamValue as variant)

Select Case pParamName 
  Case "Param1": vParam1 = pParamValue 
  Case "Param2": vParam2 = pParamValue 
  Case Else
    msgbox pParamName & " parameter not defined"
End Select

End Sub

Public Function ParameterGet(byval pParamName as String) as variant

Select Case pParamName 
  Case "Param1": ParamGet = vParam1 
  Case "Param2": ParamGet = vParam2 
  Case Else
    msgbox pParamName & " parameter not defined"
End Select

End Sub

Затем в вашем запросе (удалите параметр даты)

WHERE Field1 = ParameterGet("Param1")

Затем в вашем коде, где вы запускаете экспорт

Private Sub Export_Click()

  dim vParam1 as variant

  vParam1 = inputbox("Enter the parameter:")

  ParameterSet "param1", vParam1

  Transferspreadsheet blah, blah, FileName:= vParam1 & ".xls"

End Sub

Очевидно, этот код нуждается в небольшой настройке для компиляции ... :-)

2
10.12.2008 18:16:42
Обычно рекомендуется использовать формы для параметров в Access. У вас гораздо больше контроля над вводом.
Fionnuala 10.12.2008 18:55:37
Конечно - но это быстрое и грязное решение для одного параметра - я обычно использую формы для параметров - идея все та же - вы сохраняете введенное значение в глобальном var и закрываете форму.
DJ. 10.12.2008 19:00:53

Для меня очевидно, что вы хотите проанализировать дату из имени файла, а затем использовать эту дату для выполнения запроса ... если это не то, что вы хотите, пожалуйста, переформулируйте вопрос.

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

Менее очевидная часть - это разбор. Вам необходимо определить формат имени файла. Это:

  • "OutData-YYYYMMDD"
  • "OUTDATA _YY _MM _DD"
  • "DD _MM _YYY _OUTDATA"
  • или что-то другое?

Нам нужно знать относительную позицию токенов (год, месяц, день и обычное имя файла).

Предполагая, что "YYYY_ MM_ DD_ OUTDATA.DAT", вот мысль ...

function toQueryDate(aFileName as String) as Date
Dim theQueryDate as Date
Dim theParsedDate as String

theParsedDate=Mid(aFileName,1,4)+"/"+Mid(aFileName,6,2)+"/"+Mid(aFileName,9,2)
'IMPROVE:there's no error checking here.... we could see if the individual tokens are numbers

On Error Resume Next
theQueryDate=Cdate(theParsedDate)
If err.number then
   Msgbox "Bad filename: "+aFilename
   End 'or something else less fatal 
Endif

'we should be OK so:
toQueryDate=theParsedDate
End function
1
17.12.2008 15:00:24