Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

For- oder If-Schleife für Programmdurchlauf

For- oder If-Schleife für Programmdurchlauf
turok
Hallo.
Schreib ne Diplomarbeit und hab keine Zeit mehr mich großartig in VBA einzuarbeiten, daher eine erneute Frage:
Hab einen Button gemacht, der bei Betätigung, den Inhalt aus ausgewählten Zellen, in Zellen eines anderes Tabellenblatts kopiert! Das passiert, bis 11 Reihen voll sind, dann kommt ein Abbruchhinweis (in Form der Office-Büroklammer).
Hier der Programmausschnitt:

Private Sub C346_Button_Orthogonal_Click()
Static i As Integer
Worksheets("C346_Exp.Data (Orthogonal_Pos)").Cells(4 + i, 3).Value = Worksheets("C346_Scaled  _
normal vector").Range("G11").Value
Worksheets("C346_Exp.Data (Orthogonal_Pos)").Cells(4 + i, 4).Value = Worksheets(" _
C346_Scaled normal vector").Range("G12").Value
i = i + 1
If i = 11 Then
Set balNew = Assistant.NewBalloon
balNew.Heading = "End of test record!"
balNew.Show
End If
End Sub


Wenn ich nun den Inhalt einiger Zellen lösche, in die zuvor durch Betätigung des Buttons reingeschrieben wurde, dann macht er bei erneuter Betätigung, mit der nächsten Reihe weiter!
Wie kann ich nun das so umschreiben, dass er wieder die Zellen füllt, die leer sind, ohne vorher die bereits gefüllten Zellen mit Werten zu überschreiben? Dachte da vielleicht an eine For-Schleife, mit der man die Zellen auf Inhalt überprüft (.....value = "")!?
Gruß
turok

GgFrage: Warum ist i Static? Wohl, weil das...
25.06.2009 20:33:15
Luc:-?
...Pgm so arbeiten soll wie es arbeitet, Turok,
d.h., immer weiter machen, solange die xlSitzung nicht beendet wird. Wieder von Vorne fängt's dann erst bei Neustart an. Also benötigst du eine Bedingung, die i wieder auf 0 setzt. Dazu müsstest du zuvor jeden Block bis zum aktuellen Wert von i auf Leerzellen abfragen oder die Laufvariable i globalisieren (dann aber mit längerem Namen!) und per EventProc Worksheet_Change (If Target = "" Then...) auf 0 setzen.
Gruß Luc :-?
AW: GgFrage: Warum ist i Static? Wohl, weil das...
26.06.2009 09:09:11
turok
Hallo Luc.
Vielen Dank erstmal für die Antwort.
Das i ist static, weil ich das Programm erstmal zum laufen bringen musste, und die die anforderungen sich dann verändert haben! Die Laufvariable i zu globalisieren, hatte ich mir auch schon überlegt, nur leider weiß ich nicht, wie das in VBA aussieht!? In C wusste ich in etwa noch, wie das ging, ist aber auch schon wiedeer über zwei Jahre her.
Gruß
turok
Anzeige
Eine Globalvariable wird am Anfang eines...
26.06.2009 13:10:01
Luc:-?
..."normalen" Moduls außerhalb der Prozeduren mit Dim bzw Public deklariert, Turok.
Diese sind nach Belegung quasi ebenfalls Static, nur stehen sie jedem anderen Pgm im Modul bzw darüber hinaus auch zur Verfügung. Das wäre notwendig, wenn du die Variable bei Feldlöschen mit der genannten Ereignisproz auf 0 setzen willst. Wäre wahrscheinlich einfacher als eine Löschbedingung für die Variable i in der bisherigen Form zu überlegen...
Im Dokumentklassenmodul des Blattes Ereignisproz anlegen (VBE-Codefenster oben links _ Worksheet wählen → dann oben rechts Ereignis auswählen → ProzRahmen wird installiert. ProzKörper eintragen...

If Not Intersect(Target, Range("relevanterBereich")) Is Nothing Then
If Target = "" Then gLfVarI = 0
End If

Die bisherige Variable i wurde hier zu gLfVarI → muss so auch global deklariert und kann dann überall verwendet wdn.
Gruß + viel Erfolg, Luc :-?

Anzeige
AW: For- oder If-Schleife für Programmdurchlauf
25.06.2009 21:30:43
Gerd
Wenn ich nun den Inhalt einiger Zellen lösche
Wo wird gelöscht?
Gruß Gerd
AW: For- oder If-Schleife für Programmdurchlauf
25.06.2009 21:42:03
Josef
Hallo ?,
so?

Private Sub C346_Button_Orthogonal_Click()
  Dim lngNextRow As Long
  
  With Worksheets("C346_Exp.Data (Orthogonal_Pos)")
    lngNextRow = Application.Max(4, .Cells(Rows.Count, 3).End(xlUp).Row + 1)
    If lngNextRow <= 14 Then
      .Cells(lngNextRow, 3).Value = Worksheets("C346_Scaled normal vector").Range("G11").Value
      .Cells(lngNextRow, 4).Value = Worksheets("C346_Scaled normal vector").Range("G12").Value
    Else
      Set balNew = Assistant.NewBalloon
      balNew.Heading = "End of test record!"
      balNew.Show
    End If
  End With
End Sub

Gruß Sepp

Anzeige
AW: For- oder If-Schleife für Programmdurchlauf
26.06.2009 09:50:18
turok
Guten Morgen.
Danke vorab, für deinen Support.
Leider funktioniert dein angegebenes Progremm nicht so richtig. Sobald ich den Button betätige, poppt sofort die Office-Büroklammer auf, obwohl keine Werte in das "C346_Exp.Data (Orthogonal_Pos)"-Sheet nichts reingeschrieben wurde. Bagesehen davon, was ist dieses "lngNextRoe"?
Gruß
turok
AW: For- oder If-Schleife für Programmdurchlauf
26.06.2009 09:05:02
turok
Hallo Gerd.
Vielen Dank erstmal für deine Antwort.
"Wenn ich nun den Inhalt einiger Zellen lösche....". Damit meine ich den Inhalt der Zellen in dem Worksheet ("C346_Exp.Data (Orthogonal_Pos)"). Denn in dieses Tabellenblatt werden ja die Werte reingeschrieben.
Gruß
turok
Anzeige
AW: For- oder If-Schleife für Programmdurchlauf
04.07.2009 09:57:42
Gerd
Hallo turok,
lngNextRow ist wie der Name der Variable schon sagt, die ermittelte nächste Zeile, in die eingetragen
wird. Deine Aufgabenbeschreibung ist ungenau. Ein weiterer Versuch.

Private Sub C346_Button_Orthogonal_Click()
Dim lngNextRow As Long, balNew As Object
With Worksheets("C346_Exp.Data (Orthogonal_Pos)")
If Application.CountA(.Range(.Cells(4, 3), .Cells(11, 3))) 


Gruß Gerd

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige