21. juni 2006 - 00:49Der er
8 kommentarer og 1 løsning
Hvordan henter man tekst fra sidehoved til textbox (Excel)
Jeg er i gang med at lave en add-in til Excel. Jeg har lavet en form, hvor man kan taste nogle ting ind, som så kommer til at stå i sidehoved og sidefod.
Når men senere vil rette i det, man tidligere har indtastet, bruger man den samme form, og her kommer problemet. Jeg vil gerne have hentet de tidligere indtastede værdier ind i formen igen, men da noget af det indtastede står samme sted (fx rightheader) er jeg ikke helt klar over, hvordan man skiller det ad igen.
Et eksempel, I højre sidehoved står dette:
Job.No.: #værdi fra textbox# Design: #tekst fra textbox# Checked by: #tekst fra textbox#
Jeg skulle gerne har de tre værdier/tekster ind i de textbox'e de oprindeligt kom fra.
Er der nogle, der kan hjælpe mig med det?
Jeg prøvede først at gemme det indtastede i en string, men det forsvinder jo, når man enten lukker excel eller indtaster noget til et andet regneark.
I Word kan man anvende Variables til at gemme info i et dokument (uden at brugeren direkte kan se hvad der er gemt), i Excel er jeg kun stødt på muligheden for at gemme via et skjult ark. (Hvis der findes andre muligheder, så vil jeg meget gerne høre om det :-) )
Prøv om nedenstående kan inspirere lidt: [Excel, Module1] Option Explicit
Sub MakeNewHiddenWorkSheet() 'Groft inspireret af eksemplet fra Excel hjælp, søgeord: Visible Dim NewSheet As Worksheet Set NewSheet = Worksheets.Add NewSheet.Name = "VeryHiddenWorksheetWHeaderInfo" 'Max 31 karakterer NewSheet.Visible = xlVeryHidden 'Skjult, undtaget for VBA-kode NewSheet.Cells(1, 1) = UserForm1.TextBox1 NewSheet.Cells(1, 2) = UserForm1.TextBox2 NewSheet.Cells(1, 3) = UserForm1.TextBox3 End Sub
Sub ShowHiddenWorkSheet() Worksheets("VeryHiddenWorksheetWHeaderInfo").Visible = True End Sub
Userform1 og TextBox? bør selvfølgelig passe til dine egne ;-)
henter venstre, midt,højre header Sub tst() v = Sheets(1).PageSetup.LeftHeader m = Sheets(1).PageSetup.CenterHeader h = Sheets(1).PageSetup.RightHeader
Sub userform_activate() hentDataFraSidehoved End Sub
Private Sub hentDataFraSidehoved() 'Hent data fra Sidehoved Dim tekst, p, k, linie, linieNr, cc As Control linieNr = 1 With ActiveSheet.PageSetup If .RightHeader <> "" Then tekst = .RightHeader While InStr(tekst, Chr(10)) > 0 'identificer linieskift p = InStr(tekst, Chr(10)) If p > 0 Then linie = Left(tekst, p - 1) k = InStr(linie, ": ") 'Identificer tekst fra tekstboks If k > 0 Then linie = Mid(linie, k + 2) End If
Set cc = Me.Controls("Textbox" + CStr(linieNr)) 'vis i tekstbox-control cc.Value = linie linieNr = linieNr + 1 tekst = Mid(tekst, p + 1) End If Wend End If End With End Sub
Private Sub CommandButton1_Click() 'Indsæt data i Sidehoved With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = t1 + TextBox1 + Chr(10) + _ t2 + TextBox2 + Chr(10) + _ t3 + TextBox3 + Chr(10) .LeftFooter = "" .CenterFooter = "" .RightFooter = "" End With End Sub
OK, teksten fra sidehovedet bliver udtrukket á 3 gange, idet hver linier stammer fra 3 forskellige tekstbokse. Når en linie er udtrukket skal denne indsættes i den respektive tekstboks. Da der er en tæller "linienr" og de tre tekstbokse er navngivet som Textbox1 - 3 - så vil dette udtryk skabe et object, som netop den enkelte tekstboks i formularen. Me.controls refererer til de "controls" der er i formularen (Me). På den måde kan man altså navigere ind til de enkelte kontrols.
Hvis nu der er mange kontrols, der skal refereres til, er det en lettere måde end at navngive de enkelte - men det kræver en eller anden form for systematik.
Supertekst: Ok. Mine textbox'e har bare andre navne, så jeg vælger at bruge Select Case i stedet for. Jeg tror dog der er en lille bug. Som det er nu, vil den tredje/sidste linie ikke blive sat ind i sin testbox fordi der ikke er noget linieskift efter den nederste linie. Så det vil jeg lige prøve at kigge lidt på. Hvis du har en hurtig løsning (og er online) må du gerne melde tilbage.
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.