Спасибо Дэвиду за тестирование кода в VBA. Я должен был сделать это, прежде чем отправлять вопрос.
Обновление: я тестировал код, используя VBA. Оно работает. Поэтому я вернулся к своему коду VB.Net и нашел проблему. Я думаю, что есть ошибка в свойствах VB.Net и вот почему.
У меня есть класс ExcelSheet, который содержит ссылку на Excel.Worksheet. Он реализует индексатор [row, colum], который возвращает другой класс ExcelRange, который содержит ссылку на Excel.Range. Ошибка, которую я заметил, заключается в том, что 1-й MsgBox отображает формулы в виде их строкового представления, а 2-й MsgBox отображает оцененные данные. Моим быстрым решением было зафиксировать формулу в конструкторе.
Private myCell As Excel.Range
Private myFormula As String
Friend Sub New(ByRef cell As Excel.Range)
myCell = cell
MsgBox(myCell.Formula,,"Constructor") 'Displays formula as string
myFormula = myCell.Formula 'Saving formula as string
End Sub
Public ReadOnly Property Formula() As String
Get
MsgBox(myCell.Formula,,"Property") 'Displays evaluated data
Return myFormula 'Return formula saved as string in constructor
End Get
End Property
Это решило мою проблему, но мне любопытно, почему VB.Net ведет себя так.