Kopieren in VBA, Zeile variabel, Spalte fest

Von: , 21.02.2011 04:25 Uhr

Hallo Helferlein,

ich habe folgendes Problem:

Ich habe in der Combobox 4 Auswahlmoeglichkeiten, bei jeder Auswahl soll in die Zellen C81:C96 ein anderer Text eingefuegt werden, der sich im gleichen Tabellenblatt an nicht einsehbarer Stelle befindet und daher einfach kopiert und dort eingefuegt werden kann.

Nehmen wir also an, Auswahl1 wurde getroffen und der passende Text1 aus Spalte Y soll nun in Spalte C, Zeile 81 eingefuegt werden. Bei Auswahl2 waere es dann Text2 aus Spalte Z.
Dies geschieht in unterschiedlichen Zeilen, also etwa 12 mal muss eine solche Auswahl getroffen werden. Abhaengig von der Combobox wird also in eine unterschiedliche ZEILE kopiert. Die Spalte dabei ist immer die gleiche, Spalte C.

Wie kann man das im VBA darstellen?

Hier mein Code fuer die Combobox, ich brauch also fuer die Makros FunctionTextX die richtige Beschreibung.



Private Sub CombFunction_Change()

Select Case CobFunction.Value
Case CobFunction.Value= "CV_PLM_ENTWICKLUNG"
Call FunctionText1

Case CobFunction.Value= "CV_PLM_ENTW_VALIDIERUNG"
Call FunctionText2

Case CobFunction.Value= "CV_SCM_LOGISTIK"
Call FunctionText3

Case CobFunction.Value= "CV_SCM_PLANUNG"
Call FunctionText4

End Select

End Sub


Ich hab leider keine Idee da ich voelliger Neuling im VBA schreiben bin. Ich denke es duerfte nicht so kompliziert sein, oder?

Im Prinzip muss der Text immer nur um 22 Spalten nach links verschoben kopiert werden, abhaengig von der Nr. der Combobox aber in eine unterschiedliche Zeile.

Ich hoffe ihr koennt mir helfen und Danke schon mal im vorraus.

Lg, Antonia

11 Antworten zu dieser Frage

      • Antwort von nach 5 Stunden 0 hilfreich
        Re: Kopieren in VBA, Zeile variabel, Spalte fest

        Also, vom Prinzip her recht einfach, aber etwas VBA-Programmierung solltest Du schon beherrschen.
        - eine Combobox hat verschiedene Ereignisroutinen, z.B. <comboboxname>_Click(). In dieser Routine kann man dann die gewünschte Leistung codieren
        - den in der ComboBox eingestellten Wert kann man über <comboboxname>.ListIndex ermitteln
        - jede Zelle der Tabelle kann man mit [Sheets(name).]Cells(row, column) ansprechen, row/column sollten Variable sein, natürlich gehen auch fixe Zahlen
        Okay, damit solltest Du die Aufgabe lösen können. Noch ein kleiner Tipp: oft hilft eine Makroaufzeichnung und Analyse/Verwendung des Mitschnitts, aber Achtung: hier wird eine Zelle in der Form z.B. Cells("C5") protokolliert, d.h. Spalte C, Zeile 5. Und noch etwas: die Hilfe hat viele schöne und verwertbare Beispiele.
        Viel Erfolg
        Rainer

      • Antwort von nach 5 Stunden 0 hilfreich
        Re: Kopieren in VBA, Zeile variabel, Spalte fest

        Hallo antonia_ri,

        Warum neue Funktionen, wenn Du nur feste Werte in Zellen kopieren willst?

        case CobFunction.value = "irgendwas"
        wert = "blabla"
        deine_zeile = x
        case CobFunction.value = "irgendwasanderes"
        wert = "chacka"
        deine_zeile = y
        ...
        end select

        Worksheets("Sheet1").Cells(deine_Zeile, 3) = wert

        Gruß
        Harry

  1. Antwort von - abgemeldetes Mitglied - nach 9 Stunden 0 hilfreich
    Re: Kopieren in VBA, Zeile variabel, Spalte fest


    Private Sub CombFunction_Change()


    Select Case CobFunction.Value

    Case CobFunction.Value= "CV_PLM_ENTWICKLUNG"

    Call FunctionText1


    Case CobFunction.Value= "CV_PLM_ENTW_VALIDIERUNG"

    Call FunctionText2


    Case CobFunction.Value= "CV_SCM_LOGISTIK"

    Call FunctionText3


    Case CobFunction.Value= "CV_SCM_PLANUNG"

    Call FunctionText4


    End Select


    End Sub


    Hallo Antonia,

    Hoffentlich habe ich Dein Problem richtig verstanden:

    In Abhängigkeit von der Combo-Auswahl soll ein Text1
    aus Spalte X nach C81:96 oder ein Text2 aus Spalte
    Y nach C81:C96 usw. übertragen werden. Ich nehme also
    an, daß die Quellen Text1 ... Text4 ebenfalls 16
    Zeilen in der jeweiligen Spalte einnehmen.

    Die Auswahlliste für Dein Combofeld steht irgendwo im
    Tabellenblatt, der Ort ist im Code nicht erforderlich.
    Wohl aber muß die Zelle, welche die Auswahl aufnimmt,
    angegeben werden. Ich habe im Code "A1" angenommen,
    Du mußt nur für Dein Combofeld den richtigen Bezug
    einsetzen (nämlich denjenigen Bezug, der im Combofeld
    als Ausgabeverknüpfung eingetragen ist). Die Auswahl
    von "CV_PLM_ENTWICKLUNG" ergibt dann in dieser Zelle
    (im folgenden Code angenommen als Zelle "A1") den Wert 1,
    "CV_PLM_ENTW_VALIDIERUNG" ergibt dort den Wert 2 usw.
    In Abhängigkeit von diesem Wert wird Text1, Text2 usw.
    übertragen. In Deiner Anfrage hast Du X und Z genannt,
    also habe ich im Code die Spalten W..Z eingetragen.
    Die Spalten für die Quelltexte kannst Du jedoch frei
    im Array "Spalten" angeben.

    Fehlt noch die Zeile, in der Text1, Text2 ... jeweils
    beginnen. Ich habe angenommen, daß dies analog zum Ziel
    in Zeile 81 sein soll (also Text1 in W81:W96, Text2 in
    X81:X96 usw). Die Startzeile kannst Du aber in "AbZeile"
    beliebig ändern.

    Der Code:

    Sub ComboFunction_change()
    Const Auswahl$ = "A1" 'Zelle für Ausgabeverknüpfung
    Select Case ActiveSheet.Range(Auswahl).Value
    Case 1 ' = CV_PLM_ENTWICKLUNG
    FunctionText 1
    Case 2 ' = CV_PLM_ENTW_VALIDIERUNG
    FunctionText 2
    Case 3 ' = CV_SCM_LOGISTIK
    FunctionText 3
    Case 4 ' = CV_SCM_PLANUNG
    FunctionText 4
    End Select
    End Sub

    Private Sub FunctionText(Nr%)
    Dim i%, Quelle$, Ziel$
    Dim Spalten As Variant
    Const AbZeile% = 81 'könnte auch 1 sein
    Const AnzahlZeilen% = 16 'C81:C96 = 16 Zl.
    Spalten = Array("W", "X", "Y", "Z")

    With ActiveSheet
    For i = 1 To AnzahlZeilen
    Quelle = Spalte(Nr - 1) & Format$(AbZeile -1 + i)
    Ziel = "C" & Format$(80 + i)
    .Range(Ziel).Value = .Range(Quelle).Value
    Next i
    End With
    End Sub

    Sollte ich Dein Problem nicht korrekt verstanden haben,
    bitte ich Dich um Nachricht.

    Liebe Grüße
    Gerd

  2. Antwort von nach 22 Stunden 0 hilfreich
    Re^2: Kopieren in VBA, Zeile variabel, Spalte fest

    Du hast mein Problem voellig richtig erkannt. Danke.
    Ich komm aber noch nicht ganz drauf.
    Alle $ hab ich erstmal mit 1 ersetzt fuer meinen ersten Text.
    Ausserdem steht bei Quelle=Spalte...wobei Spalte nicht definiert ist, wenn ich einfach dim Spalte schreib glaubt er mir auch noch nicht.


    Mir ist nicht klar wofuer Format steht und weiss deswegen auch nicht ob ich dort auch fuer das $ 1 einsetzten kann.
    was macht format? Die Hilfe ist bei mir in english und hilft mir wenig.

    Kannst du nochmal drueberschauen?

    Vielen dank.

    Antonia

    Sub ComboFunction_Change()
    Const Auswahl$ = "C381" 'Zelle f¨¹r Ausgabeverkn¨¹pfung
    Select Case ActiveSheet.Range(Auswahl).Value
    Case 1 = CV_PLM_ENTWICKLUNG
    FunctionText 1
    Case 2 = CV_PLM_ENTW_VALIDIERUNG
    FunctionText 2
    Case 3 = CV_SCM_LOGISTIK
    FunctionText 3
    Case 4 = CV_SCM_PLANUNG
    FunctionText 4
    End Select
    End Sub
    Private Sub FunctionText1()
    Dim i, Quelle1, Ziel, Spalte
    Dim Spalten As Variant
    Const AbZeile = 381 
    Const AnzahlZeilen = 16 'C381:C396 = 16 Zl.
    Spalten = Array("U", "V", "W", "X")
    With ActiveSheet
    For i = 1 To AnzahlZeilen
    Quelle = Spalte(Nr - 1) & Format$(AbZeile - 1 + i)
    Ziel = "C" & Format$(381 + i)
    .Range(Ziel).Value = .Range(Quelle).Value
    Next i
    End With
    End Sub
    

    • Antwort von - abgemeldetes Mitglied - nach einem Tag 0 hilfreich
      Re^3: Kopieren in VBA, Zeile variabel, Spalte fest

      Private Sub FunctionText1()
      Dim i, Quelle1, Ziel, Spalte
      Dim Spalten As Variant
      Const AbZeile = 381 
      Const AnzahlZeilen = 16 'C381:C396 = 16 Zl.
      Spalten = Array("U", "V", "W", "X")
      :
      :


      Liebe Antonia,
      Ich war heute unterwegs und komme erst jetzt dazu, Dir zu
      antworten, entschuldige bitte, daß Du warten mußtest.
      Das Kopieren der 4 Texte besorgen zwei Prozeduren. Die 
      erste nimmt vom Combofeld den Zeilenindex entgegen 
      (= Nummer der Zeile, auf die in der Combofeld-Liste 
      geklickt wurde). Diese Zeilennummer reicht sie an die 
      zweite Prozedur weiter, welche die Zeilennummer als sog.
      Parameter entgegennimmt, daraus die Spalte, aus welcher 
      der Text entnommen werden soll, ermittelt und den Text 
      dann von Zeile 381 bis 396 in die Spalte C kopiert.
      Die erste Prozedur hast Du ja schon in der Anfrage
      entworfen und dabei ein Select-Case Konstrukt verwendet. 
      Es ginge allerdings auch ohne Select Case, indem direkt 
      der Zeilenindex aus dem Combofeld verarbeitet wird, das 
      ist aber sicher weniger leicht zu durchschauen, daher habe 
      ich Deinen Vorschlag belassen. Die erste Prozedur ruft die 
      zweite auf in der Form (den Namen habe ich wie von Dir in 
      der Anfrage vorgeschlagen übernommen):
      FunctionText x (ein Leerzeichen dazwischen!)
      x ist der Zeilenindex aus dem Combofeld und wird als 
      "Parameter" an die zweite Prozedur weitergereicht:
      Sub FunctionText(Parameter)
      FunctionText wertet den Parameter aus und ermittelt Text1 
      oder Text2 usw. gemäß Auswahl im Combofeld. Du brauchst 
      also nicht 4 Prozeduren FunctionText1, FunctionText2 etc, 
      sondern nur die eine FunctionText(Parameter).
      In VBA gibt es für Variablen einige Datentypen. Der Typ 
      "String" wird bei der Dimensionierung geschrieben als
      Dim VariablenName As String oder kurz: Dim VariablenName$
      Das $-Zeichen ist die Kurzform für "As String". Wird ein 
      String "s" dimensioniert, kannst Du also schreiben 
      "Dim s$", dabei gehört das $-Zeichen nicht zum Namen, 
      sondern zeigt nur als Suffix den Datentyp String an. 
      Für den Datentyp "Integerzahl" (= Ganzzahl) kann man schreiben
      Dim VariablenName As Integer oder kurz: Dim VariablenName%
      Das %-Zeichen ist die Kurzform für "As Integer", es gehört 
      wie das $-Zeichen auch nicht zum Variablennamen. Die 
      Variable des Namens "i" für eine Integerzahl wird also 
      deklariert als "i%", im Code aber nur als "i" angespro- 
      chen. 
      Zurück zur Übergabe der Zeilennummer aus dem Combofeld an 
      die zweite Prozedur: 
      FunctionText n (n ist ein Wert zwischen 1 und 4, eine 
      Ganzzahl!) 
      liefert den Wert n an die Prozedur   
      Sub FunctionText(Nr%)
      ...
      End Sub
      Den Parameter habe ich Nr genannt, weil er ja die  
      Zeilennummer aus dem Combofeld ist. Der Parameter Nr 
      erhält also den Wert von n.
      In der zweiten Prozedur werden diverse Variable verwendet, 
      die im Prozedurkopf definiert werden:
      i%       -> Variable für Ganzzahl als "Zeilenzähler" in der
      gewünschten Textspalte (1..16 für Zeilen 
      381..396)
      i ist vom Datentyp Integer, daher Suffix %.
      Quelle$  -> soll den Namen der Zelle enthalten, die  
      jeweils in die Spalte C kopiert wird (z.B. 
      W381, W382,..W396 oder X381, X382,..X396 
      usw.). Quelle hat also den Datentyp String, 
      daher Suffix $.
      Ziel$    -> soll den Namen der Zelle in Spalte C 
      aufnehmen, in welche übertragen wird (z.B. 
      C381, C382,..C396).
      Ziel ist auch vom Datentyp String, daher 
      Suffix $.
      Spalten  -> Soll ein Array aufnehmen und muß daher als 
      Datentyp "Variant" haben. 
      Dazu kann man "Dim Spalten As Variant" schreiben oder kurz
      "Dim Spalten". Wird kein Typ angegeben, dimensioniert man 
      automatisch einen Variant. 
      Ein Array ist ein Datenfeld, welches mehrere jeweils 
      gleichartige Werte aufnehmen kann. Im Array "Spalten" 
      werden hier die Buchstaben für die Spalten vorgegeben, in 
      denen sich die Texte befinden, welche die Quellen für das 
      Kopieren nach Spalte C darstellen:
      Spalten = Array("W", "X", "Y", "Z")
      Hier mußt Du diejenigen vier Spalten einsetzen, welche 
      Deine Quellen enthalten.
      Durch die Verwendung der Konstanten "AbZeile" ist es 
      leicht, die Ausgangszeile für die Texte anzugeben. Ändert 
      sie sich, mußt Du lediglich in der Definition den Wert 
      ändern, nicht im folgenden Code. Dasselbe gilt für die 
      Anzahl der Zellen für Text1, Text2 usw.: Mit 
      "AnzahlZeilen = 16" 
      kommst Du von Zeile 381 bis 396, wenn Du bei 381 startest 
      (AbZeile=381). Soll später zB. eine Zelle hinzukommen, 
      legst Du nur einmalig den Wert in "AnzahlZeile = 17" fest. 
      Beide Konstanten sind vom Datentyp Integer, daher Suffix 
      %. Alternative: 
      Const AbZeile As Integer = 381. 
      Nun zum Code:
      Die gewünschte Spalte wird ermittelt, indem der Zeilen-
      Index aus dem Combofeld, der als Parameter mit Namen "Nr" 
      übergeben wird, zur Auswertung kommt. Dazu wird aus dem 
      Array "Spalten" der entsprechende Buchstabe ausgelesen.
      Die Zählung der im Array gespeicherten Werte beginnt aber 
      nicht bei 1, sondern bei 0! Wurde auf die erste Zeile im 
      Combofeld geklickt, wird der Wert des ersten Eintrages 
      in "Spalten" gelesen, das schreibt man als "Spalten(0)". 
      Wurde die 3. Zeile gewählt, liest man analog den 3. Wert 
      im Array "Spalten" aus, das schreibt man als "Spalten(2)". 
      Um also die Spalte zum Wert von "Nr" zu finden, muß man 
      in "Spalten(Nr - 1)" Nachschau halten. Das Ergebnis wird
      als erster Teil des Zelennamens in die Variable Quelle
      gespeichert:
      Quelle = Spalten(Nr - 1)
      In der Spalte müssen nun alle Zellen ab Zeile "AbZeile"
      nacheinander angesprochen und in die Spalte C kopiert
      werden. Das geschieht, indem in einer Schleife acheinander 
      die Zeilenwerte 381, 382, .. bis 396 eingesetzt werden.
      Als Zähler für die Schleife (= "Zeilenzähler"!) lassen
      wir i von 1 bis AnzZeilen laufen: For i = 1 To AnzZeilen.
      Beim 1. Durchlauf ist i = 1, die Zeilennummer ergibt 
      sich daher als "(AbZeile - 1) + i" -> 381 - 1 + 1 -> 381.
      Im nächsten Schleifendurchlauf ist i = 2, daher:
      AbZeile - 1 + i -> 381 - 1 + 2 -> 382; im letzten Durch-
      lauf ist i = 16, damit "AbZeile - 1 + i" -> 396. Der
      erhaltene Wert ist eine Ganzzahl, wir benötigen jedoch
      Ziffern, nämlich "381", "382" usw, da wir ja die Zellen
      "namentlich" angeben müssen. Dazu dient die Funktion
      Format (Format$ weil wir einen String erzeugen): 
      Format$(AbZeile - 1 + i) 
      liefert die entsprechenden Ziffernfolgen. Diesen String 
      müssen wir noch an den Spaltenbuchstaben anfügen, dazu 
      dient der Operaot "&":
      Quelle = Spalten(Nr - 1) & Format$(AbZeile - 1 + i) 
      Quelle erhält also beim ersten Schleifendurchgang die
      Zelle "W381" (oder "Y381", wenn Spalte Y ausgewählt war), 
      und der Zellinhalt wird nach "C381" kopiert. Im nächsten
      Durchlauf enthält Quelle "W382" (oder "Y382") und Ziel
      "C382" usw. bis zum 16. Durchlauf. Damit ist dann der
      gesamte Text übertragen.
      Änderungen sind leicht möglich, da Du den Array "Spalten"
      und die Konstanten "AbZeile" und "AnzahlZeilen" nur im
      Prozedurkopf ändern mußt.
      Ich könnte mir vorstellen, daß Du nun klarkommst. 
      ANMERKUNG: bei Durchsicht meiner vorigen Antwort sehe ich, 
      daß mir ein Fehler unterlaufen ist! Ich schrieb
      Quelle = Spalte(....), es muß natürlich heißen
      Quelle = Spalten(....)!
      Liebe Grüße          
      Gerd
      

      • Antwort von - abgemeldetes Mitglied - nach einem Tag 0 hilfreich
        Re^3: Kopieren in VBA, Zeile variabel, Spalte fest

        Liebe Antonia,
        Ich störe Dich noch einmal mit einem weiteren Hinweis, der 
        mir leider erst auffiel, nachdem ich die vorige Antwort 
        schon abgeschickt hatte. (Einige Rechtschreibfehler sind
        mir auch erst nachträglich aufgefallen, bitte sieh' mir 
        diese Fehler nach.) Ich habe nur auf Deine Fragen zur
        zweiten Prozedur geachtet. Daher hier noch zwei Anmerkun- 
        gen zur ersten Prozedur. Bitte nicht 
        Const Auswahl$ = "C381"
        einsetzen! Die "Auswahlzelle" ist jene Zelle, welche Du im
        COMBOFELD angeben mußt! In den Eigenschaften des Combo-
        feldes gibst Du den Bereich an, in welchem Deine Texte für
        die Liste stehen UND ein weiteres Feld, in welches Excel
        nach der Auswahl (= Klick auf eine Zeile im Combofeld) den
        Zeilenindex überträgt. In diesem Feld steht 1, wenn Du auf 
        die erste Zeile geklickt hast ("CV_PLM_ENTWICKLUNG"), oder
        3 nach Klick auf die 3. Zeile ("CV_SCM_LOGISTIK"). Wenn die
        4 Auswahltexte z.B. in K1 ... K4 stehen, trägst Du für den
        Listenbereich im Combofeld K1:K4 ein und z.B. K5 für die
        Zelle, welche die Auswahl (Zeilennummer) übernimmt. Diese
        Zelle ist unter Auswahl anzugeben! In diesem Beispiel also: 
        Const Auswahl$ = "K5"
        Da ich den weiteren Aufbau Deines Arbeitsblatts nicht ken- 
        ne, kann ich auch nicht sagen, welches Feld Du diesem Zweck
        gewidmet hast.
        Ferner hast Du in den Case-Zeilen etwas mißverstanden.
        Falsch ist, was Du in Deiner Antwort schreibst:
        Case 1 = CV_PLM_ENTWICKLUNG   usw.
        Ich hatte geschrieben:
        Case 1  ' = CV_PLM_ENTWICKLUNG
        Das Hochkomma bedeutet, daß ein Kommentar folgt. Ohne den
        Kommentar kannst Du natürlich einfach
        Case 1
        schreiben. Ich wollte nur andeuten, daß dies Dein Auswahl-
        text ist, wenn Du auf die erste Zeile im Combofeld klickst.
        So, nun sollte alles komplett sein.
        Liebe Grüße
        Gerd
        

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: Kopieren in VBA, Zeile variabel, Spalte fest

          Wow, vielen Dank fuer die ausfuehrlichen Hinweise. Ich bin begeistert hier gleich noch einen Schnellkurs zu bekommen. Unterrichtest du das wirklich? Deine Erklaerungen sind sehr verstaendlich.

          Keine Sorge wegen spaeter Antworten, ich bin in Shanghai, was ohnehin 7 Stunden Zeitunterschied zu Deutschland bedeuten und ich mit rascher antwort gar nicht rechnen darf, da es bei euch im Moment 4 Uhr frueh ist:(

          Soweit hab ich also alles verstanden, nur fehlt mir noch ein Puzzleteil. es laeuft naemlich gar nicht.

          Koennte ich dir das Tabellenblatt mit Code mailen?

          Ich kann es nicht einfach hier reinposten...sorry. Nur das Ergebnis dann natuerlich!

          • Antwort von - abgemeldetes Mitglied - nach 2 Tagen 0 hilfreich
            Re^5: Kopieren in VBA, Zeile variabel, Spalte fest

            Hallo Antonia,

            Suchen wir auch noch das Puzzleteil! Meine Mailadresse ist [E-Mail-Adresse entfernt] - aber freu' Dich nicht zu früh: ich arbeite mit einer alten Office-Version, ab Version 2003 habe ich alles wieder rausgeworfen, weil ich das neue Klimbim und Oberflächen-Geschmuse von MS nicht ausstehen kann.

            Liebe Grüße
            Gerd

            • Antwort von nach 2 Tagen 0 hilfreich
              Re^6: Kopieren in VBA, Zeile variabel, Spalte fest

              Ok guys,
              problem solved!!!

              Hier der Code, Fehler war, dass ich mein combofeld im Code falsch benannt hatte und Quelle und Ziel nicht mit Variant sondern Integer belegt hatte. Tja, das ist meine Schwaeche: schusselfehler:

              Sub CombFunction_Change()
              Const Auswahl$ = "I6" 'Zelle f¨¹r Ausgabeverkn¨¹pfung
              Select Case ActiveSheet.Range(Auswahl).Value
              Case "CV_PLM_ENTWICKLUNG"
              FunctionText 1
              Case "CV_PLM_ENTW_VALIDIERUNG"
              FunctionText 2
              Case "CV_SCM_LOGISTIK"
              FunctionText 3
              Case "CV_SCM_PLANUNG"
              FunctionText 4
              End Select
              End Sub
              Private Sub FunctionText(Nr%)
              Dim i%, Quelle$, Ziel$
              Dim Spalten As Variant
              Const AbZeile% = 356 'k?nnte auch 1 sein
              Const AnzahlZeilen% = 17 'C356:C372 = 16 Zl.
              Spalten = Array("U", "V", "W", "X")
              With ActiveSheet
              For i = 1 To AnzahlZeilen
              Quelle = Spalten(Nr - 1) & Format$(AbZeile - 1 + i)
              'Quelle.Copy
              Ziel = "C" & Format$(355 + i)
              .Range(Ziel).Value = .Range(Quelle).Value
              'Ziel.Select
              'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
              '    :=False, Transpose:=False
              Next i
              End With
              End Sub
              

          • Antwort von nach 10 Stunden 0 hilfreich
            Re: Kopieren in VBA, Zeile variabel, Spalte fest

            Hallo Antonia

            Versuch doch mal folgendes:
            Zunächst kann Excel VBA meines Wissens keine echten Werte sondern nur Positionen eines Kombofeldes auslesen(in Deinem Fall also case 1 case 2 case 3 oder case4)
            Somit änderst Du also Deine Select Case Auswahl folgendermaßen:
            CODE:
            Select Case ActiveSheet.DropDowns(1).Value
            Case 1
            Call functiontext1

            Case 2
            Call functiontext2

            Case 3
            Call functiontext3

            Case 4
            Call functiontext4

            End Select
            CODE ENDE

            Dann erstellst Du die 4 notwendigen subs über
            CODE ERSTE FUNKTION:

            public Function functiontext1()
            Range("G81:G91").Select
            Selection.Copy
            Range("A3:A13").Select
            ActiveSheet.Paste
            End Function
            CODE ENDE

            Die Zellen musst Du noch jeweils anpassen, dann sollte es funktionieren
            Du kannst natürlich auch alles in der einen sub ausführen Also:

            CODE:
            case 1
            Range("G81:G91").Select
            Selection.Copy
            Range("A3:A13").Select
            ActiveSheet.Paste

            case 2
            Range("Deine SpalteX:Deine SpalteY").Select
            Selection.Copy
            Range("A3:A13").Select
            ActiveSheet.Paste
            CODE ENDE:

            Wär für mich sauberer und eher mein Ding:-)

            liebe Grüße

            Jason

  3. Antwort von nach 27 Tagen 0 hilfreich
    Re: Kopieren in VBA, Zeile variabel, Spalte fest

    Hallo Antonia,

    tut mir Leid, dass ich dich so lange auf meine Antwort hab warten lassen. In meinem Codebeispiel kannst du, je nach Auswahl in der Combobox, einen Wert von Y81, Z81, AA81 oder AB81 in C81, C82, C83 oder C84 übernehmen. Falls du den Wert Y81 in C81-C85 bspw. einfügen willst, dann müsstest noch eine Schleife drum rum bauen.

    Hier mal prinzipiell mein Beispiel:

    Private Sub CombFunction_Change()
    Dim col As String

    col = ""
    Select Case CombFunction.Value
    Case "CV_PLM_ENTWICKLUNG"
    col = "Y"

    Case "CV_PLM_ENTW_VALIDIERUNG"
    col = "Z"

    Case "CV_SCM_LOGISTIK"
    col = "AA"

    Case "CV_SCM_PLANUNG"
    col = "AB"
    End Select

    Call FunctionText(col)
    End Sub

    Private Sub FunctionText(ByVal spalte As String)
    Dim zeile As Integer 'hier wird der Wert reingeschrieben (=Zielzeile)
    Dim fixSpalte As String 'in deinem Beispiel war das "C" (=Zielspalte)
    Dim fixZeile As Integer 'fixe Zeile der nicht einsehbaren Stelle (=Quellzeile)

    fixSpalte = "C"
    fixZeile = 81

    Select Case spalte
    Case "Y"
    zeile = 81

    Case "Z"
    zeile = 82

    Case "AA"
    zeile = 83

    Case "AB"
    zeile = 84
    End Select

    Cells.Item(zeile, fixSpalte) = Cells.Item(fixZeile, spalte)
    End Sub


    Wie du siehst hab ich deinen Code ein bisschen umgebaut. Ich würde dir empfehlen immer mit Variablen zu arbeiten denen du am Anfang einen Initialwert gibst. Falls sich die Spalte "C" im Programm mal ändern sollte dann bräuchtest du nur die Variable "fixSpalte" anpassen und musst nich den kompletten Code nach dem Wert "C" durchsuchen und ändern. Kleiner Tipp am Rande :-) Hoffe, dass ich dir damit ein bisschen weitergeholfen hab.

    Lg neotokyo_1

    Jetzt auf diese Frage antworten.