Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
912to916
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellinhalte nach Verkettung ausrichten (@fcs)

Zellinhalte nach Verkettung ausrichten (@fcs)
03.10.2007 19:46:00
Urs
Hallo Franz,
nach meinem wohlverdienten Urlaub möchte ich es nicht versäumen, mich bei Dir zurückzumelden.
Dein Makro ist mittlerweile im "Feldeinsatz" und leistet gute Dienste. Von der Programmierung bin ich immer noch begeistert! An dieser Stelle vielen Dank für DEinen Einsatz! Ich möchte Dich bitten, noch einen kurzen Blick auf den nun aktuellen Code zu werfen, da gelegentlich folgende Fehlermeldungen angezeigt werden:
Laufzeitfehler 1004: Die Methode Range für das Objekt Worksheet ist fehlgeschlagen
Laufzeitfehler '-2147352567 (80020009)': Eigenschaft Value konnte nicht gesetzt werden. Typkonflikt.
Vielen Dank vorab. Hier nun der Code:
Option Explicit
Private Merken As Variant 'Variable zum Merken des Werts der selektieten Zelle

Private Sub ComboBox1_Change()
Dim Zeile As Long
'Aktionen nach Wertänderung der ComboBox
Application.EnableEvents = False
Zeile = Me.Range(Me.ComboBox1.LinkedCell).Row
If Me.ComboBox1.Value = "" Or IsEmpty(Range(Me.ComboBox1.LinkedCell)) Then
Cells(Zeile, 19).Select
'Formeln in Spalten T bis Z löschen
Range(Cells(Zeile, 20), Cells(Zeile, 26)).ClearContents
Else
If Not IsNull(Me.ComboBox1.Value) Then
'KundenNr (Text aus Combobox wird in Zahl umgewandelt)
Cells(Zeile, 19).Value = Val(Me.ComboBox1.Value)
'Formeln in Spalten T bis Z eintragen
Cells(Zeile, 20).FormulaR1C1 = "=IF(VLOOKUP(RC[-1],Auswahlliste,2,FALSE)=0,"""",VLOOKUP(RC[- _
1],Auswahlliste,2,FALSE))" 'Nr.
Cells(Zeile, 21).FormulaR1C1 = "=IF(VLOOKUP(RC[-2],Auswahlliste,3,FALSE)=0,"""",VLOOKUP(RC[- _
2],Auswahlliste,3,FALSE))" 'Zusatz
Cells(Zeile, 22).FormulaR1C1 = "=VLOOKUP(RC[-3],Auswahlliste,5,FALSE)" 'Name 1
Cells(Zeile, 23).FormulaR1C1 = "=IF(VLOOKUP(RC[-4],Auswahlliste,6,FALSE)=0,"""",VLOOKUP(RC[- _
4],Auswahlliste,6,FALSE))" 'Name2
Cells(Zeile, 24).FormulaR1C1 = "=VLOOKUP(RC[-5],Auswahlliste,7,FALSE)" 'Strasse
Cells(Zeile, 25).FormulaR1C1 = "=VLOOKUP(RC[-6],Auswahlliste,8,FALSE)" 'PLZ
Cells(Zeile, 26).FormulaR1C1 = "=VLOOKUP(RC[-7],Auswahlliste,9,FALSE)" 'Ort
End If
End If
Application.EnableEvents = True
End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
With Me.ComboBox1
'Auf Spalte mit Kundennummer prüfen
If Target.Column = 19 And Target.Row > 1 And Target.Cells.Count = 1 Then
Application.EnableEvents = False
If IsError(Target.Value) Then Merken = "" Else Merken = Target.Value
.LinkedCell = Target.Address
.Value = Merken
.Top = Target.Top
.Left = Target.Offset(0, 1).Left
.Visible = True
Application.EnableEvents = True
Else
.Visible = False
End If
End With
End Sub


Grüße,
Urs
Thema: Zellinhalte nach Verkettung ausrichten
* Zellinhalte nach Verkettung ausrichten von Urs vom 05.09.2007 17:41:08
o AW: Zellinhalte nach Verkettung ausrichten - von fcs am 05.09.2007 18:07:07
o AW: Zellinhalte nach Verkettung ausrichten - von Urs am 05.09.2007 18:28:31
+ AW: Zellinhalte nach Verkettung ausrichten - von fcs am 06.09.2007 03:41:21
# AW: Zellinhalte nach Verkettung ausrichten - von Urs am 06.09.2007 18:19:06
* AW: Zellinhalte nach Verkettung ausrichten - von fcs am 07.09.2007 02:52:58
* AW: Zellinhalte nach Verkettung ausrichten - von Urs am 09.09.2007 11:07:56
o AW: Zellinhalte nach Verkettung ausrichten - von fcs am 09.09.2007 17:52:47
Grüße ans Forum.
Meine xls-Tabelle hat folgendes Aussehen:
Die Spalten 1 und 3 beinhalten Daten; in Spalte 2 stehen lediglich einige Leerzeichen.
Ich verkette nun die Spalten 1-3 und lasse das Ergebnis in Spalte 4 anzeigen.
Gibt es nun eine Möglichkeit, die einzelnen Bestandteile des Ergebnisses innerhalb der Spalte 4 analog Tabstops in Word gleichmäßig / jeweils bündig auszurichten?
Danke für Eure Hinweise.
Urs
Hallo Urs,
eine entsprechende Tabulator-Funktion gibt es in Excel nicht. Innerhalb einer Zelle/Spalte könntets du so eine Darstellung nur ereichen, indem du die unterschhiedlichen Wortlängen per Formel durch Leerzeichen ausgleichst und eine Schriftart wie Courier wählst, die eine feste Zeichenbreite hat.
Warum fügst du Wörter denn in einer Zelle zusammen, wenn du die Texte dann doch wieder Spaltenweise ausrichten willst?
Gruß
Franz
Hallo Franz,
danke für Deine Antwort.
Kurz zum Hintergrund: Es handelt sich bei der Tabelle im Grunde um eine Adress-Datenbank. Aus dieser Adressdatenbank habe ich bislang in einem zweiten Blatt der Tabelle mittels Dropdownmenü (über Menü GÜLTIGKEIT) die Straße ausgewählt und die anderen Daten wie Name, PLZ, Ort per SVERWEIS auslesen lassen. Dieses zweite Blatt ist eine Übersicht von Kundenbestellungen.
Da sich nun die Namen / Kundenbezeichnungen z. T. geändert hatten, der Straßennname jedoch nicht, hatte ich das Problem, das ich kein eindeutiges Kriterium mehr zur Verfügung hatte. Ein Straßenname konnte nun für z. B. zwei Kundenbezeichnungen gültig sein. Dies deshalb, weil ich in dem Tabellenblatt alte und neue Bestellungen gleichzeitig führen muss (d. h. mit alter und neuer Kundenbezeichnung).
Vielleicht hast Du noch eine Idee, die in eine ganz andere Richtung führt.
Urs
Hallo Urs,
den Strassennamen als Kriterium für die Auswahl eines Datensatzes in einer Adressdatenbank zu nehmen ist schon etwas ungewöhnlich.
Typischerweise nimmt man doch eher den Kundennamen (Name + Vorname). Noch besser ist es, wenn man mit einer eindeutigen Kundennummer arbeitet; wenn ein Kunde sich einen neuen Namen verpasst, dann kriegt er halt eine neue Kundennummer.
Für die Auswahl eines Kunden in der Übersicht bietet sich dann ggf. eher eine Kombinationsauswahlbox (hier kann man zur Information auch mehrere Spalten anzeigen) aus der Steuerelemente-Toolbox an, als ein Gültigkeitsdropdown. Eine Kombi-Box kann man per Makrosteuerung auch so konfigurieren, dass sie dynamisch ihre Position und die verknüpfte Zelle wechselt, abhängig von der aktuell selektierten Zelle.
Gruß
Franz
Hallo Franz,
Dein Vorschlag hört sich äußerst vielversprechend an. Vielleicht magst Du mir in der hochgeladenen Datei einmal zeigen, wie Deine Idee umzusetzen wäre.
Die Straße ist deshalb als Kriterium gewählt worden, weil die Straßennamen eingängiger waren als die doch unübersichtlichen, zumal abgekürzten, Bezeichnungen der Lieferadressen (siehe Spalte "Name"). Vielleicht können wir die ganze Sache ja jetzt zusammen "umbauen"! Hauptknackpunkt ist wie gesagt das Hinzufügen von Namen mit bereits bekannter Straße.
Über ein erneutes Feedback freue ich mich.
Grüße,
Urs
https://www.herber.de/bbs/user/45763.xls
Hallo Urs,
ich hab meinen Lösungsvorschlag mit der dynamischen Kombinations-Auswahlbox in deine Mappe eingebaut.
Ich hab dazu der Einfachheit halber die Spalte KundenNr in beiden Tabellen eingerichtet. Für die Kundenummer kannst du beliebige ganze Zahlen verwenden. Reihenfolge spielt keine Rolle.
Die Auswahl-Box ist momentan so konfiguriert, dass der Eintrag auch über die Anfangsbuchstaben von Name1 ausgewählt werden kann. Falls du weiter über die Strasse selektieren möchtest, dann ist das kein Problem. Du muss für die Box dann nur die Eigenschaft "Textcolumn" von 3 auf 2 ändern.
Weitere Erläuterungen findest du in der Datei.
https://www.herber.de/bbs/user/45769.xls
Gruß
Franz
Hallo Franz,
vielen Dank für Deine tolle Datei! Ich bin echt begeistert!!
Nur mit dem Auswahlkriterium "Kundennummer" bin ich noch nicht ganz zufrieden.
Bei zur Zeit etwa einhundert Adress-Datensätzen benötigt das Nachschlagen der Kundennummern beim Erfassen der Bestellungen noch zuviel Zeit. Ähnlich verhält es sich ja mit dem Kriterium "Name1".
Ich überlege also, wie man die Bestellerfassung noch beschleunigen könnte.
Vielleicht müsste bei Eingabe der Straße ein Fenster aufgehen, aus dem dann die möglichen Kriterien "Name1" zur Auswahl angezeigt werden?!
Ich würde mich freuen, wenn Du mir helfen könntest.
Viele Grüsse,
Urs
Hallo Urs,
wieso geht die Auswahl langsam?
Wenn du die Liste der Lieferadressen nach der Spalte Name1 sortierst, dann wird im Blatt Bestellungen die Auswhlliste auch nach Name1 sortiert angezeigt. Wenn du jetzt in der Auswahlliste die Anfangsbuchstaben von Name1 eintippst, dann scrollt die Auswahlliste automatisch an die richtige Position. Du kannst dann weiter Zeichen eingeben oder mit der Maus weiterscrollen, bis der gewünschte Name1/Strasse zur Auswahl erscheint und angezeigt wird.
Die Kundennummer ist ja nicht zur Auswahl gedacht, sondern dient der eindeutigen Kennzeichnung der Datensätze der Lieferadressen, so dass die SVERWEIS-Formeln funktionieren.
Ich verstehe auch nicht wieso die Vorauswahl über die Strasse die Sache vereinfachen soll. Oder hast du soviele gleiche/ähnliche Einträge unter Name1, dass es Sinn macht über die Strasse die Auswahl zu beginnen?.
Sortiere deine Lieferantenliste nach der Strasse und stelle für die Auswahlbox die Eigenschaft "TextColumn" auf 2. Dann wird mit Eingabe der Strasse die Vorauswahl gescollt. Zusätzlich kannst die Zahl für "ListRows" von 8 auf 15 erhöhen, um ggf. schneller scrollen zu können.
Gruß
Franz

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellinhalte nach Verkettung ausrichten (@fcs)
04.10.2007 12:13:00
fcs
Hallo Urs,
freut mich, dass meine kleine Hilfe es in die Produktion geschaft hat.
Gelegentliche Fehler sind natürlich immer schwer einzugrenzen. Ich tippe mal, dass gelegentlich -aus mir nicht bekanntem Grund- die Kombobox keine verknüpfte Zelle ("LinkedCell") hat. Dann gibt es einen Fehler wenn die Zeilen-Nummer aus der "LinkedCell" berechnet werden soll.
Ich hatte die Prozedur unter EXCEL97 erstellt; keine Probleme. Jetzt beim Probieren mit Excel 2003 tritt die Fehlermeldung dauernd auf. Scheinbar hat sich die Sensitivität bei der Reaktion auf Ereignisse etwas geändert.
Ich hab den Code jetzt so geändert, dass die nicht mehr die "LinkedCell" der Combobox zum Austausch der Informationen zwischen Zellen und Combobox dient, sondern eine Objekt-Variable, die die jeweils selektierte Zelle repräsentiert. Das scheint störungsfrei zu funktionieren.
Zusätzlich hab ich eine Fehlerbehandlung eingebaut. Diese sorgt dafür, dass bei einem Fehler die Prozeduren kontrolliert mit einer Meldung beendet werden.
Gruß
Franz

Option Explicit
Private Zelle As Range 'Variable zum Merken des Addresse der selektierten Zelle
Private Sub ComboBox1_Change()
Dim Zeile As Long
'Aktionen nach Wertänderung der ComboBox
On Error GoTo Fehler
Application.EnableEvents = False
Zeile = Zelle.Row
If Me.ComboBox1.Value = "" Then
Zelle.ClearContents
Zelle.Select
'Formeln in Spalten T bis Z löschen
Range(Cells(Zeile, 20), Cells(Zeile, 26)).ClearContents
Else
If Not IsNull(Me.ComboBox1.Value) Then
'KundenNr (Text aus Combobox wird in Zahl umgewandelt)
Cells(Zeile, 19).Value = Val(Me.ComboBox1.Value)
'Formeln in Spalten T bis Z eintragen
Cells(Zeile, 20).FormulaR1C1 = _
"=IF(VLOOKUP(RC[-1],Auswahlliste,2,FALSE)=0,"""",VLOOKUP(RC[-1],Auswahlliste,2,FALSE))" 'Nr. _
Cells(Zeile, 21).FormulaR1C1 = _
"=IF(VLOOKUP(RC[-2],Auswahlliste,3,FALSE)=0,"""",VLOOKUP(RC[-2],Auswahlliste,3,FALSE))" ' _
Zusatz
Cells(Zeile, 22).FormulaR1C1 = "=VLOOKUP(RC[-3],Auswahlliste,5,FALSE)" 'Name 1
Cells(Zeile, 23).FormulaR1C1 = _
"=IF(VLOOKUP(RC[-4],Auswahlliste,6,FALSE)=0,"""",VLOOKUP(RC[-4],Auswahlliste,6,FALSE))" ' _
Name2
Cells(Zeile, 24).FormulaR1C1 = "=VLOOKUP(RC[-5],Auswahlliste,7,FALSE)" 'Strasse
Cells(Zeile, 25).FormulaR1C1 = "=VLOOKUP(RC[-6],Auswahlliste,8,FALSE)" 'PLZ
Cells(Zeile, 26).FormulaR1C1 = "=VLOOKUP(RC[-7],Auswahlliste,9,FALSE)" 'Ort
End If
End If
GoTo Beenden
Fehler:
If Err.Number = 91 Then
MsgBox "Bitte selektieren Sie zunächst eine andere Zelle!" & vbLf & _
"Diese Meldung erscheint nach dem Öffnen der Datei, wenn in der angezeigten " & _
"ComboBox direkt der Wert geändert wird ohne vorher eine andere Zelle zu selektieren."
Else
MsgBox "Fehler Nr. " & Err.Number & " ist aufgtreten!" & vbLf & vbLf & Err.Description
End If
Beenden:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fehler
'Auf Spalte mit Kundennummer prüfen
If Target.Column = 19 And Target.Row > 1 And Target.Cells.Count = 1 Then
Set Zelle = Target
Me.ComboBox1.Value = Target.Value
End If
GoTo Beenden
Fehler:
MsgBox "Fehler Nr. " & Err.Number & " ist aufgtreten!" & vbLf & vbLf & Err.Description
Beenden:
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
On Error GoTo Fehler
With Me.ComboBox1
'Auf Spalte mit Kundennummer prüfen
If Target.Column = 19 And Target.Row > 1 And Target.Cells.Count = 1 Then
Application.EnableEvents = False
Set Zelle = Target
.Value = Target.Value
.Top = Target.Top
.Left = Target.Offset(0, 1).Left
.Visible = True
Application.EnableEvents = True
Else
Set Zelle = Nothing
.Visible = False
End If
End With
GoTo Beenden
Fehler:
MsgBox "Fehler Nr. " & Err.Number & " ist aufgtreten!" & vbLf & vbLf & Err.Description
Beenden:
Application.EnableEvents = True
End Sub


Anzeige
AW: Zellinhalte nach Verkettung ausrichten (@fcs)
07.10.2007 10:29:07
Urs
Hallo Franz,
schön, von Dir zu lesen.
Ich habe Dein Makro vorgestern in der neuen Fassung zum ersten Mal testen können.
Bislang hat es keine Fehlermeldung gegeben!!!
Besonders benutzerfreundlich finde ich nach wie vor, dass die Auswahlliste bei Eintippen der ersten Zeichen direkt an die richtige Stelle scrollt.
Darf ich Dich fragen, wie Du Dir Deine VBA-Kenntnisse angeeignet hast? Ich finde nämlich mehr und mehr Geschmack daran, es selbst auch einmal zu versuchen. Vielleicht hast Du ja einige Tipps für mich als "VBA-Einsteiger".
Also, nochmals vielen Dank und einen schönen Sonntag,
Urs
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige