Консультация № 186432
04.07.2012, 10:12
118.25 руб.
0 6 1
Уважаемые эксперты! Добрый день. Пожалуйста, ответьте на вопрос: В моем приложении не выполняется условие. Написанное приложение используетсся для заполнения разнообразных бланков. Есть главная форма из которой открываются дочерние формы и происходит заполнение. В процессе использую шаблон Excel.В зависимости от типа бланка в шаблоне удаляются либо остаются листы для заполнения.
Ниже часть кода с ошибкой.
Код:
procedure TForm2.DPrint;
var
Ex, Workbook, L1, L2, L3, L4, L5, FitToPagesTall,FitToPagesWide,
CenterHorizontally, CenterVertically, Orientation, PaperSize:Variant;
begin

dt := Form2.Edit35.Text;
n1 := Form2.ComboBox1.Text;

L1 := 'Лист1';
L2 := 'Лист2';
L3 := 'Лист3';
L4 := 'Лист4';
L5 := 'Лист5';

Ex := CreateOleObject('Excel.Application');

Ex.Application.EnableEvents := false;
Ex.DisplayAlerts := False;

Workbook := Ex.WorkBooks.Open('C:\Prog\Sn.res');

Ex.Visible := false;
Ex.ActiveWorkBook.WorkSheets['L15'].Delete;
Ex.ActiveWorkBook.WorkSheets['L14'].Delete;
Ex.ActiveWorkBook.WorkSheets['L13'].Delete;
Ex.ActiveWorkBook.WorkSheets['L12'].Delete;
Ex.ActiveWorkBook.WorkSheets['L11'].Delete;
Ex.ActiveWorkBook.WorkSheets['L10'].Delete;
Ex.ActiveWorkBook.WorkSheets['L9'].Delete;
Ex.ActiveWorkBook.WorkSheets['L8'].Delete;
Ex.ActiveWorkBook.WorkSheets['L7'].Delete;
Ex.ActiveWorkBook.WorkSheets['L6'].Delete;

Ex.DisplayAlerts:=True;
Ex.ActiveWorkBook.WorkSheets[1].Name:=L1;
Ex.ActiveWorkBook.WorkSheets[2].Name:=L2;
Ex.ActiveWorkBook.WorkSheets[3].Name:=L3;
Ex.ActiveWorkBook.WorkSheets[4].Name:=L4;
Ex.ActiveWorkBook.WorkSheets[5].Name:=L5;

If CheckBox15.State = cbUnchecked Then //Если CheckBox15 выключен удаляем лист5
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[5].Delete;
Ex.DisplayAlerts:=True;

If CheckBox14.State = cbUnchecked Then //Если CheckBox14 выключен удаляем лист4
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[4].Delete;
Ex.DisplayAlerts:=True;

If CheckBox13.State = cbUnchecked Then //Если CheckBox13 выключен удаляем лист3
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[3].Delete;
Ex.DisplayAlerts:=True;


У меня не смотря на состояние CheckBox15,14,13, удаляет листы 5,4,3.Включены CheckBoxы или выключен все равно листы удаляются. В чем у меня ошибка?

Обсуждение

давно
Посетитель
352040
133
04.07.2012, 10:33
общий
Забыл уточнить. Такой "глюк" только на 2 форме, на остальных формах (всего форм 10) условия по CheckBox выполняются. Заранее благодарю за ответ.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Академик
320937
2216
04.07.2012, 10:41
общий
Адресаты:
Добрый день! Begin-End вставьте. После If выполняется только один оператор.
давно
Академик
320937
2216
04.07.2012, 10:42
общий
04.07.2012, 10:43
Адресаты:
Код:
If CheckBox15.State = cbUnchecked Then 
//Если CheckBox15 выключен удаляем лист5
begin
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[5].Delete;
Ex.DisplayAlerts:=True;
end;
Неизвестный
04.07.2012, 10:43
общий
Адресаты:
У Вас в условие попадала только первая строка. Вторые и третьи строки выполняются безусловно.
Исправьте как-то так:

If CheckBox15.State = cbUnchecked Then //Если CheckBox15 выключен удаляем лист5
begin
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[5].Delete;
Ex.DisplayAlerts:=True;
end;

If CheckBox14.State = cbUnchecked Then //Если CheckBox14 выключен удаляем лист4
begin
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[4].Delete;
Ex.DisplayAlerts:=True;
end;

If CheckBox13.State = cbUnchecked Then //Если CheckBox13 выключен удаляем лист3
begin
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[3].Delete;
Ex.DisplayAlerts:=True;
end;
давно
Посетитель
352040
133
04.07.2012, 12:01
общий
Адресаты:
Благодарю за подсказку. Все работает. Тему можно закрыть.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Академик
320937
2216
04.07.2012, 12:24
общий
это ответ
Здравствуйте, Владимир!
Ошибка заключается в неверном использовании краткой инструкции If
Посмотрим в справку Delphi:
Код:
If expression Then statement

Под "statement" понимается единственный оператор. Если требуется объединить для выполнения в ветке Then несколько операторов, их необходимо объединить в составной оператор (compound statement).
С учетом этого часть Вашего кода будет выглядеть так!
Код:
If CheckBox15.State = cbUnchecked Then 
//Если CheckBox15 выключен удаляем лист5
begin
Ex.DisplayAlerts:=False;
Ex.ActiveWorkBook.WorkSheets[5].Delete;
Ex.DisplayAlerts:=True;
end;

Удачи!
5
Быстро, кратко, точно.
Форма ответа