Problemen met flexibele opmaak

Status
Niet open voor verdere reacties.

RoVo1211

Gebruiker
Lid geworden
24 feb 2024
Berichten
114
Besturingssysteem
Windows 11
Office versie
Office 365
In het bijgevoegde bestand heb ik een formulier gemaakt frmDoelenInstellen.
als ik de velden wil vullen met inhoud uit cellen van sheets(1) met
Code:
with txtVerschilAEX
.value=sheets(1).[M6].value
end with
dan krijg ik de melding dat de typen niet overeenkomen.
Er wordt niet aangegeven om welk veld het gaat of wat het objecttype zou moeten zijn.
Ik heb het ook geprobeerd met
Code:
with txtVerschilAEX
.value=formatnumber(sheets(1).[M6].value ,3)
end with
maar daar lijkt de fout niet te zitten.

Ik hoop dat iemand mij duidelijkheid kan verschaffen waar de fout zit, want voordat ik begon met het veld txtVerschilAEX heeft het formulier gewerkt.

Met vriendelijke groet,
Ronald
 

Bijlagen

Geen probleem hier met het openen van dat formulier.
Zet een break point in de UserForm_Initialize en kijk dan waar het mis gaat.
 

Bijlagen

  • AEX.png
    AEX.png
    30 KB · Weergaven: 5
Ik kreeg een foutmelding in dit codeblokje.
Code:
'Huidige stand
    txtHuidigAEX = FormatNumber(Sheets(1).[D3], 3)
    txtHuidig1 = FormatCurrency(Sheets(1).[D5], 3)
    txtHuidig2 = FormatCurrency(Sheets(1).[D7], 3)
    txtHuidig3 = FormatCurrency(Sheets(1).[D9], 3)

door te wijzigen naar

Code:
'Huidige stand
    txtHuidigAEX = FormatNumber(Sheets(1).[D3].Value, 3)
    txtHuidig1 = FormatCurrency(Sheets(1).[D5].Value, 3)
    txtHuidig2 = FormatCurrency(Sheets(1).[D7].Value, 3)
    txtHuidig3 = FormatCurrency(Sheets(1).[D9].Value, 3)

opende het formulier zonder problemen.
 
Ik had het verkeerde bestand toegevoegd, want ik heb ook een testversie (die ik had moeten meesturen). In de echte versie werkt het formulier inderdaad wel en heb dus de code van de echte versie gekopieerd naar mijn testversie. Toen was het probleem opgelost.
 
Dit is niet echt een vraag, maar meer een opmerking/klacht: ik vind de foutmeldingen wel heel erg cryptisch. Er wordt niet (goed ) aangegeven waar de fout zit. Men krijgt bijvoorbeeld alleen de melding "Objecttypen komen niet overeen", maar er wordt niet gesprongen naar waar de fout zit.
In mijn geval werd ik gestuurd naar de macro die het formulier oproept, maar niet naar de foute variabele. Ik had ergens getypt "chkAEXdoel" i.p.v. "chkDoelAEX", maar daar werd niet naartoe gesprongen. 😠
 
Even een ander (Excel gerelateerd) vraagje tussendoor: ik probeer een foto te maken van een dialoogvenster, maar ik krijg het niet voor elkaar. Ik heb het geprobeerd met screenxpert in Windows 11, maar daar heb ik niet de mogelijkheid om een foto/selectie van een dialoogvenster te maken.
In het verleden kon men met de combinatie ctrl+prt scrn of alt+prt-scrn een foto maken van alleen het actieve venster, maar die combinatie schijnt niet meer te werken.

Kan iemand mij suggesties geven?
 
Code:
    With txtVerschilx
        .Value = FormatPercent(Sheets(1).[S6].Value, 3)
        If txtVerschil3.Value >= 0.05 Then
            .BackColor = RGB(0, 128, 0)
            .ForeColor = vbWhite
        ElseIf txtVerschil3.Value >= 0.01 And txtVerschil3.Value < 0.05 Then
            .BackColor = RGB(0, 192, 0)
            .ForeColor = vbWhite
        ElseIf txtVerschil3.Value >= 0.005 And txtVerschil3.Value < 0.01 Then
            .BackColor = RGB(192, 255, 192)
            .ForeColor = vbBlack
        ElseIf txtVerschil3.Value >= 0.0001 And txtVerschil3.Value < 0.005 Then 'Tussen 0.5-1%
            .BackColor = RGB(224, 255, 224)
            .ForeColor = vbBlack
        ElseIf txtVerschil3.Value >= -0.0001 And txtVerschil3.Value < 0.0001 Then 'Ongeveer 0
            .BackColor = RGB(0, 192, 255)
            .ForeColor = vbYellow
        ElseIf txtVerschil3.Value >= -0.005 And txtVerschil3.Value < -0.0001 Then 'Tussen -0.5% en 0%
            .Font.Bold = False
            .ForeColor = vbBlack
            .BackColor = RGB(255, 224, 224)
        ElseIf txtVerschil3.Value >= -0.01 And txtVerschil3.Value < -0.005 Then 'Tussen -1 en -0.5%
            .BackColor = RGB(255, 176, 176)
            .ForeColor = vbBlack
        ElseIf txtVerschil3.Value >= -0.05 And txtVerschil3.Value < -0.01 Then 'Tussen -5 en -1%
            .BackColor = RGB(255, 0, 0)
            .ForeColor = vbWhite
        ElseIf txtVerschil3.Value < -0.05 Then  'Minder -5%
            .BackColor = RGB(128, 0, 0)
            .ForeColor = vbWhite
        End If

    End With

Ik heb deze With...End With-constructie staan bij alle "Verschil"-velden staan, maar elk veld krijgt dezelfde achtergrondkleur terwijl bij een negatief resultaat het veld een rode tint moet krijgen en bij een positief resultaat een groene tint als achtergrond moet krijgen. Wat doe ik fout?
 

Bijlagen

  • 1708848572892.png
    1708848572892.png
    55,8 KB · Weergaven: 1
Doe het eens zo, zelf even de kleurtjes tussenvoegen:
Code:
If txtVerschil3.Value < -0.05 Then
ElseIf txtVerschil3.Value < -0.01 Then
ElseIf txtVerschil3.Value < -0.005 Then
ElseIf txtVerschil3.Value < -0.0001 Then
ElseIf txtVerschil3.Value < 0.0001 Then
ElseIf txtVerschil3.Value < 0.005 Then
ElseIf txtVerschil3.Value < 0.01 Then
ElseIf txtVerschil3.Value < 0.05 Then
Else
End If
of
Code:
Select Case txtVerschil3.Value
    Case Is < -0.05
    Case Is < -0.01
    Case Is < -0.005
    Case Is < -0.0001
    Case Is < 0.0001
    Case Is < 0.005
    Case Is < 0.01
    Case Is < 0.05
    Case Else
End Select
 
Laatst bewerkt:
Bedankt voor je suggestie, maar toch even een wedervraag.
Moet ik het dan zo oplossen:

Code:
if txtVerschil3.value < -0.05 then
    with txtverschil3
        .backcolor=rgb(128,0,0)
        .forecolor=vbwhite
    end with
elseif txtVerschil3.value >= -0.05 and txtverschil3.value <-0.01 then
       with txtverschil3
        .backcolor=rgb(192,0,0)
        .forecolor=vbwhite
    end with
elseif....

Met alle respect vond ik jouw oplossing wel erg kort door de bocht
 
Met alle respect, enige zelfwerkzaamheid is toch niet teveel gevraagd dacht ik.
Beter zo:
Code:
With txtVerschilx
    .Value = FormatPercent(Sheets(1).[S6].Value, 3)
    Select Case txtVerschil3.Value
        Case Is < -0.05
            .BackColor = RGB(0, 192, 0)
            .ForeColor = vbWhite
        Case Is < -0.01
            .BackColor = RGB(255, 0, 0)
            .ForeColor = vbWhite
        Case Is < -0.005
            .BackColor = RGB(255, 176, 176)
            .ForeColor = vbBlack
        Case Is < -0.0001
            .Font.Bold = False
            .ForeColor = vbBlack
            .BackColor = RGB(255, 224, 224)
        Case Is < 0.0001
            .BackColor = RGB(0, 192, 255)
            .ForeColor = vbYellow
        Case Is < 0.005
            .BackColor = RGB(224, 255, 224)
            .ForeColor = vbBlack
        Case Is < 0.01
            .BackColor = RGB(192, 255, 192)
            .ForeColor = vbBlack
        Case Is < 0.05
            .BackColor = RGB(0, 192, 0)
            .ForeColor = vbWhite
        Case Else
    End Select
End With
 
Ik heb al heel veel zelfwerkzaamheid gepleegd en ook deze versie geprobeerd, maar met select case kan ik niet een reeks van waarde opgeven. Ik had zelf ook aan deze optie gedacht, maar liep toen tegen de beperking op dat ik maar een voorwaarde kan opgeven en niet, zoals ik wil, tussen 2 waarden een opmaak kan toepassen.
een voorbeeld
Code:
[CODE]select case txtverschil3
    case is >=-0.05 and <-0.01
        with txtverschil3
            .backcolor=...
            .forecolor=...
        end with

werkt niet met select case.
 
Je hoeft ook niet te testen of txtverschil3 tussen twee waarden in ligt, kijk maar eens goed naar de voorwaarden.
Voorbeeld:
txtverschil3 = 0.004
Pas bij Case Is < 0.005 wordt voldaan aan de voorwaarde. De crux is dat je in de juiste volgorde test.
Je kunt ook in omgekeerde volgorde werken, maar dan met groter dan, dus beginnen met > 0.05, daarna > 0.01 etc.
 
Dat ben ik nu aan het aanpassen. De eerste werkte overigens niet. Ik krijg nog steeds overal dezelfde kleur.
 
Ik had zelf ook aan deze optie gedacht, maar liep toen tegen de beperking op dat ik maar een voorwaarde kan opgeven en niet, zoals ik wil, tussen 2 waarden een opmaak kan toepassen.


werkt niet met select case.
Code:
Case 0.1 To 0.25
 
Ik ga het proberen, dank.
 
Beste Harry,
Ik moet je teleurstellen: ook de optie met "to" is niet mogelijk in een select case-constructie.
Helaas.

Ik heb wel een oplossing gevonden, maar geen mooie. Alleen zonder het %-teken werkt de select case-constructie en dan ook nog omgekeerd. Als ik klaar ben met het omzetten, zal ik je de nieuwe code sturen.
 
Dan doe je iets verkeerd.
 
Ik heb het gevoel dat je de verkeerde waarden controleert.
Plaats een voorbeeld document.
 
Er valt nog veel meer te verbeteren:
Gebruik vooral de ontwerpmodus om alle niet-variërende kenmerken in te stellen (zoals bijv. de labels)

CSS:
Private Sub UserForm_Initialize()
    sn = Aandelen_Intraday.UsedRange
    For j = 1 To 3
      Me("chkDoel" & j).Caption = sn(2 * j + 3, 2)
      Me("txtOpening" & j) = FormatCurrency(sn(5, 2 * j + 13))
      Me("txtHuidig" & j) = FormatCurrency(sn(2 * j + 3, 4), 3)
      Me("txtDoelProc" & j) = FormatPercent(sn(10, 2 * j + 13))
      Me("txtDoel" & j) = FormatCurrency(sn(9, 2 * j + 13), 3)
      Me("txtPer" & j) = FormatDateTime(sn(11, 2 * j + 13), 4)
      Me("txtAankoop" & j) = FormatCurrency(sn(14, 2 * j + 13))
      Me("txtVerk1Proc" & j) = FormatPercent(sn(14, 2 * j + 13) * 1.01)
      Me("txtWinstXproc" & j) = FormatPercent(sn(43, 2 * j + 13))
      Me("txtVerkXproc" & j) = FormatPercent(sn(14, 2 * j + 13) * (1 + sn(43, 2 * j + 13)))
    Next

    chkDoelAEX = sn(3, 2)
    txtOpeningAEX = FormatNumber(sn(5, 13), 3)
    txtHuidigAEX = FormatNumber(sn(3, 4), 3)
    txtDoelProcAEX = FormatPercent(sn(10,13))
    txtDoelAEX.Value = FormatNumber(sn(5,13) * (1 + sn(10,13)), 3)
    txtPerAEX.Value = FormatDateTime(sn(11,13), 4)

    With txtVerschilAEX
        .BackColor = Array(RGB(255, 224, 224), RGB(255, 176, 176), RGB(255, 0, 0), RGB(128, 0, 0), RGB(0, 192, 255), RGB(224, 255, 224), RGB(0, 192, 0), RGB(0, 128, 0))(Application.Match(--sn(6, 13) / 100, Array(-0.0001, -0.005, -0.01, -0.05, 0.0001, 0.005, 0.01, 0.05), 1))
        .Value = FormatPercent(sn(6, 13))
    End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan