Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketMasser af tekstbokse der ikke taber indholdet

 Besvar Besvar
Forfatter
Gambino Se dropdown
Bronze bruger
Bronze bruger


Medlem: 11.Maj.2017
Land: Danmark
Status: Offline
Point: 26
Direkte link til dette indlæg Emne: Masser af tekstbokse der ikke taber indholdet
    Sendt: 13.Jun.2017 kl. 19:43

UBS ny tråd

Jeg håber det er i orden at jeg tager spørgsmålet med Userforme op igen.Smile

Der er opstået behov for at have flere tekstboxe i samme userform og dermed er det gået op for mig at jeg alligevel ikke fattede et pluk.Confused

Hvordan jeg end vender og vrider det går jeg i stå over for de 2 " Private Sub userform_????"  kan de sammen behandle de nye tekstbokse? Hvordan virker de og hvordan hænger de sammen med andre ønskede tekstboxe.

Er der nogen der kan forklare mig hvordan jeg bruger Exelgaards geniale løsning så jeg 1. forstår den bedre. 2. kan have en række tekstbokse. eller omvendt Wink

 

Eks:

 

Option Explicit

 

 

 

Private Sub SuperDuper_Change()

 

End Sub

 

 

 

Private Sub SuperDuper1_Change()

 

End Sub

 

 

 

Private Sub SuperDuper2_Change()

 

End Sub

 

Private Sub SuperDuper3_Change()

 

End Sub

 

Private Sub UserForm_Initialize()

 

      On Error Resume Next

      SuperDuper.Value = Evaluate("IB_Test_Value")

 

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

 

      On Error Resume Next

      ThisWorkbook.Names("IB_Test_Value").Delete

      ThisWorkbook.Names.Add Name:="IB_Test_Value", RefersToR1C1:="=" & Chr$(34) & SuperDuper.Value & Chr$(34), Visible:=False

'Stop

End Sub

 

 

Til top



Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5417
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 14.Jun.2017 kl. 08:41
Lad mig prøve, at forklare...

Så man starter/åbner en UserForm vil VBA automatisk køre den makro, der ligger i UserFormen med navnet 'UserForm_Initialize' (hvis der ikke ligger en makro med dette navn i UserForm, vil UserForm blot åbne).

I makroen 'UserForm_Initialize' har vi altså mulighed for at lave makro kode, der køres inden UserForm reelt åbnes.

På samme måde med makroen 'UserForm_QueryClose', der køres umiddelbart inden UserForm lukkes (igen, hvis makroen altså findes i UserForm).

De to ovennævnte makroer kan sammenlignes med makroerne 'Workbook_Open' og 'Workbook_BeforeClose', der blot virker på 'Workbook' niveau, mens de to førstnævnte makroer virker på 'UserForm' niveau.

Så, for at hente en værdi, der tidligere er gemt i et navn (se 'Navnestyring' under båndet 'Formler'), benytter jeg:
      On Error Resume Next
      IB_Test
.Value = Evaluate("IB_Test_Value")
Bemærk, at jeg starter med 'On Error Resume Next' for at undgå fejl, hvis navnet ikke findes.

Da navnet skal benyttes til at tildele en værdi til en tekstboks, så lader jeg blot (for nemheds skyld), Excel navnet være det samme som tekstboks navnet (gør det lettere at fejl finde på, hvis det skulle blive nødvendigt).


Og, når jeg lukker UserForm, så gør jeg blot det modsatte i 'UserForm_QueryClose', hvor jeg indlæser en værdi fra en tekstboks til et navn:

      On Error Resume Next
      T
hisWorkbook.Names("IB_Test_Value").Delete
      ThisWorkbook.Names.Add Name:="IB_Test_Value", RefersToR1C1:="=" & Chr$(34) & IB_Test.Value & Chr$(34), Visible:=False
Derfor er det vigtigt, at navne på tekstbokse og Excel navne er de samme...
...for det ser netop ud til, at du har byttet rundt på nogle navne:
      SuperDuper1.Value = Evaluate("IB_Test_Value")
      SuperDuper.Value = Evaluate("IB_Test_Value1")
Håber, det gav mening.

Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg Sendt: 13.Jun.2017 kl. 22:55
Forstår ikke helt, hvad det er, du spørger om!?
Til top
Gambino Se dropdown
Bronze bruger
Bronze bruger


Medlem: 11.Maj.2017
Land: Danmark
Status: Offline
Point: 26
Direkte link til dette indlæg Sendt: 14.Jun.2017 kl. 04:02

Som du ser er der 4 tekstbokse med navnet SuperDuper SuperDuper1 SuperDuper2 SuperDuper3

De virker alle sammen MEN desverre var det meningen at indholdet skulle blive i tekstboksene.

I denne opstilling har indholdet fra den første tekstboks  flyttet sig ned i nr. 2 tekstboks så noget er stadig ikke ok. Fra SuberDuber til SuberDuber1.

SuberDuber var brugt til en tekst fra tidligere forsøg

 

Jeg forstår ikke hvordan SuberDuber kommer ned i SuberDuber.value når denne fødes fra variablen Test_Value Confused

og

Det er disse 2 UserForm jeg stadig ikke rigtigt forstår frunktionen af. Confused

  • -

 

Private Sub UserForm_Initialize()

 

      On Error Resume Next

      SuperDuper1.Value = Evaluate("IB_Test_Value")

      SuperDuper.Value = Evaluate("IB_Test_Value1")

      SuperDuper2.Value = Evaluate("IB_Test_Value2")

      SuperDuper3.Value = Evaluate("IB_Test_Value3")

 

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

 

      On Error Resume Next

      ThisWorkbook.Names("IB_Test_Value").Delete

      ThisWorkbook.Names("IB_Test_Value1").Delete

      ThisWorkbook.Names("IB_Test_Value2").Delete

      ThisWorkbook.Names("IB_Test_Value3").Delete

      ThisWorkbook.Names.Add Name:="IB_Test_Value", RefersToR1C1:="=" & Chr$(34) & SuperDuper.Value & Chr$(34), Visible:=False

      ThisWorkbook.Names.Add Name:="IB_Test_Value1", RefersToR1C1:="=" & Chr$(34) & SuperDuper1.Value & Chr$(34), Visible:=False

      ThisWorkbook.Names.Add Name:="IB_Test_Value2", RefersToR1C1:="=" & Chr$(34) & SuperDuper2.Value & Chr$(34), Visible:=False

      ThisWorkbook.Names.Add Name:="IB_Test_Value3", RefersToR1C1:="=" & Chr$(34) & SuperDuper3.Value & Chr$(34), Visible:=False

'Stop

End Sub

Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg Sendt: 14.Jun.2017 kl. 07:40
Det er i disse to linier at der sker:
SuperDuper1.Value = Evaluate("IB_Test_Value")
      SuperDuper.Value = Evaluate("IB_Test_Value1")
Til top
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Sendt: 14.Jun.2017 kl. 08:27
Prøv med:
 
SuperDuper1.Value = Evaluate("IB_Test_Value1")
      SuperDuper.Value = Evaluate("IB_Test_Value")
 
Wink
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5417
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 14.Jun.2017 kl. 08:41
Lad mig prøve, at forklare...

Så man starter/åbner en UserForm vil VBA automatisk køre den makro, der ligger i UserFormen med navnet 'UserForm_Initialize' (hvis der ikke ligger en makro med dette navn i UserForm, vil UserForm blot åbne).

I makroen 'UserForm_Initialize' har vi altså mulighed for at lave makro kode, der køres inden UserForm reelt åbnes.

På samme måde med makroen 'UserForm_QueryClose', der køres umiddelbart inden UserForm lukkes (igen, hvis makroen altså findes i UserForm).

De to ovennævnte makroer kan sammenlignes med makroerne 'Workbook_Open' og 'Workbook_BeforeClose', der blot virker på 'Workbook' niveau, mens de to førstnævnte makroer virker på 'UserForm' niveau.

Så, for at hente en værdi, der tidligere er gemt i et navn (se 'Navnestyring' under båndet 'Formler'), benytter jeg:
      On Error Resume Next
      IB_Test
.Value = Evaluate("IB_Test_Value")
Bemærk, at jeg starter med 'On Error Resume Next' for at undgå fejl, hvis navnet ikke findes.

Da navnet skal benyttes til at tildele en værdi til en tekstboks, så lader jeg blot (for nemheds skyld), Excel navnet være det samme som tekstboks navnet (gør det lettere at fejl finde på, hvis det skulle blive nødvendigt).


Og, når jeg lukker UserForm, så gør jeg blot det modsatte i 'UserForm_QueryClose', hvor jeg indlæser en værdi fra en tekstboks til et navn:

      On Error Resume Next
      T
hisWorkbook.Names("IB_Test_Value").Delete
      ThisWorkbook.Names.Add Name:="IB_Test_Value", RefersToR1C1:="=" & Chr$(34) & IB_Test.Value & Chr$(34), Visible:=False
Derfor er det vigtigt, at navne på tekstbokse og Excel navne er de samme...
...for det ser netop ud til, at du har byttet rundt på nogle navne:
      SuperDuper1.Value = Evaluate("IB_Test_Value")
      SuperDuper.Value = Evaluate("IB_Test_Value1")
Håber, det gav mening.

Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
Gambino Se dropdown
Bronze bruger
Bronze bruger


Medlem: 11.Maj.2017
Land: Danmark
Status: Offline
Point: 26
Direkte link til dette indlæg Sendt: 14.Jun.2017 kl. 20:40

Tak til alle der har hjulpet og specielt tak til Exelgaard for den udmærkede forklaring.

Jeg siger med Carl Nielsen: "Tågerne letter"Smile

Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk