Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Applikationen Probleme mit Anwendungsprogrammen aller Art gehören hier hin.

Optimieren von Excel-Makros

Diskussion: Optimieren von Excel-Makros im Forum Applikationen, in der Kategorie Software Home; Anzeige Hallo Habo-Board, ich befasse mich ein wenig mit Excel zur Zeit und möchte folgendes Umsetzen: Klicke auf Button1 und ...

Antwort
Alt 01.07.11, 19:23   #1 (permalink)
 
Registriert seit: 22.04.06
TerenceSkill Leistung: Facit NTK
Likes: 0
Standard Optimieren von Excel-Makros

Anzeige

Hallo Habo-Board,

ich befasse mich ein wenig mit Excel zur Zeit und möchte folgendes Umsetzen:

Klicke auf Button1 und er prüft, was die erste freie Zeile in Spalte A oder Spalte B ist und fügt dann in das betreffende Feld einen Wert ein im Beispiel "Auto1".

Button2 macht das selbe nur mit dem Wert "Auto2".

Mein Problem bzw. Frage ist, ist es möglich VB-Script so anzupassen, dass es automatisch so lange in die nächste Zeile geht bis eine Frei ist?

Momentan würde es nach meinen Prinzip bedeuten, dass ich für jeden Button jede Zeile angeben müsste:

Code   

Code:
Private Sub CommandButton1_Click()

    If Range("A17") = "" Then
       Range("A17").Select
       ActiveCell.FormulaR1C1 = "Auto1"
       Range("C17") = Time

    Else
    
    If Range("B17") = "" Then
       Range("B17").Select
       ActiveCell.FormulaR1C1 = "Auto1"
       Range("D17").Select
    Else
    
    If Range("A18") = "" Then
       Range("A18").Select
       ActiveCell.FormulaR1C1 = "Auto1"
       Range("C18") = Time
      
    Else
    
    If Range("B18") = "" Then
       Range("B18").Select
       ActiveCell.FormulaR1C1 = "Auto1"
       Range("D18").Select
    Else
     
    If Range("A19") = "" Then
       Range("A19").Select
       ActiveCell.FormulaR1C1 = "Auto1"
       Range("C19") = Time
      
    Else
    
    If Range("B19") = "" Then
       Range("B19").Select
       ActiveCell.FormulaR1C1 = "Auto1"
       Range("D19").Select
        
    End If
    End If
    End If
    End If
    End If
    End If
    
End Sub

Private Sub CommandButton2_Click()
    If Range("A17") = "" Then
       Range("A17").Select
       ActiveCell.FormulaR1C1 = "Auto2"
       Range("C17") = Time

    Else
    
    If Range("B17") = "" Then
       Range("B17").Select
       ActiveCell.FormulaR1C1 = "Auto2"
       Range("D17").Select
    Else
    
    If Range("A18") = "" Then
       Range("A18").Select
       ActiveCell.FormulaR1C1 = "Auto2"
       Range("C18") = Time
      
    Else
    
    If Range("B18") = "" Then
       Range("B18").Select
       ActiveCell.FormulaR1C1 = "Auto2"
       Range("D18").Select
    Else
     
    If Range("A19") = "" Then
       Range("A19").Select
       ActiveCell.FormulaR1C1 = "Auto2"
       Range("C19") = Time
      
    Else
    
    If Range("B19") = "" Then
       Range("B19").Select
       ActiveCell.FormulaR1C1 = "Auto2"
       Range("D19").Select
        
    End If
    End If
    End If
    End If
    End If
    End If
    
End Sub


Der dritte Button, soll prüfen, in welcher Zeile der letzte Eintrag ist und in die nächste Zeile folgende Werte schreiben: Wert aus vorheriger Spalte A in Spalte B und umgekehrt. Funktioniert auch, nur da müsste ich auch für alle Zeilen eine extra Schleife einfügen...:

Code   

Code:

Private Sub CommandButton3_Click()


    If Range("A18") = "" Then
        Range("A17").Select
        Selection.Copy
        Range("B18").Select
        ActiveSheet.Paste
        Range("B17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A18").Select
        ActiveSheet.Paste
        Range("C18") = Time
        Range("D18").Select
    Else
    
    If Range("A19") = "" Then
        Range("A18").Select
        Selection.Copy
        Range("B19").Select
        ActiveSheet.Paste
        Range("B18").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A19").Select
        ActiveSheet.Paste
        Range("C19") = Time
        Range("D19").Select
    Else
    
    If Range("A20") = "" Then
        Range("A19").Select
        Selection.Copy
        Range("B20").Select
        ActiveSheet.Paste
        Range("B19").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A20").Select
        ActiveSheet.Paste
        Range("C20") = Time
        Range("D20").Select
    Else
    
    If Range("A21") = "" Then
        Range("A20").Select
        Selection.Copy
        Range("B21").Select
        ActiveSheet.Paste
        Range("B20").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A21").Select
        ActiveSheet.Paste
        Range("C21") = Time
        Range("D21").Select
    Else
     
    If Range("A22") = "" Then
        Range("A21").Select
        Selection.Copy
        Range("B22").Select
        ActiveSheet.Paste
        Range("B21").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A22").Select
        ActiveSheet.Paste
        Range("C22") = Time
        Range("D22").Select
    Else
    
    If Range("A23") = "" Then
        Range("A22").Select
        Selection.Copy
        Range("B23").Select
        ActiveSheet.Paste
        Range("B22").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A23").Select
        ActiveSheet.Paste
        Range("C23") = Time
        Range("D23").Select
        
    End If
    End If
    End If
    End If
    End If
    End If
    
End Sub


Gibt es eine Möglichkeit das anzufertigen, dass er automatisiert die Zeilen hochzählt ohne dass ich jede Zeile einzeln angeben muss? Wäre echt einiges an arbeit...

Danke schon einmal im Voraus. :-)

Geändert von TerenceSkill (01.07.11 um 19:33 Uhr)
TerenceSkill ist offline   Mit Zitat antworten
Alt 01.07.11, 23:27   #2 (permalink)
Senior Member
 
Benutzerbild von lookshe
 
Registriert seit: 10.03.07
lookshe Leistung: 8086
Likes: 19
Standard

Kleiner Tipp:

Du musst nicht
Code:
Range("A17")
fest machen, es geht auch
Code:
Dim Counter As Integer
Counter = 10
Range("A" & Counter)
Somit kannst du einfach die Zeilen durchgehen, bis du eine leere findest.
Es geht auch einfacher mit Cells("A0:A65000).End(xlUp) oder so ähnlich. Damit sollte die erste freie Zelle nach der letzten befüllten ausgewählt werden. Mit Google sollte sich der entsprechend korrekte Befehl schnell finden lassen.
lookshe ist offline   Mit Zitat antworten
Antwort

Stichworte
excel, schleifen, vb-script
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Applikationen » Optimieren von Excel-Makros
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



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 55 56 57 58 59 60 61