Здравствуйте,господа. Помогите пожалуйста. В delphi-программе работаю с excel.
Программа создает 2 книги - 1.*ночные данные* и 2.*дневные данные*.
Далее не могу собрать эти данные в один документ. Пытаюсь скопировать *ночные* в *дневные*.
В обоих книгах столбцы b,c,d,e по-строчно заполнены одинаково:
книга1: b1:маша c1:саша d1:даша e1:наташа, b2:петя c2:коля d2:ваня e2:толик,
книга2: b1:маша c1:саша d1:даша e1:наташа,b2:петя c2:коля d2:ваня e2:толик, и т.д.
Количество столбцов вообще в обоих книгах одинаково, количество строк разное и строки конечно могут быть не по порядку и поменяны.
Есть столбцы в *ночных* (k,l,n), данные из которых мне нужно скопировать в *дневные*.
В общем делаю так (но с ошибками блин

):
По каждой строчке от начала до конца книги1 беру диапазон1 b[i]:e[i], диапазон2 k[i]:l[i], диапазон3 n[i].
Ищу в книге2 диапазон1, номер строки где он прячется присваиваю j, и вставляю диапазон2 в k[j]:l[j], диапазон3 n[j].
Прилагаю код процедуры. Что-то в цикле я где-то неправильно делаю,помогите разобраться. Спасибо.
Код:
procedure TFobexcel.Button5Click(Sender: TObject);
var
diapazon1,vstavka1,vstavka2,vst1,vst2,FirstAddress1:string;
i:integer;
diapazon1_range,ztext,rangevstavka1,rangevstavka2,rangecopy1,rangecopy2:variant;
begin
//первый столбец на листе 3
colfirst:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.column;
//кол-во столбцов на листе 3
collast:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.columns.count;
//первая строка на листе 3
rowfirst:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.row;
//кол-во строк на листе 3
rowlast:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.rows.count;
//перебор по строкам.
//Пропускаем "шапку"- c 9 строчки и до конца листа 3
for i:= 9 to rowlast do begin
//дипазон1-это i-тая строка A[i]:D[i] с названиями
//ExcelChar - функция перевода номера столбца в букву
diapazon1:=ExcelChar(colfirst)+inttostr(i)+':'+ExcelChar(colfirst+3)+inttostr(i);
//определяем в excel
diapazon1_range:=E1.WorkBooks.Item[3].ActiveSheet.Range[diapazon1];
//Вот это - текст или value- нужно потом искать в листе 6
ztext:=diapazon1_range.value; // или .text?
//vst1-это i-тая строка k[i]:l[i] с нужными данными
vst1:=ExcelChar(colfirst+10)+inttostr(i)+':'+ExcelChar(colfirst+11)+inttostr(i);
//vst2-это i-тая строка n[i] с другими нужными данными
vst2:=ExcelChar(colfirst+13)+inttostr(i);
//определяем vst1 в excel как диапазон для копирования на листе 3
rangecopy1:=E1.WorkBooks.Item[3].ActiveSheet.Range[vst1];
//копируем в буфер
rangecopy1.copy;
//определяем vst2 в excel как диапазон для копирования на листе 3
rangecopy2:=E1.WorkBooks.Item[3].ActiveSheet.Range[vst2];
//копируем в буфер
rangecopy2.copy;
try //обработка есес-сно:)
//FindRange1-диапазон на листе 6, где ищем ztext из листа 3
FindRange1 := E1.WorkBooks.Item[6].ActiveSheet.usedrange.find(ztext); //дневное
if not VarIsEmpty(FindRange1) then begin
FirstAddress1 := FindRange1.Address;
repeat
find:=FindRange1.Row; //нашли ztext, в строке find
//vstavka1-это строка k[i]:l[i] на листе 6, куда встанут нужные данные из листа 3
vstavka1:=ExcelChar(colfirst+10)+inttostr(find)+':'+ExcelChar(colfirst+11)+inttostr(find);
//vstavka1-это строка k[i]:l[i] на листе 6, куда встанут другие нужные данные из листа 3
vstavka2:=ExcelChar(colfirst+13)+inttostr(find);
//определяем дипазоны для вставки в excel
rangevstavka1:= E1.WorkBooks.Item[6].ActiveSheet.Range[vstavka1];
rangevstavka2 :=E1.WorkBooks.Item[6].ActiveSheet.Range[vstavka2];
//вставляем данные листа 3 из буфера на лист 6
rangecopy1.copy(rangevstavka1);
rangecopy2.copy(rangevstavka2);
// повторяем поиск
FindRange1 := E1.WorkBooks.Item[6].ActiveSheet.usedrange.FindNext(After :=FindRange1);
// until FirstAddress1 = FindRange1.Address;
end;
except
messagebox(handle,'Просто нажми меня','Внимание!',0);
end;
end;
end;