У вас здесь много проблем, поэтому я бы рекомендовал работать по 1 шагу за раз.
1) вам нужно НАЙТИ текст, который вы заменяете. Поскольку вы заменяете его таблицей, вы действительно не можете использовать опцию REPLACEALL объекта find, поэтому избавьтесь от всего этого. Получите диапазон CONTENT документа в переменную Range, оттуда НАЙДИТЕ, а затем выполните поиск. Диапазон, из которого вы получили FIND, будет сброшен, чтобы указывать на конкретный найденный текст (если есть), а затем вы можете управлять этим диапазоном.
Например
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="blue", Forward:=True
If myRange.Find.Found = True Then myRange.Bold = True
2) Далее вы путаете смещения внутри строки со смещениями в документе, как в этом коде
int FirstChr = srng.Text.IndexOf(find);
if (FirstChr != -1)
{
Word.Range ts = Application.ActiveDocument.Range(FirstChr,FirstChr);
Это будет иногда, но очень редко, работать. Это зависит от множества вещей в Word. Лучше найти то, что вам нужно, с помощью поиска, а затем манипулировать текстом только с диапазонами.
Здесь действительно хорошая статья о НАЙТИ и ЗАМЕНИТЬ в слове.
http://msdn.microsoft.com/en-us/library/aa211953%28office.11%29.aspx
Я бы написал процедуру, чтобы НАЙТИ и ВЫБЕРИТЕ текст, который вы ищете первым. Убедитесь, что это работает во всех случаях, ТО, используя диапазон найденного текста, работайте с его заменой таблицей.
как только вы нашли текст, вы после