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

Я пытаюсь передать 3 текстовых поля в другую форму путем анализа строки. Я получаю ошибку времени выполнения 13.

Private Sub txtFullName_Click()
    Const cstrForm As String = "frmInputInfo"
    DoCmd.OpenForm "frmInputInfo", acFormAdd, , , acDialog, _
        Me.txtFullName & "|" & Me.PATS_Job_Opening_ID & "|" & Me.NYCAPS_JobID
End Sub

Private Sub Form_Load()
    varSplitString = Split(Me.OpenArgs, "|")
    Me.[FullName].Value = varSplitString(0)
    Me.[PATS Job Opening ID].Value = varSplitString(1)
    Me.[NYCAPS_JobID].Value = varSplitString(2)
End Sub

и их в форме загрузки я набрал Любая помощь будет оценена по достоинству

На какой линии вы получаете ошибку? ... и какова остальная часть сообщения об ошибке? У всех трех текстовых полей определенно есть значения? (и всегда будет?)
ashleedawg 13.09.2018 18:23

@ashleedawg Три текстовых поля, открывающиеся в новой форме, не ограничены. Это причина ошибки? а остальная часть сообщения об ошибке говорит о несоответствии типов. Ошибка возникает в моей строке Docmd

Tyrone 13.09.2018 18:36

При вводе кода IntelliSense покажет вам пропущенную запятую.

Gustav 14.09.2018 07:54
2
3
301
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны быть очень внимательны со всеми запятыми в списке опций DoCmd.OpenForm. Просто слишком легко вызвать несоответствие между тем, что вы и Access думаете о том, какие значения применяются к каким параметрам.

В вашем случае вы намереваетесь передать строку Me.txtFullName & "|" & Me.PATS_Job_Opening_ID & "|" & Me.NYCAPS_JobID в OpenArgs. К сожалению, вы пропустили запятую, поэтому Access думает, что вы вводите значение для WindowMode, которое должно быть числом. Следовательно, ошибка 13: "несоответствие типов"!

Сделайте это таким образом, и вы избавитесь от путаницы в отношении того, какое значение соответствует какой опции.

Dim strArgs As String
strArgs = Me.txtFullName & "|" & Me.PATS_Job_Opening_ID & "|" & Me.NYCAPS_JobID
Debug.Print strArgs ' make sure you got what you expect '
DoCmd.OpenForm FormName:="frmInputInfo", _
    DataMode:=acFormAdd, _
    WindowMode:=acDialog, _
    OpenArgs:=strArgs

Также в событии формы убедитесь, что у вас есть что-то для OpenArgs, прежде чем пытаться это сделать. В нынешнем виде, если форма когда-либо открывается без предоставления Split, ваш код, по сути, попытается выполнить OpenArgs, и это вызовет другую ошибку.

Вы можете протестировать перед разделением следующим образом:

If Len(Me.OpenArgs) > 0 Then
   ' do your split thing here '
End If

Спасибо, я не понял свою ошибку, но поймал ее.

Tyrone 18.09.2018 15:28

Другие вопросы по теме