Auswahl kopieren per Button

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Auswahl kopieren per Button

    Hello, versuche schon seit gestern ein Programm zu schreiben um Teile, die zu bestllen sind, zu makieren entweder per häkchen setzten oder per makierpunkt. Diese sollten dann per Button klick in die zwischenablage gespeichert werden und daneben auch noch mal wiedergegeben werden.
    Das ganze habe ich auch schon versucht als *.exe zu schreiben und habe es auch geschaft, jedoch leider ohne Stückzahlfeld !
    Nun bin ich jedoch drauf gekommen, dass wir in der Fa. keine exe datein ausführen dürfen und nun muss ich das ganze in excel Programmieren was mir noch schwerer fällt ! Mein Programm habe ich hier schon gepostet da ich ja Probleme mit der Stückzahl hatte, jedoch erübrigt sich das ganze da wir ja keine exe datein ausführen können ... :/ Link

    Hier nochmals mein Quelltext vom Programm

    Quellcode

    1. Public Class Form1
    2. Dim gesamt As String
    3. Private Sub cmdAnzeige_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnzeige.Click
    4. For Each al In cbAuswahl.CheckedItems
    5. gesamt &= al & "," & vbCrLf
    6. Next
    7. lblAnzeige.Text = gesamt
    8. End Sub
    9. Private Sub cmdSenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSenden.Click
    10. My.Computer.Clipboard.SetText(lblAnzeige.Text)
    11. MsgBox("Die ausgwählten Datein wurden in die Zwischenablage gespeichert")
    12. End Sub
    13. Private Sub cmdEnde_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEnde.Click
    14. Me.Close()
    15. End Sub
    16. Private Sub cmdLöschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLöschen.Click
    17. gesamt = ""
    18. lblAnzeige.Text = ""
    19. End Sub
    20. End Class



    Hoffe ihr könnt mir helfen wie ich das Ganze im Excel schreiben kann.
    Das Excel file Sollte so aufgebaut sein, in der A Spalte soll sich das Kästchen zum makieren befinden. In der B Spalte soll man die Stückzahlen eingeben können für die Teile die man makiert bzw anhakt. in der C Spalte befindet sich die Einheit also 'Stk.' und und der D Spalte die Bezeichnung wie z.B: Rohr Ø 50
    wenn ich nun bei A2 eine makierung setzte sollte dann per KopierButton klick die Zeile von B2-D2 kopiert werden
    Wenn ich 3 makiere z.B: A2, A3 und A5, dann sollte jeweil dies Zeile von A2-D2; A3-D3; und A5-D5 kopiert werden und zusätzlich Rechts nochmal eingefügt werden damit man sehen kann ob man alles angehakt hat was man bestellen will.


    Hoffe ich habe es nicht zu kopliziert beschrieben und ihr könnt mir helfen.


    Vielen Dank schon mal für eure hilfe
    Mfg Fox-Jet
    Bilder
    • Test.jpg

      49,75 kB, 994×595, 175 mal angesehen

    Fox-Jet schrieb:

    wenn ich nun bei A2 eine makierung setzte sollte dann per KopierButton klick die Zeile von B2-D2 kopiert werden
    Was soll denn am Schluss mit den Daten im Pastebuffer geschehen?

    Muss es einen Kopier-Button geben?
    Ich würde einfach Im Worksheet-Change-Event nach Eingabe in Spalte A den Text in den Zwischenspeicher stellen.

    Visual Basic-Quellcode

    1. Sub Worksheet_Change(ByVal Target As Range)
    2. If Target.Column=1 And Target.Value=1 Then
    3. Range("B" & Target.Row & ":D" & Target.Row).Copy
    4. End If
    5. End Sub
    so in etwa.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Also ich versuche dass jetzt verständlich zu beschreiben, hoffentlich klappts ^^

    Also in der Spalte A befindet sich zu jedem Bauteil (also jeder Zeile) ein Kontrollkästchen.

    Wie:
    "Kontrollkästchen 1" - "Anzahl" - "Stk."-"Bezeichnung"; jedes >>" "<< ist eine Spalte -> geht von Spalte A bis D

    Nun möchte ich unzählige Zeilen einspeichern mit den verschiedernen Bezeichnungen der Teile. Wenn ich nun ein Bauteil auswähle, und dass Kontrollkästchen anhake und Dann auf Übernehmen( cmdÜbernehmen ->Button) klicke soll er schaun welches Kontrollkästchen True ist und die jeweilige Zeile Kopieren.

    In halb Maschinensprache stelle ich mir das so vor, leider kann ich es in VB nicht so gut ausdrücken ... :/

    Wenn man auf den Übernehmen-Button klickt:
    Dim x As Integer
    Dim y As Integer
    x=1
    y=1
    IF Kontrollkästchen'x' = True Then copy B'x' : D'x' & Paste To G'y'
    y++
    x++
    Else
    x++

    Und wenn kein Kontrollkästchen mehr da ist sollte die Schleife natürlich aufhören ^^

    Somit habe ich dann rechts davon nochmals alles zusammengeschrieben was ist mit dem Häkchen ausgewählt habe.
    und alles Was er Rechts dann neu Hingeschrieben hat von Range G1:G'y' soll er in die Zwischenablage kopieren damit ich es dann in eine mail einfügen kann ;)

    Ps. leider kann ich die Kontrollkästchen nicht unbenennen, sie heißen je nachdem wann man sie eingefügt hat KK1 KK2 usw... wo kann ich das ändern ? Und ich kann auf den Button nicht doppelt klicken damit ich den Code schreiben kann für die Schleife zum Überprüfen...


    Hoffe ihr versteht was ich meine xD



    Mfg Fox-Jet
    Sind das ActiveX-Controls oder Formularsteuerelemente?
    Sind die an eine bestimmte Zelle gebunden (LinkedCell) oder "freilaufend"?

    Letztendlich musst du durch die Collection deiner Controls loopen und schauen, ob sie geklickt sind und welche Zellen sich dahinter verbinden.
    Wenn keine Zellverbindung besteht, kannst du nur aufgrund der Lage rausfinden (.Left / .Top), zu welcher Zelle die Box gehört.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Sind das ActiveX-Controls oder Formularsteuerelemente?
    Sind die an eine bestimmte Zelle gebunden (LinkedCell) oder "freilaufend"?

    Letztendlich musst du durch die Collection deiner Controls loopen und schauen, ob sie geklickt sind und welche Zellen sich dahinter verbinden.
    Wenn keine Zellverbindung besteht, kannst du nur aufgrund der Lage rausfinden (.Left / .Top), zu welcher Zelle die Box gehört.


    Formularsteuerelemente, glaube freilaufen den bei "Wert" habe ich "nicht aktiviert"

    So und wie das bei in deinem 2. Absatz funzt ist mir ein Rätsel ^^ vorallem wenn ich nicht mal die Symbolem umbenennen kann und des butten selbst konfigurieren kann sprich einen Code schreiben der bei einem klick() aufgeführt wird ^^
    Formularsteuerelement sind Schrott.
    Wenn du die Checkboxen als ActiveX-Controls genommen hättest könntest du auf diese Art arbeiten:

    Visual Basic-Quellcode

    1. For Each c In OLEObjects
    2. If c.OLEType = XlOLEType.xlOLEControl Then
    3. Debug.Print c.Object.Value, c.LinkedCell, c.Object.Caption
    4. End If
    5. Next


    Formularsteuerelemente kannst du höchstens an eine Zelle binden und dann durch den fraglichen Zell-Bereich loopen.
    Bei ActiveX-Controls hast du auch Klick-Events und alles mögliche Brauchbare.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    okay ich versuch mal ob ich es so hinbekomme, und wie überprüfe ich am besten die Kontrollkästchen ?
    Mit einer Schleife und die Buchstabe ist der die Zahl des Kästchens z.B: KK'x' x=1 =?

    Edit:
    Oder kann ich mit einer Schleife ausdrücken dass er alle Kontrollkästchen in der Spalte A prüfen soll ob sie True sind oder nicht ?
    Wenn die Kontrollkästchen an eine Zelle gebunden sind, steht in der Zelle WAHR oder FALSCH bzw. TRUE oder FALSE.
    Du kannst einfach den Zellwert boolisch abfragen.
    If Range("A1").Value Then Debug.Print "geklickt"

    Wenn du ein ActiveX-Control hast, kannst du auch den Wert des Controls abfragen (im obigen Beispiel das c.Object.Value).

    Wenn du ungebundene Formularsteuerelemente hast, habe ich keine Ahnung, wie man deren Wert abfragt und ob das überhaupt geht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Eine Frage hätte ich noch, das ganze hilft mir jetzt schon weiter. Jetzt weiß ich wenigstens dass ich mit Range ("A1") das Kästchen anspreche ^^

    Wie schaffe ich es, dass ich z.B: einen namen mittels Variablen anspreche.
    Sprich das Kontrollkäatchen heißt KK4 oder KK5 und ich möchte es nun mittels Schleife überprüfen ob es angeklickt ist oder nicht.

    if(x=1 ; x<50 ; x++)
    {
    KK"x" // ich möchte einfach sehen ob das Kästchen mit der Ziffer KK 4 True ist oder nicht, doch wie kann ich die Zahl von KK4 ansteuern ? mit "x" geh

    }

    Somit würde er alle KontrollKästchen von KK1- KK49 überprüfen
    If KK4.Value Then Oder halt If OleObjects("KK" & Nr).Value Then

    Versuch den Code in Post #6 auszuführen und zu verstehen.
    Benutz den Debugger!

    Aber dein Ansatz ist trotzdem idiotisch.
    Wenn du die Kontrollkästchen an Zellen bindest, benötigst du solche Klimmzüge nicht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    If KK4.Value Then Oder halt If OleObjects("KK" & Nr).Value Then

    Versuch den Code in Post #6 auszuführen und zu verstehen.
    Benutz den Debugger!

    Aber dein Ansatz ist trotzdem idiotisch.
    Wenn du die Kontrollkästchen an Zellen bindest, benötigst du solche Klimmzüge nicht.

    Sie sind ja nicht an die Zelle gebunden, sie liegen nur drauf !

    Das einzige was ich noch brauche damit es funzt ist, dass ich die Kontrollkästchen ansprechen kann. Die Namen von den einzelnen Kontrollkästchen lauten ja "cb4, cb5, cb6, ....." und die will ich mittels schleifen -> also die nummer hinter cb aufrufen/abrufen.
    Ich habe es nun so veruscht jedoch kommt bei OleObjects ein Debugg fehler

    Quellcode

    1. Private Sub cmdklick_Click()
    2. Dim x As Long
    3. x = 4
    4. For x = 4 To 8 Step 1
    5. If OLEObjects("cb" & x).Value = True Then
    6. Cells(x, 2).Copy Destination:=Cells(x, 8)
    7. End If
    8. Next x
    9. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Fox-Jet“ ()