randkleur verandert niet overal

Status
Niet open voor verdere reacties.
Jammer genoeg maak je het probleem nu alleen maar groter, want properties zijn gewoon op Engels gebaseerd. Vertalen helpt je dus verder het moeras in. Hier nog een staatje dat je uit de Help kunt halen:
Constant Control
acBoundObjectFrame Bound object frame
acCheckBox Check box
acComboBox Combo box
acCommandButton Command button
acCustomControl ActiveX (custom) control
acImage Image
acLabel Label
acLine Line
acListBox List box
acObjectFrame Unbound object frame or chart
acOptionButton Option button
acOptionGroup Option group
acPage Page
acPageBreak Page break
acRectangle Rectangle
acSubform Subform/subreport
acTabCtl Tab
acTextBox Text box
acToggleButton Toggle button
Dus die vertaling mag je weer terugzetten.
Als je het onderbrekingspunt op de opdracht van je knop zet (zoals ik in berichtje 19 aangaf) zou hij in ieder geval in de stapmodus uit moeten komen, en dus ook naar de functie gaan, want dat is op dat punt onvermijdelijk. Dat hij dat bij jou niet doet, kan alleen betekenen dat de functie überhaupt niet wordt uitgevoerd. In welk geval je de opdrachten uiteraard ook in het Swahili kan vertalen :)
Ik hoop overigens niet dat je de tekst "<F9>" voor de opdracht TestObjecten hebt getypt, want dan kan ik mij de fout wel voorstellen: dat was ook niet de bedoeling en dat levert geheid een foutmelding op, want dat is helemaal niks. Het was slechts een indicatie van wat je moest doen: de opdrachtregel selecteren, en dan op <F9> drukken. Dus dat zou je nog eens kunnen proberen. En dan moet hij toch echt de functie activeren.
 
Edwin,

De functie wordt wel degelijk aangesproken, alleen worden geen van de 3 "cases" aangesproken

Ik zet stops bij:

Function TestObjecten()
Dim ctl As Control
For Each ctl In Controls
With ctl
Select Case .ControlType
Case acTextBox
If Left(.Name, 3) = "Txt" Then
.BorderColor = RGB(198, 248, 255)
.Locked = False
.Enabled = True
End If
Case acCheckBox
If Left(.Name, 3) = "Chk" Then
.BorderColor = RGB(198, 248, 255)
.Locked = False
.Enabled = True
End If
Case acListBox
If Left(.Name, 3) = "Lst" Then
.BorderColor = RGB(198, 248, 255)
.Locked = False
.Enabled = True
End If
End Select
End With
Next ctl
End Function

en alleen bij de eerste en de laatste stop wordt gewacht....
pffff zo ingewikkeld!!! sorry hoor
JP
 
Ik snap niet helemaal wat je bedoelt met "geen van de 3 "cases" aangesproken". En met "alleen bij de eerste en de laatste stop wordt gewacht". Als je een onderbrekingspunt instelt, moet je vanaf dat punt met <F8> de volgende regels activeren; met <F5> activeer je de normale procedureuitvoer, die dan doorloopt tot het volgende onderbrekingspunt. Dus wat gebeurt er bij een onderbrekingspunt, als je op <F8> drukt? Je (niet zo fraai opgemaakte code) gebruikt een aantal If constructies die kijken naar de beginletters van de objecten. Als er niks gebeurt, dan kan dat hooguit zijn doordat je objecten verkeerde namen hebben; Ik heb jouw code gekopieerd naar een eigen formulier en aangeroepen, en hij doet het prima. Dus aan de functie ligt het niet.
 
Michel,
Ik zet dus stops bij de rood ingekleurde code lijn
Het programma stopt bij de eerste rode lijn:
Select Case .ControlType

als ik nu F8 indruk (wat ik totop dit moment niet kende)
dan springt het programma naar de eerstvolgende lijn
Case acTextBox

dan naar
Case acCheckBox

dan naar
Case acListBox

dus, volgend mij ziet hij op de form (als de code daar wel naar kijkt) geen actextbox, of acListbox of acCheckbox

ben ik nu wat duidelijker?
Merci he maat
JP
 
Hij werkt dus naar behoren. Omdat er vermoedelijk nogal wat objecten op je formulier staan, en er wellicht maar een paar aangepast moeten worden (die met de overeenkomende beginletters) zou je de onderbrekingspunten beter kunnen leggen op regels onder de verschillende IF's. De code stopt dan bij de objecten die voldoen aan de vergelijking. Als je de code dan draait, en hij stopt nergens, dan weet je dat daar een probleem ligt.
Met de huidige stopposities kun je met <F8> uiteraard ook door de objecten heenlopen, en zou je uiteindelijk ook de gewenste objecten moeten kunnen checken. Alleen is dat wat meer klikwerk.
 
Als ik doe wat jij voorstelt den stopt de code nergens....
dus... niet echt OK vrees ik
JP
 
Ik stuur en afdruk van de eigenschappen van een van de objecten
Hier zie je duidelijk dat er effectief een object is waarvan de naam begint met TXT
dus je code zou die toch moeten terugvinden op de form...
Snap er niks van
JP

eigenschap.jpg
 
Oei Michel... geeft je het op??? zo ken ik je niet hoor ;)
in elk geval, ik kom er nog steeds niet ui!
een handje? nog even?
Merci
JP
 
Een lijnobject is natuurlijk geen tekstvak, dus dat zou je zeker niet het voorvoegsel txt moeten geven als je tenminste op objectbasis code wilt laten uitvoeren. Ik zou dat althans wel heel verwarrend gaan vinden. Kijk maar eens op deze Microsoft pagina voor meer voorbeelden.
 
Laatst bewerkt:
Zoals je bovenaan kan zien op het jpg bestandje is txtlijn1 helemaal geen lijnobject maar wel degelijk een tekstobject dus.....................................
 
Dan zou het moeten werken :)
Maak anders weer een voorbeeldje, want de code werkt (zelf uitgetest) dus daar ligt het niet aan.
 
Lijnkleur

De Function zal niet werken omdat je deze in een subformulier hebt staan, verplaats de navigatie knoppen ed naar het hoofdformulier en zet daar de function neer.

Voor het aangeven van de kleur zal je een andere manier moeten gebruiken, deze kan je vinden door in programma code de vraag te stellen bordorcolor
 
Zoals ik al zei: de functie werkt prima, en Bordercolor kun je uitstekend op deze manier instellen. Daar ligt het probleem echt niet.
 
Hooguit zou je alle randinstellingen mee kunnen/moeten nemen, om te voorkomen dat een rand op Transparant staat, zodat je de nieuwe kleur niet ziet. Dan ziet de code er zo uit:
Code:
                If Left(.Name, 3) = "txt" Then
                    .BorderColor = RGB(100, 255, 100)
                    .BorderWidth = 4
                    .BorderStyle = 1
                    .SpecialEffect = 0
                    .BackColor = RGB(128, 128, 255)
                    .Locked = False
                    .Enabled = True
                End If
 
Kan het dan toch niet met die subform te maken hebben zoals Pletter zegt? Als die code naar bvb txt objecten op de subform gaat zoeken vindt hij die inderdaad niet op de subform maar wel op de "moederform" maw moet er in jouw code biet naar de moederform verwezen worden??
 
Functies zijn het mooist als je ze generiek maakt; dan kun je ze overal in je db gebruiken. Ik zet ze dus bij voorkeur niet in het formulier zelf, tenzij ze echt alleen met één specifiek formulier werken, bijvoorbeeld omdat je de recordset ervan nodig hebt, en handelingen uitvoert met velden ervan. Dan wordt het al heel lastig om de functie om te bouwen. Maar in dit geval is het heel simpel; maak in een module deze functie:

Code:
Function TestObjecten(frm As Form)
Dim ctl As Control
For Each ctl In frm.Controls
    With ctl
        Select Case .ControlType
            Case acTextBox
                If Left(.Name, 3) = "txt" Then
                    .BorderColor = RGB(100, 255, 100)
                    .BorderWidth = 4
                    .BorderStyle = 1
                    .SpecialEffect = 0
                    .BackColor = RGB(128, 128, 255)
                    .Locked = False
                    .Enabled = True
                End If
            Case acCheckBox
                If Left(.Name, 3) = "chk" Then
                    .BorderColor = RGB(198, 248, 255)
                    .Locked = True
                    .Enabled = False
                End If
            Case acListBox
                If Left(.Name, 3) = "lst" Then
                    .BorderColor = RGB(198, 248, 255)
                    .BackColor = RGB(128, 248, 255)
                    .Locked = True
                    .Enabled = False
                End If
        End Select
    End With
Next ctl
End Function

En je roept hem dan vanaf elk willekeurig formulier op dezelfde manier aan.
Code:
Private Sub Form_Current()
    TestObjecten Me
End Sub
 
Laatst bewerkt:
heb alles netjes overgenomen
de functie in een module gestoken
klik op knop.... niks
Maar... "wijzigen" is een knop op een subform
als je op de knop klikt dan is de code toch

Private Sub Knop20_Click()
TestObjecten Me
End Sub

waar knop20 de "wijzigen-knop" is

waar zet ik wat jij schrijft:

Private Sub Form_Current()
TestObjecten Me
End Sub

snap er echt niets meer van, want de "Me" verwijst toch naar de subform en niet naar de main form...
pffff

jp
 
Als je objecten op een (hoofd of sub)formulier wilt wijzigen, zou de code moeten zo werken. Als je vanuit een hoofdformulier de tekstvakken op het subformulier wilt wijzigen, werkt hij niet, want dan moet je specifiek naar het subformulier verwijzen. En omgekeerd ook: als je vanuit het subformulier objecten op een hoofdformulier wilt aanpassen, moet je specifiek naar dat hoofdformulier verwijzen.
 
en dat is toch wat ik doe?Op de subform staat de knop "Wijzigen" die via je code de velden op de moeder-form zou moeten veranderen
Hoe pas ik je code dan aan?
hoe dus naar het hoofdformulier verwijzen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan