• 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.

Compatiliteitsprobleem Excel?

Status
Niet open voor verdere reacties.

MayNiak666

Gebruiker
Lid geworden
6 jan 2003
Berichten
234
Ik heb in Excel97 (onder W98) een werkmap gemaakt, met daarin een hoop VBA-code om e.e.a. te automatiseren. Nu werk ik sinds kort met Excel2000 (onder W2000), en wat blijkt? De code die voorheen als een trein liep, loopt vast! Nu meen ik al eens eerder op dit forum iets te hebben gelezen over dit fenomeen, maar ik kan het niet meer terug vinden. Aangezien het nogal wat werk is geweest om het programma werkend te krijgen, voel ik er eigenlijk weinig voor om helemaal overnieuw te beginnen. Wie weet wat de oplossing voor een dergelijk probleem is?
 
Hoi MayNiak666,

Waarschijnlijk heb je in VBA de verwijzingen niet goed staan (Extra -> verwijzingen).

Jeroen
 
Ik heb gekeken onder verwijzingen, en daar staan de volgende 5 items aangevinkt:

- Visual Basic for Applications
- Microsoft Excel 9.0 Object Library
- OLE Automation
- Microsoft Forms 2.0 Object Library
- Microsoft Office 9.0 Object Library

Mankeert er wat aan?
 
Hoi MayNiak666,

Wat doet je code, maakt deze gebruik van andere applicaties?

Ook nog een mogelijkheid dat het pad naar bestanden waarmee koppelingen gezocht worden verandert is.

Een (onbekende) foutmelding in een bestand waarvan ik de programmacode niet ken, is lastig in te schatten

Jeroen
 
Het excel-bestand in kwestie behelst een urenregistratie voor ons personeel. Eens per week (op maandag) wordt d.m.v. een druk op de knop het gehele bestand als bijlage via de e-mail verstuurd naar een aantal geadresseerden. Nadat dat gebeurt is, worden de ingevulde uren gewist, het weeknummer wordt aangepast, de werkbladen worden weer beveiligd, en als laatste wordt de actieve werkmap opgeslagen. In mijn beleving zorgt die laatste bewerking voor een foutmelding, die ik zo niet voor de geest kan halen, maar het heeft er mee te maken dat hij geen connectie met een object kan maken o.i.d. Het vreemde is, dat ik de VBA-code gerust op een laptop met W95 en Excel97 kan laten draaien, werkt perfect! Ook als ik een nieuwe werkmap maak, met daarin een teststukje code dat de actieve werkmap opslaat, gaat dat zoals het hoort. Het is alleen zo, dat als ik vanaf mijn werkplek (W2000, Excel 2000) de code laat lopen, dat de code de betreffende foutmelding geeft. Ik vermoed dat het te maken heeft met het feit dat ik het bestand heb "gemaakt" in Excel97, en dat die code niet 1-op-1 door Excel2000 werkt...
 
Hoi,

Welke code gebruik je om te mailen in dat bestand?

Als je via outlook werkt, moet je de Outlook library toevoegen als verwijzing!

Succes. :thumb:
Ps, zonder code wordt het lastig.
 
Het mailen gaat goed, dus daar zit'm de kneep niet. Ik gebruik "sendmail" om het bestand te versturen. De code zet ik hier liever niet op het forum, omdat er nogal het een en ander aan vertrouwelijke gegevens in staat. Nogmaals, de code draait perfect onder excel97, dus op zich is de code goed. Het gaat me er alleen om of iemand weet van een compatibiliteits-conflict tussen de verschillende versies van Excel, en zo ja, hoe dat op te lossen is...
 
Hoi MayNiak666,

Ik had laatst ook het probleem met het verzenden e-mails vanuit Excel en dat lag aan de verwijzing naar de Outlook Liberary. Ik was overgegaan van Excel 97 naar 2000. De foutmelding had ook iets van kan benodigd object niet vinden.

Een andere mogelijkheid kan zijn dat in de code verwist naar een directory om bestanden te halen of te schrijven die gewijzigd is. Controleer hierop.

De kans dat een 97 code niet werkt in 2000 lijkt mij zeer klein.

Jeroen
 
Met alle respect voor de genomen moeite, maar jullie lezen niet! Het mailen gaat goed; alle ontvangers krijgen het bestand op de correcte wijze binnen. Pas wanneer ik de aangepaste urenlijst wil opslaan, gaat het mis.
 
Hoi MayNiak,

Kun je de programmacode hier neerzetten, met name de code nadat het bestand via Excel verzonden is (na Sendmail), maar inclusief de declaraties van variabelen (Dim ... as ... enzovoorts, Bestandsnaam= "C:\....." enzovoorts)?

Voor alle duidelijkheid, in het spreadsheet ben ik niet geinteresseerd, het gaat om de VBA programmacode.

Ik krijg sterk de indruk dat in deze code opdracht gegeven wordt om naar een bepaalde directory te schrijven die of niet bestaat of waar geen rechten voor zijn om naar te schrijven.

Jeroen
 
Ik vermoed dat het te maken heeft met het feit dat ik het bestand heb "gemaakt" in Excel97, en dat die code niet 1-op-1 door Excel2000 werkt...

Hoi, :D

Dit lijkt mij heel sterk....andersom is het wel mogelijk!
Van een lagere naar een hogere versie is (zonder aanpassingen) in principe nooit een probleem! (andersom is het wel mogelijk..ivm toevoegen van functies)

Maar goed 2000 praat in ieder geval prima met 97 hoor.

Ik zit toch echt in de richting te denken van een verwijzing.

Als het dat niet is, aan een soort van Pad wat niet binnenkomt. (of te wel een verandering in de omgeving...mapje wat verplaatst is of zo)

Probleem kan ook komen omdat er naar iets gezocht wordt (variabele) welke niet meer aanwezig is en ga zo maar door.

Ik snap niet zo goed wat er prive zou zijn aan een stukje VBA-code...dat is het enige wat boeiend is. Zoals Jeroen al zij, gegevens zijn niet boeiend...code en verwijzingen wel.

Maar goed, zo ver kom ik zonder de code. (hoop dat er iets voor jou tussen zit)

Veel Succes! :thumb:
 
Hierbij de code:

Private Sub CBtnOk_Click()

' Definities

Password = "bg9bzqb3"
Invoer = FrmPassword.TBPassword.Value

Titel1 = "Fout"
Bericht1 = "Wachtwoord is niet correct. Let op de spelling, en controleer of CAPS-lock niet aanstaat!"
Stijl1 = vbRetryCancel + vbCritical + vbDefaultButton1

Titel2 = "Tot Ziens!"
Bericht2 = "U gaat terug naar het Invulblad"
Stijl2 = vbOKOnly + vbInformation

' Formulier uit geheugen verwijderen

Unload FrmPassword

' Controleren of ingevoerd wachtwoord juist is

If Invoer = Password Then
'routine uitvoeren
' Uren van de mensen waar uren ingevuld zijn,
' wegschrijven naar totaal overzicht

' Beveiliging werkbladen uitschakelen
With Worksheets("Wavin Lash")
.Activate
.Cells(11, 6).Select
.Cells(11, 6).Activate
End With
Worksheets("Invulblad").Unprotect Password:="Drowssap"
Worksheets("Wavin Lash").Unprotect Password:="Drowssap"
Worksheets("Totalen Overzicht").Unprotect Password:="Drowssap"
' Zoeken naar een naam
For Each NaamCel In Range("Naam2")
If Not NaamCel.Value = "" Then
naam = NaamCel.Value
rij = NaamCel.Row
' is er iets ingevuld in deze rij?
For c = 6 To 26
Set Zoekcel = Worksheets("Wavin Lash").Cells(rij, c)
If Not Zoekcel.Value = "" Then
Exit For
End If
Next c

If Not Zoekcel.Value = "" Then
' Eerste lege cel in kolom B zoeken
Set Doelcel = Worksheets("Totalen overzicht").Cells(4, 2)
Do While Not IsEmpty(Doelcel)
Set nextcell = Doelcel.Offset(1, 0)
Set Doelcel = nextcell
Loop
' weeknummer in de eerste kolom van doelblad plaatsen
r = Doelcel.Row
datumplak = Worksheets("Totalen overzicht").Cells(r, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Worksheets("Wavin Lash").Range("C6").Copy
Worksheets("Totalen overzicht").Range(datumplak).PasteSpecial _
Paste:=xlPasteValues
' bereik bepalen op doelblad
Bereik = Doelcel.Address(RowAbsolute:=False, ColumnAbsolute:=False)
' bron bepalen op bronblad
Bronbegin = Worksheets("Wavin Lash").Cells(rij, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Broneinde = Worksheets("Wavin Lash").Cells(rij, 26).Address(RowAbsolute:=False, ColumnAbsolute:=False)
' bronwaarden kopieren naar doelblad
Worksheets("Wavin Lash").Range(Bronbegin, Broneinde).Copy
Worksheets("Totalen overzicht").Range(Bereik).PasteSpecial _
Paste:=xlPasteValues
End If
End If
Next NaamCel

' knoppen verbergen...
Blad2.UrenVerwerken.Visible = False

' het actieve excel-bestand verzenden via e-mail
Weeknummer = Str(Worksheets("Invulblad").Range("e6").Value)
Onderwerp = "Urenlijst Wavin Lash Week" + Weeknummer
ActiveWorkbook.SendMail Recipients:=Array("de diverse e-mail-adressen"), Subject:=Onderwerp

' urenlijst leeg maken
Worksheets("Invulblad").Range("NormUren").ClearContents
Worksheets("Invulblad").Range("BijzUren").ClearContents

' weeknummer aanpassen
Worksheets("Invulblad").Activate
VorigJaar = Year(Date) - 1
EVJ = DateSerial(VorigJaar, 12, 31)
NwWeekNr = DateDiff("ww", EVJ, Date, vbMonday, vbFirstFourDays) + 1
With Worksheets("Invulblad")
.Range("E6") = NwWeekNr
.Cells(6, 5).Select
.Cells(6, 5).Activate
End With
' knoppen weer zichtbaar maken
Blad2.UrenVerwerken.Visible = True
' Werkbladen beveiligen
Worksheets("Invulblad").Protect Password:="Drowssap"
Worksheets("Wavin Lash").Protect Password:="Drowssap"
Worksheets("Totalen Overzicht").Protect Password:="Drowssap"
' bestand opslaan
ActiveWorkbook.Save 'en hier gaat het fout...
Else
Knop = MsgBox(Bericht1, Stijl1, Titel1)
Select Case Knop
Case Is = 4
FrmPassword.Show
Case Is = 2
Result = MsgBox(Bericht2, Stijl2, Titel2)
Worksheets("Invulblad").Activate
End Select
End If

End Sub

Wat schort er aan?
 
Hoi MayNiak666,

Ik geloof niet dat de code fout is, maar dat was ook niet te verwachten, omdat de code wel goed op andere computers draait. Het werkboek ordt opgeslagen in de actieve directoy zonder een pad er naar toe.

Wat mij betreft kun je nog paar dingen proberen:
- Schakel de regel ActiveWorkbook.save uit (' ervoor zetten)
- Sla het werkboek een handmatig keer op. Als dat niet lukt dan heb je waarschijnlijk geen rechten om op de schijf waar het programma staat te schrijven.
- Neem in plaats van Activeworkbook.save een pad dat zeker werkt, desnoods de A-schijf.

Bij mij op het werk zijn we onlangs overgestapt op nieuwe computers. 1 van de nieuwe trucjes van automatisering was dat het systeem stabieler moest en men heeft dat bereikt door alle interne schijven te blokkeren voor schrijven. Het gevolg alle programma's die een bestandje op de C-schijf moeten schrijven om te kunnen werken deden het niet meer.

Jeroen
 
Hoi MayNiak, :D

Nou met die code is niks mis hoor...ik zie er niks aan.

Vindt die tip van Jeroen trouwens wel een goede!
Het is idd mogelijk dat het progje in een directory staat waar jij nu even geen rechten op hebt.

Probeer in deze Dir eens een ander bestandje op te slaan? Als dit niet lukt, moet je eens naar de rechten kijken en denk dan ook aan INHERETENCE van andere dir's. (ten minste, misschien zijn jullie ook van OS veranderd)

Een andere optie is dat het docje corrupt is geraakt!
Wellicht kun je even een kopie maken en de Code cleander van Rob Bovey er even overeen jagen.

Deze kun je HIER vinden! (bij de free utilities)

Deze haalt de rotzooi uit de code! (zeer waardevol, is meteen de bestandsgrootte een stuk minder)

Ik hoop dat je er nog uitkomt! :thumb:
 
Nou, ondanks een ieders inspanningen ben ik er nog niet helemaal uit. Ik heb nog steeds dezelfde rechten als voorheen op de map waar ik naar toe wil schrijven dus dat lijkt me het probleem niet. Ik zal de suggesties die door jullie allen zijn aangeleverd ter hand nemen, en hoop dat het probleem daardoor opgelost is/wordt.
In ieder geval iedereen bedankt!
 
Ik had eerder deze thread als opgelost gezet, ondanks het feit dat de oplossing nog niet daar was. Sinds kort draai ik het "programma" op een andere PC, en daar deed het probleem zich ook voor. Ik heb geprobeerd te achterhalen waar de code vastliep, en dat is volgens mij wanneer het bestand opgeslagen wordt. Het vreemde is echter, toen ik de code met F8 stap voor stap doorliep, alles wel goed ging. Moet ik er wel bij vermelden, dat ik het verzenden van het bestand via de e-mail even uitgezet had. Nu denk ik dat het zo is, dat Outlook het bestand niet snel genoeg vrijgeeft nadat het verzonden is, en dat daardoor een conflict ontstaat?! Klinkt dat zinnig, of is dit een gedachte-kronkel van mij die nergens op slaat...
 
Hai May, :D

Tja dat kan altijd dat de code sneller is als de uitvoering!

Zet vóór waar het foutgaat eens een Timer om de sub te vertragen:
Code:
        'TIMER: 
            Dim StartTime As Single 
            StartTime = Timer 
            Do While Timer < StartTime + 10 
                DoEvents 
            Loop 
        'ENDTIMER 
        'TIMERINFO: MsgBox "Time taken was: " & (Timer - StartTime) & " seconds"

Experimenteer hiermee wellicht geeft het meer tijd voor datgene wat traag uitvoerd!

Succes!
:thumb:
 
Dat is misschien een optie. Ik zal eens proberen of het gebruik van een timer het probleem oplost... Bedankt voor de tip.:thumb:
 
Helaas, helaas, dit was het ei van Columbus niet. Ik ben er inmiddels wel achter dat het iets te maken heeft met het verzenden via de e-mail. Na het versturen van het bestand als bijlage via de e-mail, lukt het me niet om het bestand op te slaan. Excel genereert dan een foutmelding en moet worden afgesloten. Sla ik het versturen via de e-mail over, dan lukt het wel!:confused: Als Excel dan zeg maar afgesloten is, en je drukt op Ctrl-Alt-Del, dan zie je onder taakbeheer nog wel steeds Excel staan, en wil je het dan afsluiten, dan geeft Taakbeheer aan dat het programma nog bezig is, of op een antwoord van de gebruiker wacht. Ik vind het allemaal heel vreemd. Volgens mij zit er in de code geen enkele loop die kan blijven hangen, dus ik vermoed dat er iets niet fris is tussen Outlook en Excel... Weet iemand daar misschien meer over?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan