Kopieren in VBA, Zeile variabel, Spalte fest

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

Hallo,

es könnte so funtionieren:

Range(„M1:M14“).Select
Selection.Copy
Range(„A1“).Select
ActiveSheet.Paste

Gruß

Hallo,
ich steh da noch ein bischen auf dem schlauch:

heisst das, in der combobox wird 1x z.b. auswahl 1 ausgewählt, und in C81:C96 muss dann unterschiedlicher text in Bezug zu auswahl 1 stehen,

oder:

muss für jede der zeilen eine eigene Auswahl getroffen werden? Also zeile1 auswahl2, zeile2 auswahl1 etc.

L.G. naminix

Das ist ja aber Zellenspeziefisch. Ich brauch nen Code der mir die Zellen aus spalte x, x minus 21 spalten weiter links einfuegt.
bzw. abhaengig von der box in der ich das abfrage (kann in zeile14 aber auch 44 sein) in spalte x text kopiert und in der jeweiligen zeile, aber wieder spaltex minus 21 (also z.b. spalte c) einfuegt.

Also, vom Prinzip her recht einfach, aber etwas VBA-Programmierung solltest Du schon beherrschen.

  • eine Combobox hat verschiedene Ereignisroutinen, z.B. _Click(). In dieser Routine kann man dann die gewünschte Leistung codieren
  • den in der ComboBox eingestellten Wert kann man über .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

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

Hallo Antonia,

Private Sub CombFunction\_Click()


SBreich = "A3:A17" 'Variable anpassen

Suchkriterium = CombFunction.value
Index = CombFunction.ListIndex

 'Funktion Suchen der Zelle und Kopieren
 With Workbooks(This.workbook.name).Worksheets(„Tabelle1“)
 For Each Zelle In .Range (SBreich)
 If Zelle.Column = .Range(SBreich). Column Then
 If UCase(CStr(Left(Zelle.Value, Len(Suchkriterium)))) = \_
 UCase(CStr(Suchkriterium)) Then

 Cells(Zelle.Row, Zelle.Column).copy
 Exit For
 End If
 End If
 Next
 End With

‚hier her gehört der teil der mit Makro Recorder aufgezeichnet wurde

End sub

Mit den Makro Rekorder aufzeichnen wohin er die Zelle kopieren soll.
Die Zeile durch eine Variable ersetzen, in der kopiert wird.
Der Rest dürfte nicht mehr all zu schwer sein.

Lg Fred

Aber irgendwie muss man ja an die Information kommen, um welche Zelle es sich handelt? Wenn das Pull down ausgewählt wird, muß diese Information übergeben werden, d.h. bei der Auswahl des Pull down sollte der entsprechende Eingabebereich bereits markiert werden

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

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:smiley:eine SpalteY“).Select
Selection.Copy
Range(„A3:A13“).Select
ActiveSheet.Paste
CODE ENDE:

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

liebe Grüße

Jason

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

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
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

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:frowning:

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!

Hallo Antonia,

Suchen wir auch noch das Puzzleteil! Meine Mailadresse ist [email protected] - 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

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

Hallo Antonia,

ich habe Dein Problematik noch nicht wirklich verstanden. Es kann aber sein, dass Du gar nicht Programmieren musst und dir eine Auswahlbox und der Befehl „Bereich.Verschieben(…)“ reicht.

Gruß
Randolf

Hallo Antonia,

  1. Helferlein finde ich ein wenig herablassend. Meinst Du nicht?

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.
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?

Doch. Der Aufwand bei der Codierung (VBA-Schreiben) ist abhängig von der Konzeption Deines Programms.

Abgesehen davon, daß ich ein Steuerelement niemals mit Function benennen würde, würde ich damit beginnen, statt .Value= „CV_PLM_ENTWICKLUNG“ den .ListIndex des Steuerelements auszuwerten.

Der liefert eine Zahl zurück, mit der Du rechnen kannst, um den Offset des Quellbereichs zu bestimmen.

Mehr möchte ich heute dazu nicht mehr schreiben.

HTH.

Markus

Ist das ein VBA-Befehl??

Ich finde nicht das das herablassend klingt, aber darauf muss ich in einem solchen Forum auch nicht eingehen. Und Function change heisst es dem grund dass diese Combobox eine Funktionsauswahl darstellt fuer verschiedene Personalfunktionen.

Danke, fuer den sonst nutzlosen Hinweis.