VBA werkt niet op andere pc's

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • vinpower
  • Registratie: Juni 2006
  • Laatst online: 16:19
Hallo,

Uit wanhoop open ik hier een topic. Ik heb de onderstaande code in een worksheet staan om een slicer te koppelen tussen een draaitabel en een normale tabel. Echter op mijn computer werkt het perfect maar op andere computers niet.

Ik heb het volgende al geprobeerd of nagekeken:
  1. de verschillende instellingen bij trustcenter, waaronder enable all macro's
  2. Active x instelling ingesteld op enabled
  3. Er zijn geen verschillen tussen verschillende Excel versies vanwege updatepolicy
  4. Namen en verwijzingen nagekeken
  5. Er zijn geen verbindingen met andere bestanden
  6. Code bevat geen onbekende objects/libraries functies
Echter wanneer ik de code gebruikt in een nieuw bestand op mijn prive computer krijg ik het ook niet aan te praat. Enige verschil in functies wordt opgelost door de 'on error' bij application.commandbars, toch?

Wat kan het zijn waarom het niet werkt?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim sLastUndoStackItem As String
Dim sc_Pivot As SlicerCache
Dim sc_Table As SlicerCache
Dim si_Pivot As SlicerItem
Dim si_Table As SlicerItem

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

If Target.Name = "PivotTable4" Then 
    On Error Resume Next 
    sLastUndoStackItem = Application.CommandBars(14).FindControl(ID:=128).List(1) 'Standard Commandbar, undo stack

    If sLastUndoStackItem = "" Then sLastUndoStackItem = Application.CommandBars("Standard").Controls("&Undo").List(1)
    On Error GoTo 0

    If sLastUndoStackItem = "Filter" Or sLastUndoStackItem = "Slicer Operation" Then

        Set sc_Pivot = ActiveWorkbook.SlicerCaches("Slicer_Plant_descr.13") 
        Set sc_Table = ActiveWorkbook.SlicerCaches("Slicer_Plant_descr.12") 
        sc_Table.ClearAllFilters

        On Error Resume Next 
        For Each si_Pivot In sc_Pivot.SlicerItems
            With si_Pivot
                sc_Table.SlicerItems(.Name).Selected = .Selected
            End With
        Next si_Pivot
    End If
End If

With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

Application.EnableEvents = False
  Sheet21.PivotTables("PivotTable4").PivotCache.Refresh
Application.EnableEvents = True

End Sub

Beste antwoord (via vinpower op 22-12-2020 10:38)


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zet een onderbrekingspunt op regel 8 en loop stap voor stap door. Dan zie je meteen waar het mis gaat.En ja, regel 13 is verdacht net als regel 20. Sowieso ontgaat me de logica achter de verschillende if-statements.

On error resume next is ongeveer het stomste stukje code wat je in productiecode kunt zetten. Er zijn een of twee geldige toepassingen voor, maar dat is hier niet het geval.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Alle reacties


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 13:59

g0tanks

Moderator CSA
code:
1
Application.CommandBars(14).FindControl(ID:=128).List(1)

Dat stukje code refereert volgens mij naar een specifieke knop op je commandbar, die volgens de comment de undo-knop moet zijn. Als ik dat op mijn eigen computer check (Office 365 in het Engels) klopt dat ook:
code:
1
Debug.Print Application.CommandBars("Standard").Controls("&Undo").ID

geeft inderdaad de waarde 128 terug. Ik gok dat het in andere versies anders kan zijn. Hebben de andere computers bijvoorbeeld een Nederlandstalige versie? Check sowieso even met bovenstaande code of de ID klopt.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • Wim-Bart
  • Registratie: Mei 2004
  • Laatst online: 10-01-2021

Wim-Bart

Zie signature voor een baan.

code:
1
2
3
Application.EnableEvents = False
  Sheet21.PivotTables("PivotTable4").PivotCache.Refresh
Application.EnableEvents = True


Bij een nieuw bestand worden alle nummeringen weer gereset, dus sheet21 zou zo maar sheet2 kunnen zijn. En PivotTable4 zou ook zo maar eens PivotTable1 kunnen zijn, want bij nieuw bestand begint nummering overnieuw.

Beheerders, Consultants, Servicedesk medewerkers. We zoeken het allemaal. Stuur mij een PM voor meer info of kijk hier De mooiste ICT'er van Nederland.


Acties:
  • 0 Henk 'm!

  • vinpower
  • Registratie: Juni 2006
  • Laatst online: 16:19
Wim-Bart schreef op maandag 21 december 2020 @ 20:16:
code:
1
2
3
Application.EnableEvents = False
  Sheet21.PivotTables("PivotTable4").PivotCache.Refresh
Application.EnableEvents = True


Bij een nieuw bestand worden alle nummeringen weer gereset, dus sheet21 zou zo maar sheet2 kunnen zijn. En PivotTable4 zou ook zo maar eens PivotTable1 kunnen zijn, want bij nieuw bestand begint nummering overnieuw.
Daar was ik inderdaad bang voor, maar dat blijft dus hetzelfde, ook met Nederlandstalige Excel. Waar Sheet Blad heet.
g0tanks schreef op maandag 21 december 2020 @ 20:11:
code:
1
Application.CommandBars(14).FindControl(ID:=128).List(1)

Dat stukje code refereert volgens mij naar een specifieke knop op je commandbar, die volgens de comment de undo-knop moet zijn. Als ik dat op mijn eigen computer check (Office 365 in het Engels) klopt dat ook:
code:
1
Debug.Print Application.CommandBars("Standard").Controls("&Undo").ID

geeft inderdaad de waarde 128 terug. Ik gok dat het in andere versies anders kan zijn. Hebben de andere computers bijvoorbeeld een Nederlandstalige versie? Check sowieso even met bovenstaande code of de ID klopt.
Krijg op prive computer ook ID 128 terug. Maar omzeil ik dat niet met de on error next?

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zet een onderbrekingspunt op regel 8 en loop stap voor stap door. Dan zie je meteen waar het mis gaat.En ja, regel 13 is verdacht net als regel 20. Sowieso ontgaat me de logica achter de verschillende if-statements.

On error resume next is ongeveer het stomste stukje code wat je in productiecode kunt zetten. Er zijn een of twee geldige toepassingen voor, maar dat is hier niet het geval.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • vinpower
  • Registratie: Juni 2006
  • Laatst online: 16:19
Ja hij gaat dan mank op regel 15. Ik denk dat ik regel 15 t/m 20 eruit haal. Volgens mij heb ik ook niet nodig aangezien een slicer niet wordt opgeslagen als actie, toch?

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ligt eraan, maar zoals gezegd, ik snap de logica achter de if-statements niet. Zoals het er nu staat doet de routine alleen iets nuttigs als:
- de geupdate draaitabel de naam "PivotTable4" heeft én:
- de gebruiker vlak daarvoor een 'filter' of een 'slicer' aktie heeft gedaan én
- er twee slicercaches bestaan met de namen "Slicer_Plant_descr.13" resp "Slicer_Plant_descr.12"

De code lijkt heel erg op exact één specifieke situatie geschreven dat het me niet verwondert dat hij in andere gevallen niet werkt, of op zijn minst moet worden aangepast. Zorg er eerst voor dat alle if-statements de juiste afslag nemen, en haal de on error resume next weg zodat je een foutmelding krijgt die je de informatie geeft waar je verder moet debuggen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Voor de duidelijkheid: die resume next overal weghalen. Die wil je alleen gebruiken als er voor een heel specifieke situatie heel bewust voor wordt gekozen. Het is het equivalent van kapot maken van het knipperende oliepeil-lampje in de auto. Meestal niet handig.

Haal die regels overal weg en zie wat waar fout gaat.
vinpower schreef op maandag 21 december 2020 @ 19:46:
• de verschillende instellingen bij trustcenter, waaronder enable all macro's
offtopic:
Als alles straks werkt: advies is dat weer uit te schakelen. Onderteken de code en voeg het self signed certificaat toe. Anders maak je het malware ook te makkelijk om te draaien, wat mij betreft.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)

Pagina: 1