SoftMaker.de

Deutschsprachiges Diskussionsforum
Aktuelle Zeit: 25.05.2013 10:14:27

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
BeitragVerfasst: 21.02.2010 16:15:05 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 959
Zitat:
Das muss ich jetzt noch lernen... Vielleicht mit Do...while?

Ja, anbei den Code mit einer Schleife, das Script läuft solange, bis eine Zelle der betreffenden Spalte leer ist, was ja auch der Normalfall ist.

Code:
Set pm = CreateObject("PlanMaker.Application")  ' Verbindung aufbauen
pm.Application.Visible = True
pm.Activate

option explicit
dim zeile, spalte,x
dim az, n, vn

zeile = pm.ActiveSheet.Selection.row
spalte = pm.ActiveSheet.Selection.Column

DO while pm.ActiveSheet.Cells.Item(zeile,spalte).Value  <> ""

az = pm.ActiveSheet.Cells.Item(zeile,spalte).Value

for x = 1 to len(az)
N = Right(az, x)

IF Left(N, 1) = " " then
vn = left(az, len(az)- x)
pm.ActiveSheet.Cells.Item(zeile,spalte+1).Value=vn
pm.ActiveSheet.Cells.Item(zeile,spalte+2).Value=n
exit for
end if

next x

zeile = zeile + 1

Loop

Set pm = Nothing ' Verbindung aufheben



Nach oben
 Profil  
 
BeitragVerfasst: 21.02.2010 16:43:06 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Dewes hat geschrieben:
Ich habe deshalb ein kleines Script geschrieben, nur als Beispiel. Es muss noch eine Schleife mit der Größe des Bereiches eingebaut werden und evtl. die Spalten angepasst werden, in der Vorname und Familienname gespeichert werden sollen.
Ich habe es ausprobiert und es scheitert z.B. am Rumpelstielzchen (wenn z.B. nur der Nachname in der Zelle steht) und an Manfred Rudolf Kreuzwendedich Maria Graf von Salm-Hoogstraeten. Bei Rumpelstilzchen kann ich es verstehen, da von rechts her bis zum ersten Leerzeichen die Anzahl der Zeichen gezählt wird. Und da Rumpelzstielzchen kein Leerzeichen hat, funktioniert es nicht. Aber bei Manfred Rudolf Kreuzwendedich Maria Graf von Salm-Hoogstraeten erfolgt die Trennung in den Vornamen Manfred Rudolf Kreuzwendedich Maria und den Nachnamen Graf von Salm-Hoogstraeten. Warum aber? Erwartet habe ich den Nachnamen Salm-Hoogstraeten.
Seltsamerweise funktioniert auch Karl Barth nicht (Verzeihung, ich meine nur die Verwendung des Namens bei der Ausführung des Skriptes), und Sabine Leutheusser-Schnarrenberger, Johann Gottfried Bemme, E. Wallace nicht. Bei John F. Kennedy nimmt er er das F. zum Nachnamen. Wirklich seltsam ....


Während ich noch beim Überlegen und Formulieren war, stellte Dewes das neue Skript rein und nun sind alle Fehler bis auf Rumpelstielzchen weg. Beim Skript kam ja nur die Schleife hinzu. Lag meinerseits ein Bedienfehler zugrunde? Ich markierte die Zelle mit dem vollen Namen und dann startete ich das (Vorgänger)Skript.

Ist ja egal, es funktioniert nun. Nur noch das Leerzeichen beim Nachnamen entfernen. Und alles ist gut.

Und vielleicht ein Hinweis in die Rubrik BasicMaker stellen, damit man dort auch auf die Lösung aufmerksam wird.


Nach oben
 Profil  
 
BeitragVerfasst: 21.02.2010 17:18:11 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1463
Tschuligung, wenn ich wieder mal Bösewicht spiele, aber:

Kim und Park sind in den betreffenden Sprachen Familiennamen, stehen aber den grammatischen Regeln dieser Sprachen entsprechend an erster Stelle.
Bei spanischen Namen muss man bisweilen einfach wissen, was ein Vor- und was ein Nachname ist, je nach dem ist eben beides möglich.
Und der durchaus bekannte Rechtshistoriker René Pahud de Mortanges hört auf den Familiennamen Pahud de Mortanges, sein Vorname ist nur René (Der Setzer ist beim Literaturverzeichnis auch reingefallen und hat nur de Mortanges kursiv gesetzt, hehe.).

Weil Namen so vielgestaltig sind, ist es wohl schwer, einen Automatismus zu basteln. Da müssten schon ein paar Zusatzregeln hin, etwa: Graf, Fürst, Prinz, Baron in Namen wie "Ott Graf Lambsdorff" als Teil des Nachnamens erkennen. Das setzt dann aber schon fast einen Parser voraus.


Nach oben
 Profil  
 
BeitragVerfasst: 21.02.2010 17:33:29 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 959
PeterQ hat geschrieben:
Ist ja egal, es funktioniert nun. Nur noch das Leerzeichen beim Nachnamen entfernen. Und alles ist gut.
.
Verstehe ich nicht ganz, aber ist kein Problem, ganz einfach
Code:
az = pm.ActiveSheet.Cells.Item(zeile,spalte).Value
az = Trim(az)
Wenn du nach dem ersten End IF noch folgenden Code einfügst, sind auch Namen ohne Vornamen (Rumpelstielzchen) abgefangen:
Code:
IF x =  len(az) then
pm.ActiveSheet.Cells.Item(zeile,spalte+2).Value=n
exit for
end if


Nach oben
 Profil  
 
BeitragVerfasst: 21.02.2010 17:46:21 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 959
Panosis hat geschrieben:
Weil Namen so vielgestaltig sind, ist es wohl schwer, einen Automatismus zu basteln. Da müssten schon ein paar Zusatzregeln hin, etwa: Graf, Fürst, Prinz, Baron in Namen wie "Ott Graf Lambsdorff" als Teil des Nachnamens erkennen. Das setzt dann aber schon fast einen Parser voraus.
das stimmt schon, wenn ich viele solcher Namen hätte, würde ich in der Tabelle 4 Spalten einrichten:

Titel =. Geheimrat
Vorname = Johann Wolfgang
Adel = von
Nachname = Goethe

Wenn man diese Zusätze im Script vorab definiert und abfragt, könnte man sie auf die richtigen Spalten verteilen, und hätte sie bei Serienbriefen zur Verfügung.

Aber z.B. ein "von und zu Guttenberg" hätte ich immer noch nicht abgefangen. Da aber solche Situationen doch selten sind, würde ich die nachträglich händisch kiorrigieren. Das dürfte einfacher sein, als ein aufwändiges Script zu schreiben.


Nach oben
 Profil  
 
BeitragVerfasst: 21.02.2010 19:16:18 
Offline

Registriert: 30.11.2005 21:20:05
Beiträge: 157
Dewes hat geschrieben:
Ja, anbei den Code mit einer Schleife, das Script läuft solange, bis eine Zelle der betreffenden Spalte leer ist, was ja auch der Normalfall ist.
Danke!
Karl


Nach oben
 Profil  
 
BeitragVerfasst: 21.02.2010 19:52:38 
Offline
SoftMaker Volunteers
SoftMaker Volunteers
Benutzeravatar

Registriert: 03.10.2007 12:58:39
Beiträge: 1854
PeterQ hat geschrieben:
....... Ich habe mich nur gefreut, dass ich selber auch einen Lösungsweg gefunden habe, der wohl nicht Greifenklaus Wohlgefallen gefunden hat:
greifenklau hat geschrieben:
Also man sollte die Formeln immer so verwenden wollen, wie der Erfinder sie verwendet haben will.
Und da würde ich auch Greifenklau zum Teil widersprechen. Wenn auch unorthodoxe Lösungen zum Ziel führen, warum dann nicht verwenden?
...... PeterQ

@PeterQ
Das scheint ein "Thread der Missverständnisse" zu werden. Mein Einwand bezog sich auf den Ursprungsbeitrag von Karl Barth und selbst dieser war nicht abwertend gemeint. Wenn Du wüsstest, wieviele Funktionen ich unter Excel schon "mißbraucht" habe, um ein gewünschtes Ergebnis zu erzielen .....
Mir ging es um in dem Beitrag nur darum, zu zeigen, dass SMO nicht die Schuld trifft, wenn eine "mißbrauchte" Funktion nicht so funktioniert, wie man es sich ausgedacht hat.
Aber Karl hat ja schon einen super Lösungsweg gefunden und mit der Hilfe von Dewes werden auch die "skurrilsten" Wünsche war. :wink:


Nach oben
 Profil  
 
BeitragVerfasst: 22.02.2010 21:56:10 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 09.07.2008 15:01:20
Beiträge: 258
Hüstel, räusper...

Ich habe hier einfach mal ein bisschen mitgelauscht - und das Skript gleich mal begeistert übernommen!

Na ja, und weil das doch so toll klappt, ich aber absolut keine Ahnung von Basic-Programmierung habe... also... da habe ich mich halt gefragt: Vielleicht würde einer von den Profis hier das Ganze ja auch noch für den umgekehrten Fall schreiben - ich habe die Spalten "Name" und "Vorname" (meistens ja in dieser Reihenfolge) und hätte jetzt gerne eine Spalte mit den kompletten Namen... Ich fänd's super!


Nach oben
 Profil  
 
BeitragVerfasst: 22.02.2010 23:14:21 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 05.12.2003 22:47:22
Beiträge: 1490
Wohnort: Solingen
Dafür brauchst du nicht mal ein Script, da tut es auch eine einfache Formel.
Wenn der Nachname in A1 steht und der Vorname in B1, lautet die Formel: =B1&" "&A1

Gruß
Jossi


Nach oben
 Profil  
 
BeitragVerfasst: 22.02.2010 23:51:46 
Offline

Registriert: 01.02.2010 19:38:04
Beiträge: 76
Hallo käsekuchen,
hier ist das gewünschte Skript:


Code:
'Führt Vorname und Nachname in getrennten Spalten in einer Spalte zusammen

SET pm = CreateObject("PlanMaker.Application")  ' Verbindung aufbauen
pm.Application.Visible = True
pm.Activate

OPTION EXPLICIT
DIM zeile, spalte AS LONG
DIM VN, NN, VN_NN AS STRING

zeile = pm.ActiveSheet.Selection.row            'Zeile in der sich der Cursor befindet
spalte = pm.ActiveSheet.Selection.Column

DO

   VN = pm.ActiveSheet.Cells.Item(zeile,spalte).Value
   NN = pm.ActiveSheet.Cells.Item(zeile,spalte+1).Value

   VN_NN = TRIM(VN) & " " & TRIM(NN)
   pm.ActiveSheet.Cells.Item(zeile,spalte+2).Value=VN_NN

   zeile = zeile + 1

LOOP UNTIL VN & NN = ""

SET pm = NOTHING ' Verbindung aufheben


Nach oben
 Profil  
 
BeitragVerfasst: 23.02.2010 10:04:11 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 09.07.2008 15:01:20
Beiträge: 258
Super, danke vielmals!! Ich werd's später gleich mal ausprobieren.


Nach oben
 Profil  
 
BeitragVerfasst: 24.02.2010 21:49:24 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 09.07.2008 15:01:20
Beiträge: 258
Klappt super - danke nochmal!


Nach oben
 Profil  
 
BeitragVerfasst: 24.02.2010 22:15:29 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 09.07.2008 15:01:20
Beiträge: 258
Eine klitzekleine Kleinigkeit hätte ich ja noch, dann bin ich ruhig: Habe gerade noch einmal das erste Skript, das zum TRENNEN von Vor- und Nachnamen, ausprobiert - in der Spalte "Nachname" habe ich dann immer ein Leerzeichen vor dem Nachnamen. Das hatte ja auch PeterQ schon erwähnt - und Dewes hatte zwei Skript-Zeilen zur Lösung geliefert:

az = pm.ActiveSheet.Cells.Item(zeile,spalte).Value
az = Trim(az)

Die habe ich jetzt an der Stelle eingefügt, wo vorher nur

az = pm.ActiveSheet.Cells.Item(zeile,spalte).Value

stand. Das scheint aber nicht die richtige Stelle zu sein, denn der gewünschte Effekt bleibt aus. Hilft mir Basic-Idioten noch einmal jemand? Müssen die Zeilen vielleicht vor "exit for"?


Nach oben
 Profil  
 
BeitragVerfasst: 24.02.2010 22:50:27 
Offline

Registriert: 01.02.2010 19:38:04
Beiträge: 76
Hallo Käsekuchen,

hier nochmal das komplette Skript mit 'getrimmten' Leerzeichen:

Code:
'Verteilt Vorname Nachname in einer Spalte auf 2 Spalten

SET pm = CreateObject( "PlanMaker.Application" ) 'Verbindung aufbauen
pm.Application.Visible = True
pm.Activate

OPTION EXPLICIT
DIM zeile, spalte, x AS LONG
DIM az, n, vn AS STRING

zeile = pm.ActiveSheet.Selection.row 'Zeile in der sich der Cursor befindet
spalte = pm.ActiveSheet.Selection.Column

DO WHILE pm.ActiveSheet.Cells.Item( zeile, spalte ).Value <> ""

   az = pm.ActiveSheet.Cells.Item( zeile, spalte ).Value

   FOR x = 1 to LEN( az )
      N = RIGHT( az, x )

      IF LEFT( N, 1 ) = " " THEN
         vn = LEFT( az, LEN( az ) - x )

         N = TRIM( n )  ' <--------------------------------------

         pm.ActiveSheet.Cells.Item( zeile, spalte + 1 ).Value = vn
         pm.ActiveSheet.Cells.Item( zeile, spalte + 2 ).Value = n
         EXIT FOR
      END IF

      IF x = LEN( az ) THEN
         pm.ActiveSheet.Cells.Item( zeile, spalte + 2 ).Value = n 'Nur Nachname

         EXIT FOR
      END IF

   NEXT x

   zeile = zeile + 1

LOOP

SET pm = Nothing 'Verbindung aufheben




Nach oben
 Profil  
 
BeitragVerfasst: 25.02.2010 09:45:32 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 959
Der code
Code:
N = TRIM( n )
ist eigentlich überflüssig, es genügt
Code:
pm.ActiveSheet.Cells.Item( zeile, spalte + 2 ).Value = trim(n)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de