• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Excel 2010 VBA, Positie van elementen verandert steeds

Status
Niet open voor verdere reacties.

tijmen_4real

Gebruiker
Lid geworden
20 apr 2005
Berichten
338
Hoi,

Voor een simpel doorloopbare sheet heb ik een aantal elementen geplaatst, als textbox, combobox, button (allen Active-X).
Nu hebben zij de eigenschap enkel met de positie mee te bewegen.
Alles lijkt goed te verlopen, op basis van gekozen acties.
Maar, als ik het bestand opsla, daarna open en keuzes maak, hebben de elementen lak aan een verplaatsing.
Zie het bestand hier: Bekijk bijlage ABC-calculatie.xlsm

Wat gaat er verkeerd? En nog belangrijker: hoe los ik het op?
Bij voorbaat dank en met groet,

Tijmen
 
Waarom gebruik je niet gewoon cellen om de gegevens in te laten voeren? Beetje gegevensvalidatie erbij en je bent klaar. De overige logica kan net zo goed middels tonen en verbergen van rijen werken. Hoef je ook niet tig routines te programmeren om naar de volgende invoer te gaan...
 
Bedankt, ik heb je advies overgenomen. Ik probeer nu zelfs cellen te laten werken als buttons.
Hiervoor moet een cell wanneer geselecteerd zich gedragen als button, en dus van kleur veranderen:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "C18" Then
Range("C18").Interior.ColorIndex = 33
End If
End Sub

Maar waarom werkt dat niet zo?Bekijk bijlage ABC-calculatie.xlsm
 
Als er iets niet werkt waarvan jij denkt dat het zou moeten werken, val terug op een Msgbox.

Verwijder dit straks uit de code , msgbox target.address

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
msgbox target.address
If Target.Address = "[COLOR=#ff0000]$[/COLOR]C[COLOR=#ff0000]$[/COLOR]18" Then target.Interior.ColorIndex = 33[COLOR=#ff0000][/COLOR]
End Sub
 
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target.Interior.ColorIndex = 33 * Abs(Target.Address = "$C$18")
End Sub
 
Daar word je wijzer van als beginnende Vba'er. :thumb:
 
Deze draden zijn voor alle bezoekers van het forum toegankelijk.:d
 
De selectie werkte al, maar heb hem omgezet naar een dubbel-klik actie.
Deze moet echter de cursor in de geklikte cell verbergen, zodat ingave niet mogelijk lijkt.
Weer even aan het werk, dank allen voor de reacties!
 
In die eerste coderegel staat bijna het antwoord al wat je bij moet zetten.
 
Dat begrijp ik, en heb ik ook gedaan. Een logisch nadeel is dat de cel veranderd van kleur wanneer er een andere cel (button) geselecteerd is.
Ik heb bijvoorbeeld cel a1, b1, c1 en d1 in omgetoverd tot buttons. Bij de selectie veranderd de kleur.
Maar, de sheet bevat ook invulvelden en meer. Wanneer de selectie dan veranderd, veranderd de kleur weer terug
Wellicht een idee om een status aan de cell te koppelen, zodat deze ook na het verdwijnen van de selectie nog op diens kleur blijft?
 
Laatst bewerkt:
Als iets echt verandert, doet het dat met een t.
Als het al gebeurd is, is het al veranderd.
 
Ik heb de indruk dat je op vier regels wil zien welke van de opties gekozen is.
Dat zou je met deze code kunnen doen:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngOpties As Range

Set rngOpties = Application.Intersect(Target, Range("C18:H18"))
If Not rngOpties Is Nothing Then
 Range("C18:H18").Interior.ColorIndex = 0
 Target.Interior.ColorIndex = 33
Else
 Set rngOpties = Intersect(Target, Range("C26:D26"))
 If Not rngOpties Is Nothing Then
  Range("C26:D26").Interior.ColorIndex = 0
  Target.Interior.ColorIndex = 33
 Else
  Set rngOpties = Intersect(Target, Range("C28:F28"))
  If Not rngOpties Is Nothing Then
   Range("C28:F28").Interior.ColorIndex = 0
   Target.Interior.ColorIndex = 33
  Else
   Set rngOpties = Intersect(Target, Range("C36:D36"))
   If Not rngOpties Is Nothing Then
    Range("C36:D36").Interior.ColorIndex = 0
    Target.Interior.ColorIndex = 33
   End If
  End If
 End If
End If
End Sub

Succes,
 
Bedankt, Wouter. Dit is inderdaad de bedoeling.
Nu ga ik het verder aanpassen naar behoeft.
Bedankd, allemaal!
 
Code:
'--- buttons aan kleur
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngOpties As Range

Application.ScreenUpdating = False

Set rngOpties = Application.Intersect(Target, Range("C18:H18"))
If Not rngOpties Is Nothing Then
 Range("C18:H18").Interior.ColorIndex = 34
 Target.Interior.ColorIndex = 33
Else
 Set rngOpties = Intersect(Target, Range("C26:D26"))
 If Not rngOpties Is Nothing Then
  Range("C26:D26").Interior.ColorIndex = 34
  Target.Interior.ColorIndex = 33
 Else
  Set rngOpties = Intersect(Target, Range("C28:F28"))
  If Not rngOpties Is Nothing Then
   Range("C28:F28").Interior.ColorIndex = 34
   Target.Interior.ColorIndex = 33
  Else
   Set rngOpties = Intersect(Target, Range("C36:D36"))
   If Not rngOpties Is Nothing Then
    Range("C36:D36").Interior.ColorIndex = 34
    Target.Interior.ColorIndex = 33
   End If
  End If
 End If
End If
'--- buttons koppelen aan rijen
If Range("C18").Interior.ColorIndex = 34 Then
    Rows("20:31").EntireRow.Hidden = False
    Rows("32:38").EntireRow.Hidden = True
    Rows("24:25").EntireRow.Hidden = True
ElseIf Range("E18").Interior.ColorIndex = 34 Then
    Rows("20:31").EntireRow.Hidden = True
    Rows("32:38").EntireRow.Hidden = False
    Rows("24:25").EntireRow.Hidden = False
ElseIf Range("G18").Interior.ColorIndex = 34 Then
    Rows("20:38").EntireRow.Hidden = True
    Rows("24:25").EntireRow.Hidden = False
End If

Application.ScreenUpdating = True

End Sub

Lijkt prima te werken, alleen wordt de actie (if-else) voor G18 niet overgenomen.
Wat gaat er fout?
 
Probeer die code eens te reduceren tot 5 regels.
 
In zou het in dit geval omdraaien naar colorindex 34
Cel G18 heeft nooit alleen colorindex 34.
Dus eeste allle rijen op hidden = true zetten en daarna afhankelijk van colorindex 33 de benodigde rijnen Hidden = false zetten.
 
Code reduceren lukt me niet... :(
De combinatie omdraaien en aanpassen lijkt de oplossing: bedankt!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan