Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: VBA-code versnellen/aanpassen/opschonen...  (gelezen 12337 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #60 Gepost op: 03 september 2021, 19:24:18 »
Hey Albert,

Omdat ik dacht dat het probleem bij mijn code achter de 'uitvoeren'-knop lag (omdat ik daar nog toevoegingen/wijzigingen had gemaakt) had ik eerst mijn hele codeblok doorgenomen en herschreven met een iets andere structuur. Na een halve dag hiermee bezig te zijn geweest en hiermee het probleem nog steeds niet opgelost was ben ik beginnen nadenken over wat er nog allemaal toegevoegd/gewijzigd was....
uiteindelijk heb ik de reden van de plotse foutmelding gevonden...

de code Txt_sombedrag = Replace(Txt_sombedrag, ".", ",") is de boosdoener...
Als ik bovenstaand lijntje code uitschakel heb ik de foutmelding niet meer...
Maar dan heb ik wel weer het fenomeen als ik handmatig een decimaal bedrag intyp dat er na 'enter' of 'tab' (ik dus naar het volgende object op het UF ga) een bedrag staat dat 10x groter is dan hetgene ik had ingetypt....

Ik ben al enkele uren bezig met het zoeken en testen/wijzigen van code maar ik vind echt geen oplossing om beide fouten te voorkomen.

Ik vrees dat ik helemaal opnieuw zal moeten beginnen.... :'(

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.279
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #61 Gepost op: 03 september 2021, 21:48:20 »
BD, dan ga ik nu mijn reactie maar ff geven die ik al heel veel posts heb ingeslikt. En dat is "stop met een tekstbox te willen voorzien van een volkomen onnodig euro-teken". Het voegt toch helemaal niets toe? Behalve ellende nu dus?
Je weet bij invoer toch dat het gaat om bedragen? Zet eventueel in een label voor die tekstbox een € als je dat duidelijker vindt.
Zo... dit ben ik ff kwijt.  :)
Maar wellicht zit ik er hélemaal naast met mijn mening. Schroom niet om dat gewoon aan te geven.  ;)
______________________________

Groet, Leo

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #62 Gepost op: 03 september 2021, 22:01:34 »
Wat Leo aangeeft is juist, onnodige poespas vermijden.
Maar zoals ik al eerder aangaf,  in het laatste voorbeeldbestand van deze topic werkt alles.
Plaats daarom het bestand. Heel misschien kan ik ontdekken waarom het fout gaat.
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #63 Gepost op: 04 september 2021, 12:44:55 »
Had ik van in het begin geweten dat die "FormatCurrency" dergelijke problemen zou veroorzaken dan had ik dit van in het begin reeds aangepast en had ik nu niet een halve week tijd verkwist.... maar goed...

Ik heb mijn code grotendeels herschreven en het ontwerp van de UF lichtjes aangepast. Bij deze hang ik het eindresultaat.
Dit is de start-versie van het bestand. (dus de versie die je krijgt nadat je de code achter de knop 'bestand resetten' hebt uitgevoerd).
Heb wel de bestandsnaam naderhand nog handmatig aangepast, enkel maar omdat ik het hier ging toevoegen.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #64 Gepost op: 05 september 2021, 10:14:05 »
toch nog een (hopelijk) laatste vraagje...

Hoe je op een werkblad de laatste niet-lege rij moet zoeken via een bepaalde kolom weet ik.
Maar hoe doe je dit voor een 'echte' tabel waarbij niet gekend is in welke kolom de laatst niet-lege
cel zich bevind?

Of anders, hoe maak je een 'echte' tabel leeg ZONDER de berichtkoppen te wissen als niet gekend is
in welke kolom de laatst niet-lege cel zich bevind?

Alvast dank aan diegenen die willen helpen.


groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline Warme bakkertje

  • Volledig lid
  • **
  • Berichten: 215
  • Geslacht: Man
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #65 Gepost op: 05 september 2021, 11:05:34 »
With ActiveSheet.ListObjects(1).DataBodyRange
   If .Rows.Count > 1 Then
        .Rows(1).SpecialCells(2).ClearContents
        .Offset(1).Resize(.Rows.Count - 1).Delete
   End If
End With
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #66 Gepost op: 05 september 2021, 11:24:45 »
@Warme bakkertje,

Hartelijk dank voor jouw reactie. _/-\o_
Toch nog een bijkomende vraag...

De betreffende tabel (tblCategorie) bevind zich op werkblad "Categorie" en de code om deze tabel leeg te
maken moet achter de knop 'bestand resetten' komen welke zich op het werkblad "Budget" bevind...

Hoe bouw ik dan jouw aangereikte code-blok op?


groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline Warme bakkertje

  • Volledig lid
  • **
  • Berichten: 215
  • Geslacht: Man
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #67 Gepost op: 05 september 2021, 11:47:15 »
Sub resettable()
    With Sheets("Categorie").ListObjects("tblCategorie").DataBodyRange
        If .Rows.Count > 1 Then
            .Rows(1).SpecialCells(2).ClearContents
            .Offset(1).Resize(.Rows.Count - 1).Delete
        End If
    End With
End Sub
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #68 Gepost op: 05 september 2021, 12:04:28 »
@Warme bakkertje,

Hartelijk dank.  _/-\o_ :thumbsup:


groetjes,
BlackDvil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #69 Gepost op: 05 september 2021, 16:01:20 »
nog een optie:
With Sheets("Categorie").ListObjects(1)
 If .ListRows.Count Then .DataBodyRange.Delete
End With

of
With Sheets("Categorie").ListObjects("tblCategorie")
If .ListRows.Count Then .DataBodyRange.Delete
End With
Groet,

Albert

Offline Warme bakkertje

  • Volledig lid
  • **
  • Berichten: 215
  • Geslacht: Man
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #70 Gepost op: 05 september 2021, 17:06:46 »
@Albert,

Hou er dan wel rekening mee dat als je het op jouw manier doet en je maakt gebruik van formules in je tabel dat je die ook kwijt bent.

Daarom is het beter om alle rijen te verwijderen buiten de 1ste en daarin enkel de constante waarden te wissen zodat je formules intact blijven.
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #71 Gepost op: 05 september 2021, 17:32:07 »
@ Warme bakkertje,

Inderdaad, daar had ik dus niet aan gedacht.
Bedankt voor jouw reactie :thumbsup:
Dat is het verschil tussen een Expert en een VBA-leerling ;D
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #72 Gepost op: 06 september 2021, 17:12:11 »
Goedenavond allen,

Bij wijze van uitgebreid testen heb ik de afgelopen 2 dagen eens alle transacties uit mijn originele (oude) bestand ingegeven
in de recentste versie van mijn nieuw bestand. Heeft ff geduurd om al die transacties van om en bij de acht maanden in te geven
maar dit was volgens mij de enige manier om echt te testen of er nog foutjes aanwezig waren.
Op deze manier heb ik er dan toch nog enkele gevonden en aangepast.

In principe werkt de volledige code nu naar behoren en is het bestand dus 'af'.
Doch zou ik hier en daar enkele code-blokjes willen verbeteren indien mogelijk.

Zo heb ik een aantal loops met (serieus geneste) If-statements en ik vroeg me dus af of dit in sommige gevallen niet beter kan omgezet worden naar een 'select case'. Maar gezien mijn beperkte algemene kennis en het feit dat ik met 'select case' totaal geen ervaring heb en er soms best wel wat diverse voorwaarden verbonden zijn wou ik hier eens één van die code-blokjes laten zien om enerzijds te achterhalen of het al dan niet beter is er een 'select case' (of iets anders) van te maken en zo ja, hoe ik dit dan dien op te bouwen.

Een eerste blokje dat ik eventueel wil verbeteren is het volgende :
With Sheets("Rek-overzichten")
        .Cells(rek, 1) = datum
        .Cells(rek, 2) = tgnprt & " " & nota
        If categorie = "INKOMSTEN" Then
            .Cells(rek, 3) = bedrag
        End If
        If categorie = "SPREK's" Then
            If tgnprt = "Sprek -59" Then
                If bedrag > 0 Then
                    .Cells(rek, 6) = bedrag
                    .Cells(rek, 9) = bedrag
                Else
                    .Cells(rek, 3) = bedrag * -1
                    .Cells(rek, 10) = bedrag * -1
                End If
            End If
            If tgnprt = "Sprek -74" Then
                If bedrag > 0 Then
                    .Cells(rek, 6) = bedrag
                    .Cells(rek, 13) = bedrag
                Else
                    .Cells(rek, 3) = bedrag * -1
                    .Cells(rek, 14) = bedrag * -1
                End If
            End If
        End If
        If categorie <> "INKOMSTEN" And categorie <> "SPREK's" Then
            If tgnprt = "Sparen -59" Or tgnprt = "Sparen -74" Then
                .Cells(rek, 6) = bedrag
                If tgnprt = "Sparen -59" Then
                    .Cells(rek, 9) = bedrag
                Else
                    .Cells(rek, 13) = bedrag
                End If
            ElseIf tgnprt = "CM-Tsskmst" Then
                .Cells(rek, 3) = bedrag
            Else
                .Cells(rek, 4) = bedrag
            End If
            If CheckBox1.Value = True Then
                .Cells(rek, 5) = verschil
                .Cells(rek, 13) = verschil
            End If
        End If
        .Cells(rek, 7) = .Cells(rek - 1, 7) + .Cells(rek, 3) - (.Cells(rek, 4) + .Cells(rek, 5) + .Cells(rek, 6))
        .Cells(rek, 11) = .Cells(rek - 1, 11) + .Cells(rek, 9) - .Cells(rek, 10)
        .Cells(rek, 15) = .Cells(rek - 1, 15) + .Cells(rek, 13) - .Cells(rek, 14)
    End With

Alvast dank op voorhand.

Groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #73 Gepost op: 07 september 2021, 06:48:14 »
Toch zelf maar eens een poging gewaagd om het om te zetten in een 'Select Case'.
Heb het nog niet uitgetest, wou eerst zeker zijn dat ik het wel goed opgebouwd heb alvorens mijn volledige code overhoop te gooien.

Dit is wat ik er van gemaakt heb :
With Sheets("Rek-overzichten")
.Cells(rek, 1) = datum
.Cells(rek, 2) = tgnprt & " " & nota
Select Case categorie
    Case "INKOMSTEN"
        .Cells(rek, 3) = bedrag
    Case Else
        Select Case tgnprt
            Case "Sprek -74", "Sparen -74"
                Select Case bedrag
                    Case Is > 0
                        .Cells(rek, 6) = bedrag
                        .Cells(rek, 13) = bedrag
                    Case Else
                        .Cells(rek, 3) = bedrag * -1
                        .Cells(rek, 14) = bedrag * -1
                End Select
            Case "Sprek -59", "Sparen -59"
                Select Case bedrag
                    Case Is > 0
                        .Cells(rek, 6) = bedrag
                        .Cells(rek, 9) = bedrag
                    Case Else
                        .Cells(rek, 3) = bedrag * -1
                        .Cells(rek, 10) = bedrag * -1
                End Select
            Case "CM-Tsskmst"
                .Cells(rek, 3) = bedrag
            Case Else
                .Cells(rek, 4) = bedrag
                Select Case CheckBox1.Value
                    Case True
                        .Cells(rek, 5) = verschil
                        .Cells(rek, 13) = verschil
                End Select
        End Select
End Select
.Cells(rek, 7) = .Cells(rek - 1, 7) + .Cells(rek, 3) - (.Cells(rek, 4) + .Cells(rek, 5) + .Cells(rek, 6))
.Cells(rek, 11) = .Cells(rek - 1, 11) + .Cells(rek, 9) - .Cells(rek, 10)
.Cells(rek, 15) = .Cells(rek - 1, 15) + .Cells(rek, 13) - .Cells(rek, 14)
End With

Is dit goed opgebouwd? Gaat dit hetzelfde resultaat geven als mijn If-statements?
Kan het eventueel nog beter opgebouwd worden?

Ik lees het wel.
Alvast dank op voorhand.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: VBA-code versnellen/aanpassen/opschonen...
« Reactie #74 Gepost op: 07 september 2021, 08:26:39 »
dag,
omdat ik bleef sukkelen met die veranderende hoogtes van mijn beide listboxen ben ik nog eens op het web gaan zoeken en de oplossing is eigenlijk simpel :
in de eigenschappen van een listbox zelf heb je een optie : Integralheight , zet die op "false" (staat standaard op "true" ) en voila , probleem is opgelost.
Mvg,
Montagnard.

 


www.combell.com