Алексей, на всякий случай...
[QUOTE]If Layers.Layers(UserForm2.ComboBox2.ListIndex).CalculateZbyXY(X, Y, -777, False) <> -777 Then[/QUOTE]
Здесь последним параметром надёжнее поставить True.
В этом случае если триангуляция ещё не была построена в памяти (а строится она "по требованию"), то она будет принудительно построена, и вы получите отметку поверхности.
При использовании False (если триангуляция ещё не была построена, поскольку никто её не требовал), вам вернётся -777.
Многократные вызовы с True не затормозят работу. Триангуляция построится при первом запросе, а при последующих будет использоваться построенная, пока не поменяются исходные данные для построения триангуляции (Точки, Структурные линии, Трассы, формирующие поверхность в этот слой и т.п.).