Just nu i M3-nätverket
Jump to content

Hjälptext i formulär


Gurra1972

Recommended Posts

Försöker få till hjälptext i mitt fomulär i word 2002. Det är tänkt att fungera som så att man ska tabba sig igenom ett gäng fält. För varje nytt fält användaren tabbar sig till vill jag att det kommer upp en hjälptext eller textruta så användaren fyller i rätt. Har åstakommit ett makro som skapar en textruta som poppar för "run macro on entry" för varje formulärfält . Vill ha ett som tar bort rutan också! Kan nån hjälpa mig? Finns det nåt smartare sätt. Och inget hjälp a´la F1 eller msgbox. Det blir användrarna bara irriterade på!

 

Finns det även når smart sätt skriva in texten i hjälprutorna som ska poppa upp, så man inte behöver gå in i macro och lägga till text (fult och krångligt)

 

Link to comment
Share on other sites

Nu är jag inte alls hemma med fält och liknande i Word, vet inte vilka händelser som finns kopplade till dem.

 

Men TextBoxen du poppar upp finns väl i samlingen OleObject på ditt dokument. Håll koll på TextBoxens namn (ge den ett namn ) och kör någon händelsekod som kollar om den finns och då raderar den.

 

Varje gång du tar fram en TextBox kan du exempelvis se till att ta bort den innan du tar upp en ny.

 

Kanske komplettera med en OnTime funktion som automatiskt tar bort en info-ruta efter x antal sekunder.

 

Eller om det är samma TextRuta du hela tiden tar fram, du bara gömmer en emellan gångerna och ger ny text vid nytt fält, så kan du koppla en händelse till denna ruta och låta användaren klicka i den för att stänga den.

 

 

 

Spara texten? Tja, du kan ju skapa en textruta per text och se till att gömma undan dem för att sedan ta fram dem vid behov. Då sparas texten i kontrollen ifråga.

 

Utan att titta på det mer specifikt än så är det allt jag kan föreslå.

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Allt låter finfint, men du har överskattat min förmåga att skriva kod ;)

 

Ingen som kan ge lite tips på hur jag kan koda detta?

 

Link to comment
Share on other sites

Beror på vilket alternativ som känns aktuellt, hur du lägger upp det. Inte alla alternativ.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

ta ett...glad för ett som fungerar bara :)

Eller bara hintar om hur jag gör dessa saker.

Det ska vara olika text för varje ruta, ibland lite, ibland mer text (mellan ca 5-20 rader). Och texten ska hoppa fram på samma plats i dokumentet (ganska litet formulär) så det skulle kunna vara samma ruta, bara olika text. Och helst enkel att uppdatera.

 

Texten behöver inte ha någon timeout.

 

Link to comment
Share on other sites

ja du, sitter med Word 2007 och hittar nada. Ska jag kunna hjälpa så får nog du skicka det dokument du arbetar med så kanske jag kan finna sätt att ordna det på. Måste helt enkelt ha något att arbeta utifrån samt se de kontroller som finns i Word 2003 och ej de nya i Word 2007.

 

Om du så önskar, epost finns i min profil.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

En fråga bara. Du skrev så här:

Men TextBoxen du poppar upp finns väl i samlingen OleObject på ditt dokument. Håll koll på TextBoxens namn (ge den ett namn ) och kör någon händelsekod som kollar om den finns och då raderar den.

 

Vart hittar jag vad mina textrutor heter dvs samlingen Oleobject?

 

Link to comment
Share on other sites

Mmh, Word och Excel skiljer sig... några OleObject finns visst inte i Word. Titta i koden jag skickat dig, i den accessar jag textboxarna via Shapes-samlingen. Exempelvis i

Sub NameHelp()
   Dim sh As Shape
   Dim nm As String
   For Each sh In Me.Shapes
       sh.Select
       nm = InputBox(sh.TextFrame.TextRange.Text, "namn", sh.Name)
       If nm <> "" Then
           sh.Name = nm
       End If
   Next sh
End Sub

Där koden stegar igenom alla textobjekt, drar ur texten ur dem så att du ser vilket det är och ber dig ge den ett namn som du sedan kan använda i koden.

 

Kan ge övriga exempel här också för framtida referens, när man går in i ett fält körs:

Sub RunOnEntry1()
   Me.Shapes("tbHelp1").Visible = msoCTrue
End Sub

som då tar fram objektet vid namn tbHelp1

När man går ur en bild:

Sub RunOnExit()
   Dim i As Integer
   For i = 1 To 4
       Me.Shapes("tbHelp" & i).Visible = msoFalse
   Next i
End Sub

som då tar bort alla objekt med den namn-templaten. Fast se till att stega rätt antal gånger...

Kanske att man ska lägga in så att den koden körs vid varje RunOnEntry för att säkra att bara en ruta visas i taget.

 

Som sagt via Epost - det finns en standardhjälp som kan visas i statusraden. Om den duger rekommenderas den.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Det gick bättre nu. Tyvärr gillar den inte att jag namnsätter som jag vill. "Permission denied" på första textboxen jag vill byta namn på. Tar jag defaultnamnet (tbHelp1), kan jag ändra namn på nr 2 och framåt. Vad skulle det kunna vara?

 

Det skulle kunna fungera såklart ändå, men det blir en himla oordning.

Ditt macro för namnsättning verkar ta textboxarna i random ordning nämligen.

 

Link to comment
Share on other sites

Namn, tja, det är klurigt. Ordningen den tar dem i är ordningen de skapats i troligen. Ingen ordning jag kan styra ivartfall.

 

Permission denied? är dokumentet skyddat?

 

Okej, vi kan göra såhär istället. Markera den box du vill namnge och kör:

Sub NamnGivare2()
   On Error GoTo errHandle
   Dim sh As Shape
   Set sh = Selection.ShapeRange(1)
   sh.Name = InputBox("Ge namn", "Namn", sh.Name)

   Exit Sub
errHandle:
'hamnar vi här, ingen textruta vald
   Debug.Print "Inget shape-objekt"
End Sub

Bör vara lite enklare men samtidigt omständligare. Kanske koppa makrot till en knapp under arbetet med namngivandet?

 

Sedan ska sägas, att det finns säkert andra sätt att spara text på, kanske någon hållare i bladet som man kan fylla med strängar på något vis? Tja, jag vet inte.

 

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Jag är nöjd nu. Fick inte namnsättningen att fungera som tänkt med dina macron. Var tvungen skapa alla textboxar i rätt tidsorning, då gick de sätta rätt namn på.

 

Tackar ödmjukast Monshi ;)

 

En fråga till, kan man låsa tangenter för användaren i enskilt dokument?

T.ex: har massa fält och har låst sidan, men ändå går det använda return och enter knappen för att sabba fälten.

 

[inlägget ändrat 2008-12-22 13:41:58 av Gurra1972]

Link to comment
Share on other sites

har massa fält och har låst sidan, men ändå går det använda return och enter knappen för att sabba fälten.

låst kontrollerna?

 

Ser inte riktigt vad du menar....

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Hela formuläret är lås via "protect form".

I mitt stora formulär har jag ca 10 fält på en rad som endast fylls i vid behov. Kör man med tab knappen måste alla fält passeras. Alltså kommer många försöka använda return knappen för att komma till nästa rad istället. Och då gör man åverkan på det låsta formuläret (konstigt kan man tycka). Kan man undvika att användaren sabbar formuläret?

 

 

 

 

[inlägget ändrat 2008-12-22 15:08:00 av Gurra1972]

[inlägget ändrat 2008-12-22 15:08:55 av Gurra1972]

Link to comment
Share on other sites

Formulär, menar du textboxar då? (oops, word-forumet)

 

om det är textboxar kan du fånga nedtrycket av Enter och ta hand om det. Om celler, kontrollera att allt är ifyllt som det ska innan du går vidare.

 

Sabbar formuläret? Inte riktigt med vad du menar att Enter gör med formuläret dock.

 

Ahh word word...trodde jag var i Excel... Asch

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-12-22 15:53:10 av Monshi]

Link to comment
Share on other sites

Precis...word. I EXCEL fixar jag det mesta jag behöver också :)

 

Ingan panik med detta, men skulle vilja få hjälp med att helt enkelt fånga enter-tryckningar och ignorera densamma.

 

En enter-tryckning flyttar fälten trots det inte borde

 

Link to comment
Share on other sites

...tydligen en funktionalitet i senare versioner av Word. Se motivering och en lösning här:

http://support.microsoft.com/kb/211219/en-us

 

Känns aningen omständigt. Annat sätt som du kanske kan applicera är att fånga när de går ur en kontroll/formulär och då kontrollera hur lång texten är och skicka tillbaka dem om den är för lång/flera rader.

 

Men det fungerar, se bara till att varje textruta har ett bokmärke/ett namn (de har det normalt sett). Bara att stoppa in koden i ditt blad/mall och sedan använda som vanligt. En omstart av dokumentet krävs.

 

Testa och se, nu har jag svarat för rätt program :)

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-12-23 08:52:12 av Monshi]

Link to comment
Share on other sites

  • 1 month later...

Tack för all hjälp. Är nästan hemma nu. En sak återstår. Jag vill ha lite messageboxar om man fyllt i fel i något formulärfält.

 

Tex i ett fält får det bara vara mellan 1-4 dvs inga bokstäver och ej heller tomt. Tänkte mig en dropplista och sen ett macro som kollar så det inte är tomt. Det ska göras när man trycker på knappen för att skapa ett textmail enl koden. Tex ett fält med namnet "status".

 

Sub mail()
Dim status As String
status = ActiveDocument.FormFields("status").Result
If Not IsEmpty(status) Then MsgBox "Status not filled"
else: ActiveDocument.SendMail
Options.SendMailAttach = False
End Sub

 

Detta funkar inte. Kan någon hjälpa mig. Har även fler fält som jag vill ha samma typ av kontroll på. Har även provat anropa ett annat macro som bara ska skapa mailet, men får det inte fungera

 

Sub kontroll()
Dim status As String
status = ActiveDocument.FormFields("status").Result
If Not IsEmpty(status) Then MsgBox "Status not filled"
else: call mail

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...