Хорошо, давайте проанализируем это, используя ваш код "DEBUG". У нас есть два пользовательских класса, о которых мы ничего не знаем:
Имя класса: Экземпляр политики: policy
и Имя класса: ??? Экземпляр: p_baseManager
Тогда у нас есть строка, которая выдает ошибку:
policy.formName = policyDocument.Getitemvalue("Form")(0)
Из вашей тестовой строки
policy.formName = "FormName"
мы знаем, что policy.formName принимает Строка в качестве входных данных, и что левая сторона нашей ошибочной строки сама по себе выдает ошибку.
Теперь, если у нас есть «Несоответствие типов», это означает, что наша правая часть назначения не возвращает string.
Если бы p_baseManager.base_policyDocument
не вернул действительный NotesDocument, мы получили бы Object variable not set
в этой строке -> Мы можем заключить, что policyDocument является допустимым NotesDocument, а не Nothing
.
Теперь давайте посмотрим на GetItemValue("Form")
: он возвращает пустую строку, если документ не содержит элемент с именем «Форма»: пустая строка все еще является строкой -> в этом случае несоответствие типов.
Единственная возможность, что policyDocument.Getitemvalue("Form")(0)
не возвращает строку, - это если элемент присутствует, но содержит число или значение даты ...
Итак: Что делать сейчас ?
Прежде всего: Уверены ли вы, что ошибка находится в этой строке (вы использовали отладчик)?
Во-вторых: Используйте отладчик, чтобы узнать значение элемента Form вашего PolicyDocument
В-третьих: Как упоминал Пол Стивен Уизерс: Используйте обработку ошибок, чтобы ТОЧНО идентифицировать строку ошибки, код ошибки и ошибку.