Guten Tag,
ich habe ein Makro in Excel/VBA geschrieben, dass in einer Spalte alle Werte ausliest und in einem Array schreibt. Dann filtert es nach jedem Wert des Arrays in dieser Spalte und erstellt eine neues Tabellenblatt mit den Namen dieses Arraywertes.
Jetzt habe ich das Problem das diese Werte oft länger sind als 31 Zeichen. Wie kann ich hier den Befehl anpassen das er maximal die ersten 31 Zeichen nimmt, um die Tabelle zu bennen? Der Arraywert im Code ist vntItem. Ich brauche quasi die VBA syntax was im Excel =LINKS(30;vntItem) wäre.
Der Ausschnitt des Codes:
Die Zeile die meines erachtens angepasst werden muss habe ich hervorgehoben.
With ActiveSheet
If .FilterMode Then .ShowAllData 'deaktiviert bereits aktive Filter
vntFilter = .Range("K14:K" & Application.Max(2, .Cells(.Rows.Count, 3).End(xlUp).Row)) 'liest alle Werte aus K aus.
vntFilter = toArraySorted(vntFilter) 'speichert alle Werte aus K in einem Array AUCH LEER!
For Each vntItem In vntFilter 'geht jedes Filteritem durch
.Range("K13").CurrentRegion.AutoFilter Field:=11, Criteria1:=vntItem, Operator:=xlAnd
Application.CalculateFull
Set addworksheet = ThisWorkbook.Worksheets.Add
If vntItem = "" Then
addworksheet.Name = "Leer"
Else:
addworksheet.Name = vntItem
End If
Sheets("Mail Generator").Select
If vntItem = "" Then
ActiveSheet.AutoFilter.Range.Copy Sheets("Leer").Range("A13")
Worksheets("Mail Generator").Range("A1:L12").Copy Worksheets("Leer").Range("A1")
Sheets("Leer").Range("F3").Value = vntItem
Else:
ActiveSheet.AutoFilter.Range.Copy Sheets(vntItem).Range("A13")
Worksheets("Mail Generator").Range("A1:L12").Copy Worksheets(vntItem).Range("A1")
Sheets(vntItem).Range("F3").Value = vntItem
End If
Next
End With
Ich hoffe ich habe es gut beschrieben. Vielen Dank im Voraus.
|