Help!

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

Hulp bij posten

Recente topics

Auteur Topic: #DIV0! formulefout vervangen met een macro  (gelezen 3644 keer)

0 leden en 1 gast bekijken dit topic.

Offline dimy

  • Volledig lid
  • **
  • Berichten: 205
  • Oplossing.be
#DIV0! formulefout vervangen met een macro
« Gepost op: 26 maart 2008, 11:56:22 »
Beste Excel specialisten,
Volgende macro gebruikte ik om de formulefouten ,
#DIV0! op te vangen

Sub Remove_Formula_Errors()
Dim rng As Range, cell As Range, fmla As String
Set rng = Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "), """"," & fmla & ")"
Next
End Sub


Dit werkte perfect tot ik een getal invulde in een lege cel waarnaar een formule verwees.
Ik kreeg de melding "kan niet saven" er is een fout opgetreden en Excel wordt afgesloten.
Daarna kon ik mijn bestand onmogelijk nog openen.
Omdat ik het bestand niet meer kan gebruiken is het ook onmogelijk om het als bijlage te verzenden.
Heeft er iemand dezelfde ervaring? ... Hoe heb je dat toen opgelost.

Vriendelijk groeten
Dimy
Desktop Windows 10   NLD 64 bits
ASUSTeK COMPUTER INC. H110M-C 8 GB Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz - 1400
Intel(R) HD Graphics 630 1024MB 1920  x 1080
Realtek High Definition Audio
Western Digital WDC WD10EZRZ-00HTKB0
 Samsung SSD 860 EVO 250GB  C:\ NTFS 232 GB 191 GB
                                                D:\ NTFS 1Tb
McAfee VirusScan Enterprise
Windows Defender
Windows Firewal Enabled True

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: #DIV0! formulefout vervangen met een macro
« Reactie #1 Gepost op: 27 maart 2008, 21:29:12 »
Dimy, Allereerst de vraag waarom je de foutmelding via VBA wilde verwijderen? Dit kan toch sneller met een formule in de worksheet zelf? =IF(ERROR(de testen formule op #DIV/0);doe niets; doe je hier opgegeven formule)
Maar goed, het probleem is ontstaan. Dus nu nog een oplossing. Ik heb wat voor je lopen zoeken op het WWW en vond eigenlijk alleen maar oplossingen in de richting van 'recovery software'. Een tip die ik nog vond was het verwijderen (Excel uiteraard éérst sluiten!) van je Personal.xls (Prsnlk.xls) en dan Excel opnieuw op te starten. Je default workbook wordt daarmee opnieuw opgebouwd en zou het kunnen zijn dat je 'beschadigde' bestand weer wil openen. (ik zou 'm persoonlijk ipv 'verwijderen' ff hernoemen van extentie; dus bijvoorbeeld Personal.xls.old)
Kan je Excel zelf nog wel goed opstarten?

Succes alvast!

Groet, Leo
______________________________

Groet, Leo

Offline dimy

  • Volledig lid
  • **
  • Berichten: 205
  • Oplossing.be
Re: #DIV0! formulefout vervangen met een macro
« Reactie #2 Gepost op: 29 maart 2008, 13:38:35 »
Dankjewel Leo voor je reactie.
De reden waarom ik het met een macro deed was dat het gaat om een flink uitgebreide sheet die voorheen door een ander persoon gemaakt werd. De sheet zelf bevat om en bij de 300 verschillende formules die op hun beurt verwijzen naar andere cellen.
Ik had geen zin om elke formule te gaan vervangen door =IF(Error...enz
...Of bestaat daar eventueel een handige truck voor? (om alle formules in mijn werkblad te vervangen door de formule met IF(Error ervoor?
Ondertussen is mijn probleem opgelost en heb ik mijn file terug. Allé , ttz ik heb door onze IT afdeling een backup laten terugzetten van net voor mijn aanpassing.
Ik blijf echter naar een oplossing zoeken want een sheet met #DIV/0 in sommige cellen oogt weinig proffesioneel. Niet?

Groetjes
Dimy
Desktop Windows 10   NLD 64 bits
ASUSTeK COMPUTER INC. H110M-C 8 GB Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz - 1400
Intel(R) HD Graphics 630 1024MB 1920  x 1080
Realtek High Definition Audio
Western Digital WDC WD10EZRZ-00HTKB0
 Samsung SSD 860 EVO 250GB  C:\ NTFS 232 GB 191 GB
                                                D:\ NTFS 1Tb
McAfee VirusScan Enterprise
Windows Defender
Windows Firewal Enabled True

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: #DIV0! formulefout vervangen met een macro
« Reactie #3 Gepost op: 29 maart 2008, 22:15:08 »
Dimy, prettig dat je probleem is opgelost. Bij bestudering van je code zie ik dat je eigenlijk al bezig bent met het vervangen van je sheet-formules. Maar alleen in die gevallen dat een formule een error heeft gegenereerd.
Ik heb dus de vrijheid genomen om je code wat aan te passen... :)Option Base 1

Sub ReplaceFormulas()
Dim rRng As Range, rCell As Range
Dim sFmla As String
Dim arrFoutDump(100, 2) As Variant 'maximaal 100 cellen die niet worden aangepast
Dim i As Integer, x As Integer
Const sKolom As String = "Q" 'verander deze kolomletter in de juiste kolom voor het tonen van de fout-tabel
   
    i = 0
   
    For Each rCell In Cells.SpecialCells(xlCellTypeFormulas)
        sFmla = Right(rCell.Formula, Len(rCell.Formula) - 1)
        If MsgBox("Wil je de volgende formule" & Chr(13) & Chr(13) & _
                    rCell.Formula & Chr(13) & Chr(13) & _
                    "in cel " & rCell.Address(False, False) & " vervangen voor deze" & Chr(13) & Chr(13) & _
                    "=IF(ISERROR(" & sFmla & ");"""";" & sFmla & ")", _
                    vbYesNo, "Kies...") = vbYes Then
            rCell.Formula = "=if(iserror(" & sFmla & "),""""," & sFmla & ")"
        Else:
            rCell.Interior.ColorIndex = 7 'hard roze
            i = i + 1
            arrFoutDump(i, 1) = rCell.Address(False, False)
            arrFoutDump(i, 2) = rCell.Formula
        End If
    Next rCell
       
    Cells(1, sKolom).Resize(, 2).Value = Array("CEL", "FORMULE")
   
    For x = 1 To i
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(x + 1, sKolom), Address:="", _
                    SubAddress:=arrFoutDump(x, 1), TextToDisplay:=arrFoutDump(x, 1)
        Cells(x + 1, sKolom).Offset(, 1).Value = "'" & CStr(arrFoutDump(x, 2))
    Next x
   
    Columns(sKolom).Resize(, 2).AutoFit
   
End Sub
Hiermee ga je in je sheet formule voor formule bekijken (mét melding) of je 'm wilt vervangen of niet. Als je Yes geeft, zal de aanwezig formule worden aangevuld met het 'iserror' gedeelte. Als je No geeft zal de formule ongemoeid blijven, maar wel worden opgeslagen in de VBA-array. Als alle formule-cellen doorlopen zijn, wordt de array geleegd op een door jou aangegeven plaats (geef in de code ff de juiste kolom op van waaraf kan worden begonnen). In de aangemaakte tabel worden de cellen als hyperlink getoond en de ongecorrigeerde formule als text. Zo kan je heel makkelijk zien waarom je de formule niet hebt willen veranderen om er vervolgens snel naar toe te gaan om 'm handmatig aan te passen.

De reden voor deze verandering van je code is namelijk dat ik denk dat je in je 'probleem-workbook' formules hebt aangepast die je beter niet had kunnen aanpassen.

Kijk maar 'ns of je deze code kan toepassen in je eigen herstelde workbook (maak wel eerst een backup!). Het op deze manier doorlopen van zo'n 300 verschillende formules kost je waarschijnlijk een stuk minder tijd dan dat je 't handmatig zou gaan doen. Maar zo kan je toch lekker je workbook updaten naar je eigen wensen.

Voor het gemak plaats ik ook nog het workbook waarin ik de code aangepast heb. Kan je eerst ff 'droog' oefenen.  ;D

Groet, Leo
______________________________

Groet, Leo

Offline dimy

  • Volledig lid
  • **
  • Berichten: 205
  • Oplossing.be
Re: #DIV0! formulefout vervangen met een macro
« Reactie #4 Gepost op: 30 maart 2008, 12:14:41 »
Dankjewel Leo,
Ik ga zeker en vast het één en ander uitproberen.
...euh maar wel eerst op een copy workbook.
Normaal neem ik altijd eerst een copy. Waarom ik dat nu niet gedaan heb weet ik verdorie ook niet.
Ik was zo zeker dat de macro ging werken.
Mijn vermoeden is dat de beveiliging van ons netwerk er iets mee te maken heeft. Dat zal ik eens moeten uitpluizen.
Hoedanook , een mooi stukje code heb je daar geschreven. Knap gedaan! Bedankt!
Groetjes
Dimy

Desktop Windows 10   NLD 64 bits
ASUSTeK COMPUTER INC. H110M-C 8 GB Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz - 1400
Intel(R) HD Graphics 630 1024MB 1920  x 1080
Realtek High Definition Audio
Western Digital WDC WD10EZRZ-00HTKB0
 Samsung SSD 860 EVO 250GB  C:\ NTFS 232 GB 191 GB
                                                D:\ NTFS 1Tb
McAfee VirusScan Enterprise
Windows Defender
Windows Firewal Enabled True

 


www.combell.com