Gå til innhold

Office 2007: Word-maler og VBA


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 :blush:

 

Er ingen reser i programmering men hvis jeg har en eksempelmal så finner jeg nok ut av det.

Endret av HiSpeed
Lenke til kommentar

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

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

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 av HiSpeed
Lenke til kommentar

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

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 av Harald Staff
Lenke til kommentar

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 av HiSpeed
Lenke til kommentar

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 av Harald Staff
Lenke til kommentar

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 av HiSpeed
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...