12. februar 2002 - 10:28Der er
21 kommentarer og 2 løsninger
Problemer med kode i VBA
Jeg har et problem med indlæsning af data i mit program. Problemet opstår mår jeg indlæser en txt-file i mit program. Stigen til denne txt-file hedder noget som C:\programmer\temp\bla bla.. når så programmet åbnes på en anden PC får jeg selvfølgelig en fejl. Denne fejl ordnes med GetOpen, hvor brugeren kan lede efter den pågældende txt-file….. MEN næste gang brugeren åbner programmet skal denne sti gerne huskes!!! Med andre ord er det muligt runtime, at overskrive i VBAkoden??
' Gemmer data i reg-databasen********************************************** SaveSetting "Brev.dot", "bruger", "Fornavn", txtForNavn
Noter: "brev.dot" og "Bruger" er områder reg-databasen "Fornavn" er variablens navn i reg-databasen "txtForNavn" er mit objekt, hvor data hentes fra
' Henter eventuelle data fra reg-databasen txtForNavn = GetSetting("Brev.dot", "Bruger", "Fornavn", "") Noter: "brev.dot" og "Bruger" er områder reg-databasen "Fornavn" er variablens navn i reg-databasen "txtForNavn" er mit objekt, hvor data hentes til
Du kan komme i kontakt med registreringsdatabasen med START-knappen "KØR" skriv REGEDIT og tryk OK. Jeg kan kun gentage rvm PLACERINGEN AF REGISTRERINGSDATABASEN ER FULDSTÆNDIG UNDERORDNET FOR DIN VBA KODE. Du bruger blot SaveSetting og GetSetting til at komme i kontakt med den. Brug eksemplerne fra hjælpen, og du er meget langt.
okay der er nok underordnet hvor jeg finder reg. databasen, men jeg fatter kan ikke rigtig hvad det er jeg skal gøre... skal jeg lave en makro der skriver til reg. db ven Åbning af regnearket, eller skal jeg bruge
Dim FName As Variant FName = Application.GetOpenFilename _ (filefilter:="Text Files(*.txt),*.txt,All Files (*.*),*.*")
og selv lade brugeren finde filen, hvor efter der skrives til reg. bd. ?? i så fald hvordan "fanger" jeg så stien til filen??
Man kan da godt lave en selvmodificerende kode. Denne her er feks: Fra start skal fil1 og Changefrom være ens. Hvis fil1 ikke findes vil koden i linie 2 blive ændret til det filnavn filnavn = Application.GetOpenFilename() returnerer med. Sub Macro1() fil1 = "D:\Personal\Test1.xls" On Error GoTo fejl Workbooks.Open Filename:=fil1 Exit Sub fejl: filnavn = Application.GetOpenFilename() workbooks.open filename = filnavn selfmodify (filnavn) End Sub
Sub selfmodify(fn) LineToChange = 2 ChangeTo = fn ChangeFrom = "D:\Personal\Test1.xls" Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule With VBCodeMod TmpLine = .Lines(LineToChange, 1) y = InStr(1, TmpLine, ChangeFrom, vbTextCompare) If y > 0 Then NewLine = Mid(TmpLine, 1, y - 1) & ChangeTo & Mid(TmpLine, y + Len(ChangeFrom)) .replaceline LineToChange, NewLine ThisWorkbook.Save Exit Sub End If End With End Sub
LineToChange er det linienummer der skal ændres. Når linien er udskiftet gemmes filen med koden og nu vil den altid åbne den nye fil (indtil den en dag er væk, så vil koden køre igen)
Der er nok nemmere, at skrive til Databasen, men eftersom du jo har løst mit problem, skal takken nok tilfalde dig... dog har jeg valgt, at gå videre med rvm´s løsning, mit regneark er på 1,3MB, og det tager sin tid når man skal gemme det med ændringer.. MANGE TAK
Bambus> selv tak. jeg ville nok også selv have valgt den anden løsning, da den ser fin ud og er lettere, men jeg skulle jo lige prøve at lave en selvmodificerende kode.
-> Bak: Prøv at lægge din fil på et netværk, hvor der er virusbeskyttelse. Det kan du ikke, da din kode er viruslignende og derfor vil filen blive afvist...
Men når vi nu snakker om den samme fil (hvilket min kode ikke nødvendigvis gør), hvorfor så ikke bare ændre på en af de indbyggede variable og tjekke på den. F.eks.
If ActiveWorkbook.BuiltinDocumentProperties("Keywords") = "" Then
rvm> god ide med properties, den kan sikkert bruges til mange andre formål også. Enten er vort netværk ikke særlig godt beskyttet, eller også har vi et andet AV-program (mcafee) for jeg har ingen problemer her.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.