Verketten via VBA - Funktioniert nicht
#1
Hallo miteinander

Ich komme leider nicht weiter und könnt eure Hilfe brauchen.
Ich versuche das Verketten mit VBA ausführen zu lassen, damit alle Daten in der Spalte Q in einer Zelle zusammengeführt werden und mit dem Zeichen ; getrennt werden.
Leider funktioniert dies nicht. Die Funktion würde ich gerne bei einem meiner Buttons ausführen lassen.

Function Verketten2(ByRef bereich As Range, Trennzeichen As String) As String
Dim rng As Range
For Each rng In bereich
If rng <> "" Then
Verketten2 = Verketten2 & rng & Trennzeichen
End If
Next
If Len(Verketten2) > 0 Then _
Verketten2 = Left(Verketten2, Len(Verketten2) - Len(Trennzeichen))
End Function

Dann in der entsprechenden Zelle eingeben: =Verketten2(Q3:Q1000;"; ")



Gruss Matteo
Top
#2
Hallo Matteo,

"Leider funktioniert dies nicht." ist immer wieder eine sehr aussagekräftige Hilfe für die Helfer. Blush

Ich habe einmal deinen code kopiert und

zu
Zitat:Dann in der entsprechenden Zelle eingeben: =Verketten2(Q3:Q1000;"; ")
Das funktioniert bei mir. Falls bei dir der Fehler "#NAME?" erscheint, könnte es sein, dass die Funktion nicht in einem allgemeinen Modul liegt.

zu

Zitat:Die Funktion würde ich gerne bei einem meiner Buttons ausführen lassen.
Das habe ich nicht verstanden.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#3
Hallo Helmut

Danke dir für deine schnelle Antwort. Leider bin ich ziemlich Neu im Forum und muss noch einiges lernen.

Ich würde die Aktion gerne über den CommandButton laufen lassen, das heisst am Schluss solte es so sein, das nach dem Klicken des Button der Befehl ausgeführt wird.

Betreffend dem Fehler liegst du richtig. Ich hatte bei der Zelle den "Fehler"  -> #Name
Jetz muss ich noch herausfinden in welchem Modul das eingesetzt werden muss, kannst du mir da evt helfen?

Gruss Matteo
Top
#4
Moin!
Zitat:Dann in der entsprechenden Zelle eingeben: =Verketten2(Q3:Q1000;"; ")

Verrätst Du mir, was es bringen soll, 998(!) Zellinhalte miteinander zu verketten??
Abseits des sich mir nicht erschließenden Sinns gibt es Restriktionen in Excel.
Eine davon ist die maximale Zeichenanzahl in einer Zelle: 32.767
siehe: https://support.office.com/de-de/article...9d656771c3

Beantworte aber bitte zunächst meine Frage.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Hallo Ralf

Ich denke mal ein Profi ist noch nie einfach so vom Himmel gefallen, deshalb nehme ich es locker und gebe dir eine Antwort.
Da ich ziemlich neu bin, ich mich mit Excel langsam anfreunde und lerne (auch gerne von anderen Excel User) mache ich Fehler, woraus ich stets lerne. Ich denke da braucht es keine Antwort aber danke dir für den Hinweis, diese Limitierung kannte ich nicht.

Gruss
Matteo
Top
#6
@Matteo:
Mir ist zwar schleierhaft, wie Du zu dieser Deutung meines informativen Posts kommst, aber egal:

Vielleicht gibt es ja tatsächlich einen Grund für diese Monsterverknüpfung.
Eine denkbare Variante wäre ja eine ungewöhnliche Vorbereitung einer .CSV-Datei.
(die sich natürlich anders lösen ließe)
Und nur deshalb stellte ich Dir die Frage nach dem Sinn.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Spieöt ja keine Rolle ;)

Es wird eine Liste, auf der die Personalien verschiedener Leute eingetragen werden. Und da sie immer wieder kommen kann ich sie nicht löschen und es werden auch immer neue dazukommen. Deshalb erstelle/ brauche ich eine Verkettung der E-Mail adresse der anwesenden, damit auch nur diese unsere Mails erhalten. Ich hoffe ich konnte es verständlich erklären.
Top
#8
Na gucke!
Jetzt macht es ja Sinn! ;)
Da Du ohnehin VBA verwendest und das Ganze sicherlich dynamisch haben willst …
Ich würde völlig anders vorgehen.
Sub x()
Dim SendTo$
SendTo = Join(WorksheetFunction.Transpose(Range(Range("C1"), Range("C1").End(xlDown))), ";")
End Sub

In der Variable SendTo steht jetzt der mit Semikolon getrennte String aller Mail-Addies.
(Ich meine, dass hier die Grenze bei 2.000.000.000 Zeichen liegt, dürfte erst mal reichen)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Primo Centurio
Top
#9
Zsuper danke dir, versuche ich am Donnerstag sofort aus. Kann man diesen code auch so einsetzten, das er mit einem CommandButton ausgelöst wird?

Gruss Matteo
Top
#10
Ja, sicher geht dies.
Willst Du dann gleich die Mails losjagen?
Wenn ja, mit welchem Mailprogramm?
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste