【发布时间】:2020-01-23 01:05:03
【问题描述】:
我是 Access 的新手,目前在 HIV 研究实验室担任数据系统经理。我们使用 Qualtrics 为参与者创建在线调查,我们使用 Access 调用 Qualtrics API 将参与者添加到 Qualtrics 联系面板,自动为他们生成调查链接,通过电子邮件将调查分发链接发送给参与者,并通过导出的文件存储他们的回复.
这里是 Qualtrics API 文档的链接: https://api.qualtrics.com/
我正在将所有 Qualtrics 函数迁移到 v3,并在尝试为参与者生成调查分发链接并向他们发送包含调查链接的电子邮件时遇到此运行时参数而非可选错误。
这是我正在处理的 Qualtrics 函数的 API 文档链接 - CreateSurveyDistributionLinks:
https://api.qualtrics.com/reference#distribution-create-1
https://api.qualtrics.com/reference#email-mailing-list
下面是我的代码:
Public Function createSurveyDistributionLinks(strSubject As String, _
strMessageID As String, strRecipients As String, strSurveyID As String, _
dtSendDate As Date, dtExpirationDate As Date)
'note: this function does not contain message feature as it is not
' used in 1KS. Can add for other uses by including a dicMessage object
Dim strURL As String
Dim JSON As Object
Dim dicMessage As Dictionary
Dim dicHeader As Dictionary
Dim strBodyJson As String
Dim strFromEmail As String
Dim strFromName As String
Me.initObject
strURL = "https://az1.qualtrics.com/API/v3/distributions"
strFromEmail = "day2day%40chestnyc.org"
strFromName = "day2day"
strFromName = Replace(strFromName, " ", "%20") 'Convert spaces
strSubject = Replace(strSubject, " ", "%20") 'Convert spaces
Set dicHeader = New Dictionary
dicHeader("fromEmail") = strFromEmail
dicHeader("fromName") = strFromName
dicHeader("subject") = strSubject
Set dicMessage = New Dictionary
dicMessage("messageId") = strMessageID
dicMessage("libraryId") = strLibID
dicMessage("header") = dicHeader
Set dicBody = New Dictionary
dicBody("recipients") = strRecipients
dicBody("surveyId") = strSurveyID
dicBody("sendDate") = formatQualtricsTimes(dtSendDate)
dicBody("expirationDate") = formatQualtricsTimes(Nz(dtExpirationDate, "2050-01-01 00:00:00"))
dicBody("message") = dicMessage
strBodyJson = JsonConverter.ConvertToJson(dicBody)
Debug.Print strBodyJson
With xmlhttprequester
.Open "POST", strURL
.setRequestHeader "X-API-TOKEN", strToken
.setRequestHeader "Content-Type", "application/json"
.send strBodyJson
.waitForResponse
If InStr(.responseText, "EMD_") > 0 Then
'it worked!
Set JSON = JsonConverter.ParseJson(.responseText)
Dim strrand As String
createSurveyDistributionLinks = JSON("result")("id")
Debug.Print JSON("result")("id")
Else
Debug.Print "an error has occurred" & vbNewLine & .responseText
createSurveyDistributionLinks = "false"
End If
End With
End Function
这是我遇到运行时错误的那一行:
strDistributionID = oQual.createSurveyDistributionLinks(strSubject, _
strMessageID, strRecipientID, strSurveyID, CStr(dtExpTime), CStr(dtTime))
非常感谢您的所有见解,真的希望我的代码有效!
最好, 杰斯
【问题讨论】:
-
检查您的 VBA 选项并确保您在错误处理设置中选中了“Break in class module”。为什么在调用函数时使用 CStr() - 最后两个参数不期望日期作为参数?
-
嗨,蒂姆,谢谢您的回复!我已经删除了 Cstr() 并且仍然有同样的问题
-
您是否在错误处理设置中进行了我建议的更改?您传递的所有参数是否都填充了值?您的函数有 6 个参数,并且您传递的参数数量相同,因此很难看出问题所在。
-
嗨蒂姆,我确实更改了错误处理设置并在每一行代码上放置了停止符号,弹出相同的错误但现在在这一行:dicMessage("header") = dicHeader"跨度>
标签: vba api ms-access httprequest qualtrics