Toon posts:

[VBA excel 2007] xlCalculationManual probleem

Pagina: 1
Acties:

  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 09:30
Hi ik zit met een stuk code te worstelen die het volgende doet:

-> 1: ga naar een file op netwerk
-> 2: open de file en copieer column A-G
-> 3: ga naar de tab in originele werkboek
-> 4: paste de zooi in A-G
-> 5: pak volgende file

Nou staat bovenin de macro een call killall()

Echter tijdens het kopieren en plakken blijft dat ding af en toe rekenen....
Er is een andere data plugin active, maar buiten VBA om calc op manual zetten voorkomt dat dat update, dus aangenomen dat dat ook zo werkt binnen vba. (Dit is een bloomberg plugin en kan ik niet aanpassen)

Iemand enig idee waarom die blijft rekenen? En of hoe ik dat echt stop? Want dit rekenen van 1 cyclus kost 2 minuten... en dat 43x ofzo..


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub killall()
    With Application
      '  .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With
End Sub

Sub unkillall()
    With Application
     '   .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With
End Sub


Dan heb ik die macro:
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
45
46
47
48
49
50
51
52
53
54
Sub Import_Issuer_data()

    Call killall
    
    Dim worksheetnaam As String
    worksheetnaam = ActiveWorkbook.Name
       
    For i = 2 To 44

        Dim tabnaam As String
        Dim naamfileurl As String
        Dim naamfile As String
        Dim update As Boolean
        Dim issuer As String
        
        update = 0
                
        tabnaam = Sheets("BLA").Cells(i, 1).Value
        naamfileurl = Sheets("BLA").Cells(i, 17).Value
        naamfile = Sheets("BLA").Cells(i, 16).Value
        issuer = Sheets("BLA").Cells(i, 2).Value
        
        For j = 2 To 5
            If (Sheets("BLA").Cells(j, 12).Value = issuer) Then
                update = Sheets("BLA").Cells(j, 13).Value
            End If
        Next j
        
        If update Then
        
            Workbooks.Open naamfileurl, Origin:=xlWindows
            Columns("A:G").Select
            Application.CutCopyMode = False
            Selection.Copy
            
            Windows(worksheetnaam).Activate
            Sheets(tabnaam).Select
            Range("A:G").Select
            ActiveSheet.Paste
            Application.CutCopyMode = False
          
            Windows(naamfile).Activate
            Application.DisplayAlerts = False
            ActiveWindow.Close
        End If
        
        update = 0
        
        Next i
    Sheets("BLA").Select    
    
    Call unkillall    
    
End Sub

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Change() zou niet mogen worden aangeroepen vanwege de uitgeschakelde events. Heb je misschien in andere code Calculate gebruikt? Als dat het geval is, zou je daar een check moeten inbouwen of killall niet eeder was aangeroepen (dus: lees variabele uit).

Als debug-optie kan je ook tijdelijk de addin uitschakelen, kan indien nodig dan ook via VBA in je killall-procedure.

offtopic:
Even een pet peeve noemen: laat .activate en .copy / .paste weg en assign waarden direct. Is netter, laat je GUI en je clipboard met rust, en is bij veel data vast nog sneller ook.

[Voor 0% gewijzigd door F_J_K op 27-06-2011 10:37. Reden: stomme typo's]

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


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 09:30
Ok is iets raars:

1) geen excel open behalve gewoon leeg workbook en die .csv files openen snel
2) mijn hoofd excel open en dat ding opent traag.... wat er ook gebeurd dat ding geeft gewoon weer dat die aan het rekenen is, terwijl calculation uit staat.
3) rename ik de .csv naar .xls dan opent die hem wel snel (maar is dan natuurlijk wel alles in 1 kolom, (zou dan dus nog text to columns moeten doen met , als delimiter) en zou dan al die files moeten gaan renamen


Addins ff allemaal disable / enable maakt niets uit... helaas.

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Hmm. Bug ontdekt? Als het als xls(x) wel goed gaat dan zou ik dat vooralsnog dus maar zo doen. Dan liever niet hernoemen en misbruik maken van fout gedrag, maar netjes importeren ;) csv-content kan je eventueel misschien ook met de macro zelf importeren, dan meteen met de juiste settings.

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



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee