【问题标题】:MS-Access get error message when calling Qualtrics API run-time error 449 Argument Not OptionalMS-Access 在调用 Qualtrics API 运行时错误 449 Argument Not Optional 时收到错误消息
【发布时间】: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


【解决方案1】:

在 VBA 中使用自定义类时,您需要确保将 VBA 错误处理设置为“Break in class module”,否则您将看不到类实例中的潜在错误(您只会在入口处收到错误点 - 在这种情况下,调用 oQual.createSurveyDistributionLinks) 的行。

在将对象类型变量分配给字典时,您的代码应包含Set

Set dicMessage("header") = dicHeader 

Set dicBody("message") = dicMessage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    相关资源
    最近更新 更多