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

Errorhandling om vba debug te voorkomen?

Status
Niet open voor verdere reacties.

Arito

Gebruiker
Lid geworden
31 mei 2006
Berichten
140
Beste helpers,

Ik heb een code:

Code:
Private Sub Worksheet_Calculate()
    
    If Workbooks("DTX.xlsb").Worksheets("Total").Range("F2").Value = 1 Then
    Call Initiate_Crosses
    Else
    End If

End Sub

Deze code werkt 99% van de keren maar ondanks dat er in de F2 altijd een 0 of 1 staat loopt de code soms vast en als ik debug doe wordt de eerste regel van de if functie gehighlight.

Mijn vraag is of jullie denken dat als ik iets zeg in de trant van "als deze macro een error geeft, sla deze macro dan over" maar dan in VBA taal of dat zou kunnen helpen, en of jullie misschien een voorbeeld hebben.

En als tweede denken jullie dat de processorkracht van de computer een rol zou kunnen spelen?

Mijn dank zou groot zijn.

Alexis
 
Het bestand is geopend. De macro staat in dat bestand.
 
En zeker ook in het blad 'Totaal'? Een bijzondere constructie dan:d

Code:
Private Sub Worksheet_Calculate()
If  Range("F2").Value = 1 Then  Call Initiate_Crosses
End Sub

Om fouten te onderdrukken kan je o.a.
Code:
On Error Resume Next
gebruiken. Maar beter is het om te achterhalen wat er fout gaat.

Zie ook dit linkje http://www.cpearson.com/excel/errorhandling.htm
 
Hoe ziet onderstaande code eruit?
Code:
 Call Initiate_Crosses
Als die code weer een opdracht geeft tot calculeren gaat je calculatie_event in een eindeloze lus treden tussen beide werkbladen.
 
Laatst bewerkt:
De code die aangeroepen wordt is:

Code:
    If Workbooks("DTX.xlsb").Worksheets("Total").Range("D3").Value <> 0 Then
    Call Intersheet_Cross
    Else
    End If
    
    If Workbooks("DTX.xlsb").Worksheets("Total").Range("K3").Value <> 0 Then
    Call Log_High_Low_DTX1
    End If

    If Workbooks("DTX.xlsb").Worksheets("Total").Range("K4").Value <> 0 Then
    Call Cross_Signal_Hedge_Ref1
    End If

    If Workbooks("DTX.xlsb").Worksheets("Total").Range("K5").Value <> 0 Then
    Call Cross_Movers_DTX1
    End If

Dit was eigenlijk de originele macro maar die bleef ook al vastlopen op de eerste if statement af en toe (ook als ik van de eerste de derde maakte, dan bleef het op de nieuwe eerste hangen). Daarom had ik er 1 van gemaakt in de hoop dat dat het zou oplossen. In een van de macros staat inderdaad "calculate" als begin, en daarnaast laat ik ook de sheet elke 10 seconden calculeren en heb ik het verder op calculation manual staan.

Code:
Sub Intersheet_Cross()

Dim ROW As Long
Dim ISH As String
Dim ISF As String
ISH = "Intersheet_(hardcopy)"
ISF = "Intersheet_(formulas)"

ROW = Workbooks("DTX.xlsb").Worksheets(ISH).Range("B1").Value

Workbooks("DTX.xlsb").Worksheets(ISH). _
Range(Workbooks("DTX.xlsb").Worksheets(ISH).Cells(ROW, "A"), Workbooks("DTX.xlsb").Worksheets(ISH).Cells(ROW + 504, "Y")).Value = _
Range(Workbooks("DTX.xlsb").Worksheets(ISF).Cells(3, "A"), Workbooks("DTX.xlsb").Worksheets(ISF).Cells(507, "Y")).Value

End Sub

Code:
Sub Log_High_Low_DTX1()

Workbooks("DTX.xlsb").Worksheets("Ref1").Range("Q8:R600").Value = _
Workbooks("DTX.xlsb").Worksheets("Ref1").Range("BS8:BT600").Value

End Sub

Code:
Sub Cross_Movers_DTX1()

Workbooks("DTX.xlsb").Worksheets("Ref1").Range("Y8:Y600").Value = _
Workbooks("DTX.xlsb").Worksheets("Ref1").Range("BK8:BK600").Value

Workbooks("DTX.xlsb").Worksheets("Ref1").Range("BL8:BL600").Value = _
Workbooks("DTX.xlsb").Worksheets("Ref1").Range("BJ8:BJ600").Value
End Sub

Code:
Sub Cross_Signal_Hedge_Ref1()

Dim ROW As Integer
Dim HowManyRowsToCopy As Integer

'HIER STOND CALCULATE
ROW = Workbooks("DTX.xlsb").Worksheets("AVGPrice1").Range("Y1").Value
HowManyRowsToCopy = Workbooks("DTX.xlsb").Worksheets("AVGPrice1").Range("AY1").Value

If HowManyRowsToCopy = 0 Then GoTo 100 Else

Workbooks("DTX.xlsb").Worksheets("AVGPrice1"). _
Range(Workbooks("DTX.xlsb").Worksheets("AVGPrice1").Cells(ROW, "T"), Workbooks("DTX.xlsb").Worksheets("AVGPrice1").Cells(ROW + HowManyRowsToCopy - 1, "Z")).Value = _
Range(Workbooks("DTX.xlsb").Worksheets("AVGPrice1").Cells(3, "AT"), Workbooks("DTX.xlsb").Worksheets("AVGPrice1").Cells(2 + HowManyRowsToCopy, "AZ")).Value

100
End Sub

Ik ga kijken of het weghalen van calculate iets oplost. Dan ga ik die errorhandling proberen.

Alvast bedankt en als jullie nog suggesties hebben lees ik het natuurlijk graag.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan