08. januar 2008 - 22:03Der er
16 kommentarer og 1 løsning
Skriv Cellvalue til database
Hej
Jeg har brug for lidt hjælp, jeg har et DDE-link som opdateres løbende fra et andet program.
Nu ønsker jeg så at skrive celle-værdien til en database hver gang den ændrer sig.
Jeg tænker på om der ikke findes en slags onChange på cellen? En event af en art... I behøver ikke gå i dybden med databaseconnections, det har jeg styr på, det er kun registreringen af eventen.
Og hvis det kan laves, kan jeg så være så heldig at det også kan laves asynkront?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Der kan fanges i ThisWorkbook modulet, her er et eksempel.
Det gælder for Ark1 celle A1
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = ("Ark1") And Target.Address = ("$A$1") Then MsgBox " Ændring" End If
den vil fange ændringen, med det samme og udføre koden, men om den er hurtig nok til at skrive til databasen, inden den ændrer sig igen, kommer jo an på en prøve.
du sætter din kode ind, til at overføre til databasen, i stedet for denne
Jeps.. så langt er jeg med ;-) Sidder normalt og udvikler C# og MSSQL og der har man jo asynkrone function calls, men har ikke det helt vilde forstand på Excel.
Jeg vil lige teste det og så give dig point, men lige for at være helt sikker.. Ved du om Excel understøtter asynkrone kald, altså en slags background process som ikke forstyrrer arket?
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = ("Sheet2") And Target.Address = ("$A$1") Then MsgBox " Ændring" End If
End Sub
Det er en engelsk version Excel jeg kører med.... anyway, jeg har på Sheet2 lavet en copy på flg. måde: =Sheet1!$A$1
Men det lader ikke til at SheetChange fanger den, det går fint hvis jeg refererer direkte til Sheet1, men det kan jeg ikke pga. DDE-linket.
"$A$1:$N$13" det er fordi at der er sket ændringer i alle disse celler samtidig.
Dollertegnene betyder at det er et område der er låst både på rækker og kolonner, når man bruger dem i en formel, men Target.Address tager dem med også.
Okay.. Så hvis jeg skal smide celleværdierne ind i en database skal jeg iterere igennem 1 til 13 for hver SheetChange og så naturligvis i den kolonne som jeg skal lagre?
Jeg kan fortælle dig at det kører nu, funktionen er blevet kaldt ca. 20000 gange på 4 minutter, så du kan godt se der ikke er tid til at undersøge meget med for mange if's :-)
Nej jeg skal ikke have alle ind i db'en, kun der hvor der er ændringer ifht. sidste skrivning. Nu sidder jeg og kigger lidt på VBA, man kan jo lave normal kode, modules og classes, så kan jeg sikkert også lave noget async ADODB.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.