Avatar billede jamark Praktikant
21. juni 2006 - 00:49 Der 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.
Avatar billede learningvba Nybegynder
21. juni 2006 - 08:32 #1
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 ;-)
Avatar billede excelent Ekspert
21. juni 2006 - 10:21 #2
henter venstre, midt,højre header
Sub tst()
v = Sheets(1).PageSetup.LeftHeader
m = Sheets(1).PageSetup.CenterHeader
h = Sheets(1).PageSetup.RightHeader

End Sub
Avatar billede supertekst Ekspert
21. juni 2006 - 14:36 #3
Et alternativ til inspiration:
VBA-koden er til formularen - i min version 3 tekstbokse og en knap.


Const t1 = "Job.No.: "
Const t2 = "Design: "
Const t3 = "Checked by: "

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
Avatar billede jamark Praktikant
21. juni 2006 - 18:17 #4
learningvba: Jeg må desværre ikke indsætte et skjult ark.

supertekst: Umiddelbart ser det meget lovende ud. Jeg forstår dog ikke hvordan denne linie fungerer:

Set cc = Me.Controls(("Textbox" + CStr(linieNr))

Hvad gør Me.Controls?
Avatar billede supertekst Ekspert
21. juni 2006 - 19:35 #5
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.

Mvh
Supertekst
v/Peter Braagaard
Avatar billede jamark Praktikant
21. juni 2006 - 22:40 #6
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.
Avatar billede jamark Praktikant
21. juni 2006 - 22:59 #7
Den nemme løsning er vist bare at indsætte et ekstra linieskift til sidst. Det prøver jeg lige
Avatar billede jamark Praktikant
21. juni 2006 - 23:02 #8
Jep, det virker. Jeg takker, supertekst
Avatar billede supertekst Ekspert
22. juni 2006 - 09:24 #9
Selv tak
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

MLOps Engineer til opbygning af Forsvarets nye AI-platform

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Analytiker til Security Operationscenter i Cyberdivisionen Hvidovre

TD SYNNEX Denmark ApS

Sales Coordinator

Digitaliseringsstyrelsen

IT-arkitekt hos Digitaliseringsstyrelsen