# brauche hilfe bei VB für Excel



## Fizzelfritz (30. März 2006)

so hallo @all:

bei ein noch absoluter  in VB und komme gerade einfach nicht weite. wahrschienlich gibts bessere und schneller lösungen (dafür wäre ich auch dankbar) aber das ist auf meinem bisherigen wissenstand entstanden:

ich habe eine exceltabelle, in der ich in der spalte E das maximum suche. nun soll ab dieser zelle in der sich das maximum befindet (z.b: E30) die zeilennummer des ersten positive wert gefunden werden (z.b. 60) dieser wert (E60) soll ausgegeben werden und der wert in spalte A60 und D60.

ich hab jetzt ein makro geschrieben und es kommt laufzeitfehler 1004. beim debuggen bin ich hier:

```
If Range("E" & f).Value > Range("I26").Value Then
```
hab im internet nachgelesen und dan stand bei excel 2000 solle man unter Extras -> Makros -> Sicherheit Reg.Karte Vertauenswürdige Quelle VB-Zeug vertrauen anklicken - das gibts bei mir net, nur ne box alle installierten ADD-Ins und Vorlagen vertrauen (hab ich gemacht, aber es tut immer noch net). wie gesagt bin noch ein anfänger, aber vielleciht könnt ihr mir ja weiterhelfen...

danke schon mal im voraus
gruß dani

hier der code:

```
Sub Makro3()
Dim i, f As Integer
Dim max
    
    Do While f < 2000
    If Range("E" & f).Value > Range("I26").Value Then
    Range("I26").Value = Range("E" & f).Value
    i = f
    End If
    f = f + 1
    Loop
                                                'Schleife, die bis zu ersten positiven Wert zählt
    Do While Range("E" & i).Value < 0           'und dann die passenden Werte, wie Winkel, KraftG usw.
    i = i + 1                                   'liefert
    Loop
    
    Range("j9").Select                          'wähle Zelle J9 aus
    ActiveCell.Value = Range("E" & i).Value     'schreibe in Zelle J9 den Wert von Zelle Ei
                                                '=KraftDNull
    
    Range("j10").Select                         'wähle Zelle J10 aus
    ActiveCell.Value = Range("A" & i).Value     'schreibe in Zelle J10 den Wert von Zelle Ai
                                                '=iKraftDNull
        
    Range("j12").Select                         'wähle Zelle J12 aus
    ActiveCell.Value = Range("D" & i).Value     'schreibe in Zelle J10 den Wert von Zelle Di
                                                '=KraftG(iKraftDNull)
End Sub
```


----------



## Nirraven (30. März 2006)

Hi, also folgendes:


```
If Range("E" & f).Value > Range("I26").Value Then
```

Range schön und gut, aber du solltest ihm sagen, wo er diese Range findet. unter Global is se nämlich nicht.

```
If Worksheets("Tabelle1").Range("E" & f).Value > ("Tabelle1").Range("I26").Value Then
```

Soweit so gut, nur so wirst du auch ein laufzeitfehler erhalten. da im ersten Schleifendurchlauf f = 0 ist, und es die Range "E0" nunmal net gibt.

also vorher f = 1 setzen.


----------



## Fizzelfritz (30. März 2006)

also erstmal danke, 

f=1 ist gesetzt hab ich nachträglich eingefügt. aber der fehler kommt dann bei

```
Do While Worksheets("Hub_01").Range("E" & i).Value < 0
```

außerdem hat, bevor ich die erste schleife geschrieben hab, der rest auch ohne worksheets("tabelle1")... funktioniert. das Makro soll aber für 4 tabellen die in einem excel file drin sind dasselbe ausführen (reicht da eins mit verschieden worksheets("tabelleX")...  oder brauch ich da 4 verschiedene makros?)

lauf zeitfehler kommen aber trotzdem, und jetzt?

jemand ne idee

gruß dani


----------



## Nirraven (30. März 2006)

Ich hab nochmal gelesen, was genau du vor hast, und ich muss sagen, ich komm ins schleudern.



> ich habe eine exceltabelle, in der ich in der spalte E das maximum suche.



Du suchst in Spalte E einen Maximalwert. (z.b: E30)



> nun soll ab dieser zelle in der sich das maximum befindet die zeilennummer des ersten positive wert gefunden werden



Wenn in E30 der Max wert ist, ist die Spalte demzufolge 30



> dieser wert (E60) soll ausgegeben werden und der wert in spalte A60 und D60


wieso nun doch E60 wenn du spalte E durchsuchst und E30 = Max ist?
und A60 und D60 sind Zellen und keine Spalten.

Ich bin verwirrt.


Oder Suchst du in Spalte E den Max wert und möchtest aus der Zeile den ersten positiven wer? oder umgekehrt?


----------



## Fizzelfritz (30. März 2006)

also, ich hab damit gemeint in Spalte E Zeile 60, denn es gibt ja keine Spalte E60, nur E oder EE oder 60 wenn man sie nummerieren lässt.

das waren nur vereinfachungsbeispiele mit A60 bzw. D60 denn ich hab ca 65353 Werte in 4 Spalten um die Langrand' sche Interpolation zu berechnen.

ausgehend von dem maximal wert der intepolation soll ab da der minimalwert(der ist negativ) gesucht werden, wenn man diesen gefunden hat, sucht man den Nulldurchgang der positiven Flanke (also von -x auf +y), diesen wert +y brauche ich für weitere berechnungen ebenso die dazugehörigen andere werte in den spalten A und D in der gleichen Zeile - so als kurzform.

es funktioniert ja auch fast, aber nur fast. denn wenn das makro mehrmals ausgeführt wird kommt ein laufzeitfehler 1004, auch wenn nichts geändert wird! ebenso soll das makro aktiviert werden, wenn sich der wert der glättungsbreite ändert und dann in allen sheets.

mir gehts aber erstmal um eine lauffähiges makro, in c++ hab ichs hinbekommen, nur da weiß ich net wie man das mit excel verknüpft - also bin ich zu VB übergegangen...

irgendjemand ne idee?

gruß dani


----------



## Nirraven (31. März 2006)

Ah, nu hab ich es glaub ich rekonstruieren können.
Ich bin vom 1004
Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen.

du hast aber "Anwendungs- oder objektdefinierter Fehler", richtig?

Ich schau mal, ob ich zu einer sinnvollen Lösung komme.


----------



## Fizzelfritz (31. März 2006)

hat sich erledigt, hab eigentlich nix geändert, nur an ner minidummydatei ausprobiert und dann auf die echt datei übertragen - jetzt funzts. aber du könntest mir sagen wie ich das makro einstellen muss, damit es sich selbst ausführt wenn sich ein wert ändert (kann auch ein bestimmter wert sein...)

danke aber dass du dir zeitgenommen hast den thread zu lesen...


gruß dani


----------



## Nirraven (3. April 2006)

Du könntest es z.B. über

```
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
 <Anweisung>
End If
End Sub
```
machen

Das tritt aber nur ein, wenn du die Zelle (In diesem Fall A1) verlässt


----------



## Fizzelfritz (3. April 2006)

ah, das ist gut und paast auch da ich in einer zelle ein wert eintrage und dieser sich dann durch das ganze file durchzieht und alles verändert. muss ich gleich mal ausprobieren. danke erstmal.

gruß dani


----------



## Fizzelfritz (3. April 2006)

funktioniert alles reibungslos. super! vielen dank für deine hilfe, hat mir einiges an zeit erspart. man sieht sich eventl. beim nächsten projekt 

gruß dani


----------

