Makro lakannut toimimasta

-Pasi-

Minulla on eräässä konversio-ohjelmassa makro, jolla työkirjan välilehdillä olevat koodit poistetaan. Tämä on tarpeen siksi että erään sovelluksen vanhemmassa versiossa koodia on jokaisen välilehden mukana mutta uudemmassa versiossa koodi on kaikille välilehdille yhteinen (koodi sijaitsee ThisWorkbook) ja vanhan version välilehdet on muokattava uuteen sopivaksi. Koodinpoistokoodi on alla olevan mukainen:

Sub Sub_PoistaTaulukonKoodit()

' Poistetaan taulukoiden moduulissa olevat koodit
' - By Cpearson -

Dim sSheet As Object, strName As String

For Each sSheet In Sheets
Select Case UCase(sSheet.Name)
Case "2004", "2005", "2006", "2007"
strName = sSheet.CodeName

With ActiveWorkbook.VBProject.VBComponents(strName).CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
End Select
Next sSheet
End Sub

Aiemmin tämä on toiminut moitteetta mutta nyt ohjelman suoritus kaatuu kohtaan "With ActiveWorkbook.VBProject.VBComponents(strName).CodeModule" virheilmoituksella "Run-time Error '1004' Visual Basic-projektin ohjelmallista käyttämistä ei ole tunnistettu luotettavaksi".
Nyt kun klikkaa "Debug" ja yrittää suorittaa rivin, tulee herja "Run-time error '1004' Method 'VBProject of object '_Workbook' failed"

En pariin vuoteen ole yllä olevaa koodia tarvinnut, ja mikä edellisestä kerrasta on muuttunut niin koneeseen on pitänyt palauttaa tehdasasetukset ja asentaa kaikki ohjelmat uudestaan. Excelin versio onsama kuin ennenkin, eli 2002.

Olisiko ongelma nyt siinä että Visual Basicin "Tools" -> "References" puuttuu joku tarpeellinen palikka?

5

286

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • -Pasi-

      Löysin tuon samaisen koodin jossa alussa oli huomautuksena:

      Needs Reference Set To _"Microsoft Visual Basic For Applications Extensibility"

      mutta tuollaisessa kohtaa minulla täppä kyllä on. Itse asiassa minulla on "Microsoft Visual Basic For Applications Extensibility 5.3", eli ilmeisesti joku versionumero lopussa.

    • laita se suurimmalla numerolla oleva referenssi käyttöön.
      Joku referenssi siiinä koneessa on muuttunut. Jos referenssi puuttuu niin se herjaa puuttumista. Ehkäåä se koodi olisi parasta olla normaalimoduulissa eikä This Workbook moduulissa?

      • -Pasi-

        Kiitos Kunde vastauksesta :)

        Nyt toisella koneella löysin tosiaan tuolta viittauksista "Microsoft Visual Basic For Applications Extensibility" sekä "Microsoft Visual Basic For Applications Extensibility 5.3" (ei tietenkään peräkkäin aakkosjäjestyksessä listalla) ja testasin koodia joka tässä koneessa toimikin olipa täppä kummassa viittauksessa tahansa. Kokeilen illalla vielä toisella koneella onko siinä vaikutusta missä kohtaa täppä on. Tässä koneessa jossa koodi toimii (Excel 97), on se harmi että virustorjunta kuvittelee koodin olevan virus ja tuhoaa sen kyselemättä ;)

        Yllä oleva koodinpoistokoodi toki on moduulissa, mutta poistettavaa ja korvattavaa koodia en moduuliin voi laittaa koska tapahtumat ovat Worksheet_BeforeDoubleClick ja Worksheet_BeforeRightClick.

        Alun perin DoubleClick- ja RightClick koodit olivat välilehden mukana, mutta kun välilehti kopioitiin uudeksi niin myös koodi kopioitui. Tämän takia muutin koodin ThisWorkbookiin ettei sama koodi turhaan toistuisi ja kasvattaisi tiedostokokoa. Välilehtiä yhteen tiedostostoon tulee yksi lisää periaatteessa vuosittain ja tiedostoja on himpun alle kaksi tuhatta.

        Worksheet_BeforeDoubleClick ja Worksheet_BeforeRightClick tapahtumat eivät tee muuta kuin käynnistävät toisessa työkirjassa olevan makron. Tämä siksi että noiden parin tuhannen työkirjan koodi olisi mahdollisimman lyhyt ja tiedostokoko mahdollisimman pieni.


    • hehehe...
      ehkäpä Kundepuu (alias Kunde auttaa sua kaupallisesti -maybe too heavy to free)...

      • -Pasi-

        En kerta kaikkiaan keksinyt miksi konvertointi ei toimi 2002:ssa joten käytin oikotietä ja asensin Excel 97 koneelle ja sillä sain konvertoinnin tehtyä. Ihmetyttää vaan miksi ei 2002 toiminut kun aikaisemmin se siinä on toiminut.

        Kiitos Kunde vastauksistasi.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Sanna Marin vetänyt leukoja 11 kertaa

      Tästähän oli joskus polemiikkia, kun muistaakseni lupasi kymmenen tai jotain vedellä. No nyt niin on, ainakin omien san
      Maailman menoa
      78
      5924
    2. Kirjoita

      … jotakin minkä vain kaivattusi tietää
      Ikävä
      123
      2356
    3. Farmi Suomi: Kokeeko Frederik, 81, saman kohtalon kuin ikämies Danny?

      Danny, musiikkineuvos Ilkka Lipsanen, nähtiin mukana Farmi Suomi -realityssä v. 2024. Danny teki yllätysratkaisun ja tuo
      Tv-sarjat
      25
      2178
    4. Tyhmä persuväite = köyhä argumentti

      Väite, että vasemmistopuolueita äänestäisivät vain “köyhät, tapatyöttömät tai heikoilla lahjoilla varustetut”, kertoo en
      Maailman menoa
      30
      2138
    5. Sosialismia Tampereella: Virallinen ilmiantolinja avautuu kaupungissa

      Nyt siis mennään mansessa ihan justiinsa samaan malliin kuin entisessä Neuvostoliitossa, jossa saattoi ilmiantaa naapuri
      Maailman menoa
      59
      2121
    6. Tiesitkö? Andy McCoy ja Pelle Miljoona saavat taiteilijaeläkettä - Tämän suuruinen eläke on

      Ylimääräiset taiteilijaeläkkeet on jaettu ja 59 taiteilijaa sai sen. Taiteilijoiden keskimääräinen eläketulo jää hyvin a
      Maailman menoa
      65
      1566
    7. Oliko se peppu

      Vai älykkyys mikä enemmän viehätti?
      Ikävä
      73
      1486
    8. Haluan sut

      Voitaisiinko tutustua paremmin toisiimme? Ovi on aina auki sinulle. Lähelle.
      Ikävä
      39
      1295
    9. Tätä et nähnyt tv:ssä: Frederik paljastaa - Totuus "haisevasta jäynästä" pehtoorille Farmilla

      Frederik veti ns. herneen nenään ja päätti kostaa pehtoorille. Mitäs mieltä olet Frederikin "aamutoimista"? Lue jutt
      Tv-sarjat
      8
      1271
    10. Kunnanvaltuusto koolle heti

      Tämä on erittäin vakava tilanne 17 hakkiita oli hyrylle mutta Kas kummaa kaksi hakkiota loppusuora oli Kainuusta ja Brys
      Hyrynsalmi
      29
      1269
    Aihe