HiSpeed Skrevet 16. februar 2010 Del Skrevet 16. februar 2010 Jeg holder på å lage en brevmal og ønsker å bruke en ini-fil hvor brukerinformasjon er lagret med informasjon om flere brukere. Har laget en brevmal med dialogboks men er usikker på hvordan jeg henter data fra en ini-fil for utfylling. Det jeg ønsker er at når bruker bruker en Word-mal så skal noen felter automatisk utfylles knyttet opp mot den brukeren som bruker Word-malen. Er det noen som kan hjelpe og/eller har noen eksempeler? Lenke til kommentar
Harald Staff Skrevet 16. februar 2010 Del Skrevet 16. februar 2010 Heisann Jeg har pleid å gjøre det sånn: Option Explicit Private Declare Function GetPrivateProfileString _ Lib "kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpSectionName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpbuffurnedString As String, _ ByVal nBuffSize As Long, _ ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString _ Lib "kernel32" Alias "WritePrivateProfileStringA" _ (ByVal lpSectionName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String) As Long Const IniFil As String = "C:\Temp\Settings.ini" Sub WriteToIni(Seksjon As String, Nokkel As String, Verdi As String) Call WritePrivateProfileString(Seksjon, Nokkel, Verdi, IniFil) End Sub Function ReadIni(Seksjon As String, Nokkel As String) As String Dim sBuffer As String sBuffer = Space(255) Call GetPrivateProfileString(Seksjon, Nokkel, "Ikke funnet", sBuffer, 255, IniFil) ReadIni = Trim$(sBuffer) ReadIni = Replace(ReadIni, Chr(0), "") End Function Sub Test() Dim Verdi As String Verdi = InputBox("Port nummer:") Call WriteToIni("Server", "Port", Verdi) DoEvents MsgBox ReadIni("Server", "Port"), vbInformation, "Inifil sier:" End Sub HTH. Beste hilsen Harald Lenke til kommentar
HiSpeed Skrevet 16. februar 2010 Forfatter Del Skrevet 16. februar 2010 (endret) Tusen takk for innspill! Dette ble litt komplisert for meg Er det for mye å spørre om du har en ferdig mal som jeg kan laste ned for nærmere utforsking Er ingen reser i programmering men hvis jeg har en eksempelmal så finner jeg nok ut av det. Endret 16. februar 2010 av HiSpeed Lenke til kommentar
Harald Staff Skrevet 16. februar 2010 Del Skrevet 16. februar 2010 Bare åpne VB-editoren i Word eller Excel. Sett inn modul, lim inn all koden min. Opprett en mappe C:\Temp på pc'en din (eller endre banen i koden til en eksisterende mappe). Den nederste koden Sub Test viser deg hvordan du bruker resten, hvordan skrive info og hvordan lese info. Kjør den en gang. Åpne så C:\Temp\Settings.ini i notisblokk og se hva som har skjedd. Derfra er det bare å sende info inn og ut av filen slik det gjøres i koden Sub Test. Resten av greiene trenger du verken forstå eller røre, de bare er der og virker. Lenke til kommentar
HiSpeed Skrevet 16. februar 2010 Forfatter Del Skrevet 16. februar 2010 Takk! Fikk det til men har et par spm. 1. Hvordan blir koden hvis settings.ini skal ligge i mappe for Arbeidsgruppemaler? Blir dette riktig? Dim IniFil As String, UserDotPath As String UserDotPath = Options.DefaultFilePath(wdWorkgroupTemplatesPath) IniFil = UserDotPath & "\settings.ini" 2. Skjønner ikke helt hvordan den leser fra filen og hvordan jeg kan knytte dette til TXT i UserForm? Lenke til kommentar
Harald Staff Skrevet 16. februar 2010 Del Skrevet 16. februar 2010 1 tja virker det hos deg da? Får ikke testet nå, sorry. 2 Me.Textbox1.Text = ReadIni("Server", "Port") og for å skrive tilbake etter bruk Call WriteToIni("Server", "Port", Me.Textbox1.Text) Lenke til kommentar
HiSpeed Skrevet 16. februar 2010 Forfatter Del Skrevet 16. februar 2010 (endret) Fikk dette til! Håper at jeg kan spørre mer. 1. Hvordan lages System.ini når det skal registrere flere brukere? Eks: [server] Bruker="Ola Normann" Tittel="Daglig leder" osv. Bruker="Kari Normann" Tittel="" 2. Usikker på hvordan "kallet" blir til rett bruker når bruker starter malen fra en server. Endret 16. februar 2010 av HiSpeed Lenke til kommentar
HiSpeed Skrevet 16. februar 2010 Forfatter Del Skrevet 16. februar 2010 Denne virker: Function ReadIni(Seksjon As String, Nokkel As String) As String Dim sBuffer As String, IniFil As String, UserDotPath As String UserDotPath = Options.DefaultFilePath(wdWorkgroupTemplatesPath) IniFil = UserDotPath & "\Settings.ini" sBuffer = Space(255) Call GetPrivateProfileString(Seksjon, Nokkel, "Ikke funnet", sBuffer, 255, IniFil) ReadIni = Trim$(sBuffer) ReadIni = Replace(ReadIni, Chr(0), "") End Function Lenke til kommentar
Harald Staff Skrevet 16. februar 2010 Del Skrevet 16. februar 2010 (endret) Jeg har sett meg blind på "ini-fil" og oversett "informasjon om flere brukere". Sorry. En tabell av ett eller annet slag, dvs en enkel database, er mye bedre egnet til sånt. En liten Access-fil på et fellesområde kan gjøre susen. Men da begynner spørsmålet å bli stort og komplekst. Hvor store mengder data? Hvor mye og ofte skal det skrives tilbake? Hvordan identifiseres brukeren? Hva har du av tilgjengelig verktøy? Og hva skal dette gjøre sånn helt konkret? Endret 16. februar 2010 av Harald Staff Lenke til kommentar
HiSpeed Skrevet 16. februar 2010 Forfatter Del Skrevet 16. februar 2010 (endret) Det skal ikke skrives noe tilbake til *.ini. Det skal hentes kun hentes brukerinformasjon som navn, tittel, osv. som automatisk skal fylles inn slik at brukeren slipper å gjøre dette manuelt når han/hun skal skrive et brev. Det betyr at det er flere brukere som skal bruke samme mal og info. om brukeren skal fylles automatisk inn i noen felt. Endret 16. februar 2010 av HiSpeed Lenke til kommentar
Harald Staff Skrevet 16. februar 2010 Del Skrevet 16. februar 2010 (endret) Okei da er du i mål før OL i kveld Åpne notisblokk, fyll den med tabulatorseparert info som dette: A Harald Sjef B Annette Prosjektleder C Leif Purser D Gry Selger Lagre som C:\Temp\Ansatte.txt. EDIT ser at tabulator erstattes av en serie mellomrom her. Erstatt tilbake. Lim dette inn i VB editoren: Sub HentMeg() Dim iFnum As Integer Dim Linje As String Dim Felt() As String iFnum = FreeFile Open "C:\Temp\Ansatte.txt" For Input As #iFnum While Not EOF(iFnum) Line Input #iFnum, Linje Felt = Split(Linje, vbTab) If Felt(0) = "B" Then MsgBox "Hei " & Felt(1) & vbNewLine & Felt(2) End If Wend Close #iFnum End Sub Koden åpner tekstfilen, looper linje for linje, og splitter feltene ved tabulator. I dette tilfelle stopper den ved brukerid Felt(0) lik B og gjør noe med navn og tittel. Du kan like gjerne droppe If og fylle lister eller comboer med alt innhold. HTH. Beste hilsen Harald Endret 16. februar 2010 av Harald Staff Lenke til kommentar
HiSpeed Skrevet 16. februar 2010 Forfatter Del Skrevet 16. februar 2010 (endret) Hei Harald. Tusen takk for all hjelp! Jeg har blitt noe klokere men jeg gir opp. Får ikke dette til og må nok leve med den manuelle metoden Jeg hadde ønsket å få lagt ut en brevmal på malområde på en server og automatisk utfyllelese av brukerinfo. i dialogboks når bruker skal skrive et brev men dette blir for komplisert for undertegnede. Endret 16. februar 2010 av HiSpeed Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå