Print side | Luk vindue

Masser af tekstbokse der ikke taber indholdet

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=3066
Udskrevet den: 30.Apr.2024 kl. 13:22


Emne: Masser af tekstbokse der ikke taber indholdet
Besked fra: Gambino
Emne: Masser af tekstbokse der ikke taber indholdet
Posteringsdato: 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

 

 




Svar:
Besked fra: Kurt Kubik
Posteringsdato: 13.Jun.2017 kl. 22:55
Forstår ikke helt, hvad det er, du spørger om!?


Besked fra: Gambino
Posteringsdato: 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



Besked fra: Kurt Kubik
Posteringsdato: 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")


Besked fra: zpjj
Posteringsdato: 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


Besked fra: EXCELGAARD
Posteringsdato: 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.


Besked fra: Gambino
Posteringsdato: 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




Print side | Luk vindue