PDA

Vollständige Version anzeigen : fehler mehrfach abfangen


wuffi
28.02.2008, 10:41
hallo liebe vba gemeinde
bräuchte wieder einmal eure hilfe.
ich möchte aus einer tabelle bis zu fünf werte raussuchen. findet er einen davon nicht soll er mit dem nächsten weiter machen. bis jetzt dachte ich mir ich könnte das mit
on error goto machen. bei dem nächsten suchlauf zurückstellen und neu definieren, aber es funktioniert so leider nicht, hat jemand einen typ für mich?

mein code sieht folgender maßen aus:

Range("a1").Select
'erste zeit suchen
On Error GoTo zweiten:
Range("a:a").Find(acc1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
zeit1 = ActiveCell.Offset(0, 1)
Range(ActiveCell.Row & ":" & ActiveCell.Row).Delete
' zweite zeit suchen
zweiten:
On Error Resume Next
On Error GoTo dritten:
If acc2 = "" Then GoTo dritten:
Range("a:a").Find(acc2, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
zeit2 = ActiveCell.Offset(0, 1)
Range(ActiveCell.Row & ":" & ActiveCell.Row).Delete
' dritte zeit suchen
dritten:
.
.
.
summe:
On Error Resume Next
gesamtzeit = zeit1 + zeit2 + zeit3 + zeit4 + zeit5

danke im vorraus

wuffi

IngGi
28.02.2008, 11:18
Hallo wuffi,

versuch's mal so:
<FONT Color=Black FACE="Courier New,FixedSys" Size=2>
<Blockquote>
<FONT COLOR=#0000FF>Dim</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>As</FONT>&nbsp;Range

<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Activate

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc2,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Activate
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc3,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Activate
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc4,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Activate
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc5,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Activate
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
&nbsp;&nbsp;MsgBox&nbsp;"Nichts&nbsp;gefunden!"
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT Size=2>
<p>Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.14</a></b></FONT></p>
</Blockquote><FONT FACE="Arial,FixedSys"Size=3>
Gruß Ingolf

wuffi
29.02.2008, 08:40
hallo ingolf
erstmal danke
habe es probiert, funktioniert leider nicht ganz.
er bringt mir leider "Objekt erforderlich (Fehler 424)". stehe da ein bischen neben mir

IngGi
29.02.2008, 09:16
Hallo wuffi,

das ".Activate" am Ende der Set-Anweisungen muss weg. Dafür muss dann am Ende noch eine Activate-Anweisung rein, falls einer der gesuchten Werte gefunden wurde:
<FONT Color=Black FACE="Courier New,FixedSys" Size=2>
<Blockquote>
<FONT COLOR=#0000FF>Dim</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>As</FONT>&nbsp;Range

<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>)

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc2,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>)
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc3,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>)
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc4,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>)
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
<FONT COLOR=#0000FF>Set</FONT>&nbsp;rng&nbsp;=&nbsp;Range("a:a").Find(acc5,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>)
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT COLOR=#0000FF>If</FONT>&nbsp;rng&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing&nbsp;Then</FONT>
&nbsp;&nbsp;MsgBox&nbsp;"Nichts&nbsp;gefunden!"
<FONT COLOR=#0000FF>Else</FONT>
&nbsp;&nbsp;rng.Activate
<FONT COLOR=#0000FF>End&nbsp;If</FONT>

<FONT Size=2>
<p>Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.14</a></b></FONT></p>
</Blockquote><FONT FACE="Arial,FixedSys"Size=3>Gruß Ingolf

wuffi
29.02.2008, 10:01
hallo ingolf
es funktioniert eingeschränkt. aber es sieht so aus das er dann nur eine "oder suche" macht. er soll aber die zeile suchen aus der nachsten spalte den zu gehörigen zeitwert raussuchen und dann den nächsten wert raussuchen. deswegen auch meine leszte zeile

gesamtzeit = zeit1 + zeit2 + zeit3 + zeit4 + zeit5

' acc1 ergibt zeit1
' acc2 ergibt zeit2

und wenn er einen der acc nicht findet soll er die zeitvariable mit null setzen und den nächsten wert suchen, so das ich nachher eine gesamtzeit habe.
z.b.: zeit1 = 120; zeit2 = 0; zeit3 = 120; zeit4 = 120; zeit5 = 0
daraus ergibt sich eine gesamtzeit von 360.
wobei die acc werte immer unterschiedlich sind, die werden aus einer anderen tabelle übernommen.

IngGi
29.02.2008, 10:13
Hallo wuffi,

dann würde ich es so machen:
<FONT Color=Black FACE="Courier New,FixedSys" Size=2>
<Blockquote>
<FONT COLOR=#0000FF>On&nbsp;Error&nbsp;Resume&nbsp;Next</FONT>
zeit1&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Offset(0,&nbsp;1)
zeit1&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Offset(0,&nbsp;1)
zeit1&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Offset(0,&nbsp;1)
zeit1&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Offset(0,&nbsp;1)
zeit1&nbsp;=&nbsp;Range("a:a").Find(acc1,&nbsp;After:=ActiveCell,&nbsp;LookIn:=xlFormulas,&nbsp;LookAt&nbsp;_
&nbsp;&nbsp;:=xlWhole,&nbsp;SearchOrder:=xlByRows,&nbsp;SearchDirection:=xlNext,&nbsp;MatchCase:=<FONT COLOR=#0000FF>False</FONT>).Offset(0,&nbsp;1)
<FONT COLOR=#0000FF>On&nbsp;Error&nbsp;GoTo</FONT>&nbsp;0

gesamtzeit&nbsp;=&nbsp;zeit1&nbsp;+&nbsp;zeit2&nbsp;+&nbsp;zeit3&nbsp;+&nbsp;zeit4&nbsp;+&nbsp;zeit5

<FONT Size=2>
<p>Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.14</a></b></FONT></p>
</Blockquote><FONT FACE="Arial,FixedSys"Size=3>Gruß Ingolf

wuffi
01.03.2008, 12:57
ich danke dir
jetzt funktioniert es genau so wie ichs brauch.