[Delphi/Excel] Validate data in een cel

Pagina: 1
Acties:
  • 226 views sinds 30-01-2008
  • Reageer

  • leerling
  • Registratie: Maart 2002
  • Laatst online: 22-05 07:24
Wanneer er data in een cel ingevoerd wordt, moet deze data gevalideerd worden.
Het gaat om te checken of het sofinummer een geldig nummer is.
Ik krijg nu alleen de melding: 'OLE error 800A03EC'.
Nu kan ik weinig informatie vinden over deze foutmelding via google e.d.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var
   Wk : _Worksheet;
begin
   //apExcel is a TExcelApplication
   apExcel.Disconnect;
   apExcel.WorkBooks.Add( null, 0 );
   apExcel.SheetsInNewWorkbook[0] := 1;
   apExcel.Visible[0] := True;

   Wk := apExcel.ActiveSheet as _Worksheet;
   with Wk do begin 
      with Range[ 'A16', 'A16' ].Validation do begin
         Delete;
         Add(xlValidateCustom, 
                xlValidAlertStop, 
                xlBetween, 
               '=GELIJK(REST(((DEEL(A16;1;1)*9)+(DEEL(A16;2;1)*8)+(DEEL(A16;3;1)' +
                  '*7)+(DEEL(A16;4;1)*6)+(DEEL(A16;5;1)*5)+(DEEL(A16;6;1)*4)+' +
                  '(DEEL (A16;7;1)*3)+(DEEL(A16;8;1)*2));11);DEEL(A16;9;1))', '');

         IgnoreBlank    := True;
         InCellDropDown := True;
         ErrorTitle     := '9test';
         ErrorMessage   := 'message';
         ShowInput      := True;
         ShowError      := True;
      end;
   end;
   apExcel.Disconnect;
end;


Weet iemand wat hier het probleem kan zijn?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En op welke regel precies krijg je de foutmelding?

We adore chaos because we like to restore order - M.C. Escher


  • leerling
  • Registratie: Maart 2002
  • Laatst online: 22-05 07:24
Op de 'add' regel (coderegel 14-19).
Ik weet wat het probleem nu is, maar heb alleen nog geen oplossing.

het probleem is namelijk dat hij gelijk wil gaan valideren, terwijl er dus nog geen data in de cel staat. Hierdoor wordt de foutmelding gegenereerd.
Terwijl Negeer lege cellen aan staat... (IgnoreBlank := True)

edit:
Als ik dus excel opstart en een sofinummer invult en daarna validate data aanzet met deze formule, dan doet hij het wel.

[ Voor 25% gewijzigd door leerling op 16-09-2004 10:07 ]


  • leerling
  • Registratie: Maart 2002
  • Laatst online: 22-05 07:24
k heb het nu op een minder nette manier opgelost:

Eerst voer ik een sofinummer in, dan voeg ik de validatieformule in en dan verwijder ik het sofinummer weer.
Dit werkt wel, maar dit is niet netjes opgelost vind ik.

Ik sta dus nog steeds open voor een oplossing...

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 12-03 16:55
Volgens mij moeten de formules die je invoert in code in het engels. Neem een macro op terwijl je de formule erin plaatst om de engelse variant te krijgen.

  • leerling
  • Registratie: Maart 2002
  • Laatst online: 22-05 07:24
Elissen schreef op 16 september 2004 @ 11:26:
Volgens mij moeten de formules die je invoert in code in het engels. Neem een macro op terwijl je de formule erin plaatst om de engelse variant te krijgen.
Dit had ik ook al geprobeerd, maar dat doet hij ook niet. De formules moet ik echt in het nederlands invoeren. Ik werk regelmatig met Delphi/Excel en de formules moeten echt altijd in het nederlands.

Verwijderd

leerling schreef op 16 september 2004 @ 10:48:
k heb het nu op een minder nette manier opgelost:

Eerst voer ik een sofinummer in, dan voeg ik de validatieformule in en dan verwijder ik het sofinummer weer.
Dit werkt wel, maar dit is niet netjes opgelost vind ik.

Ik sta dus nog steeds open voor een oplossing...
je excelobject wordt geinstantieerd via Delphi, dus zou het kunnen dat er problemen zijn met verwijzing naar een activesheet. probeer eens met ook een variabele voor het workbook dat je toevoegt te definiëren, zodat je naar het volledige pad van het range kunt verwijzen ipv. activesheet te gebruiken. maw. je moet het delphi equivalent krijgen van:
set wkb=apexcel.workbooks.add
set wk=wkb.worksheets(1)
with apExcel.wkb.wk.range("a16").validation
.delete
.add(blaat)
.ignoreblanks=true
..enz...

overigens vind ik het wel bizar dat de nederlandstalige formule aangenomen wordt, maar dat werkt blijkbaar wel.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 19:25

Delphi32

Heading for the gates of Eden

Ik zie dat je nu eerst de formule in de Validation hangt, en daarna pas IgnoreBlanks op True zet. Helpt het misschien om die twee statements om te draaien, dus eerst IgnoreBlanks zetten en dan pas de formule erin?

Verwijderd

Delphi32 schreef op 16 september 2004 @ 11:41:
Ik zie dat je nu eerst de formule in de Validation hangt, en daarna pas IgnoreBlanks op True zet. Helpt het misschien om die twee statements om te draaien, dus eerst IgnoreBlanks zetten en dan pas de formule erin?
dit zou de logische oplossing zijn, maar dat gaat niet in excel, eerst moet de validatie toegevoegd worden.

  • leerling
  • Registratie: Maart 2002
  • Laatst online: 22-05 07:24
Voor de validation wordt er ook al data naar de worksheet geschreven, die worksheet is dus wel aktief. Dat blijkt ook wel uit het feit dat het nu wel werkt als er gegevens in de cel staan. Het lijkt dus of hij eerst wil valideren voordat hij werkelijk de validatie toevoegt.

Ik vind het ook vreemd dat de formules in het nederlands moeten, maar de engelse werken niet :?
Na compilatie van het programma maakt het overigens niet uit of je met een engelse of nederlandse versie van excel werkt.

En eerst IgnoreBlanks zetten werkt inderdaad niet, dit had ik ook al geprobeerd.

[ Voor 7% gewijzigd door leerling op 16-09-2004 11:59 ]


Verwijderd

leerling schreef op 16 september 2004 @ 11:59:
[...]


Voor de validation wordt er ook al data naar de worksheet geschreven, die worksheet is dus wel aktief.
dat er data succesvol geschreven kan worden, wil niet noodzakelijk zeggen dat validatie op dezelfde manier kan ingesteld worden. iig, het enige wat ik kan bedenken is dat er iets mis is met het benaderen van het bereik, vandaar m'n voorstel om dat te veranderen.
Pagina: 1