Discussion:
leerzeichen zählen, löschen und zelle verschieben
(zu alt für eine Antwort)
Marco
2008-06-05 08:42:02 UTC
Permalink
Hallo NG,

Ich bekomme als Export aus einem anderen Programm Textzeilen, die
unterschiedlich weit eingerückt sind (mit einer geraden Anzahl an
Leerzeichen). Ich möchte nun, dass die Zellen in Abhängigkeit von der
Anzahl Leerzeichen am Anfang des Strings nach rechts verschoben werden
(also wenn dem String zwei Leerstellen vorangehen um eine Zelle nach
rechts verschieben, bei vier Leerstellen um zwei Zellen, usw.).
Im Anschluss sollen noch die Leerstellen gelöscht werden.

Habe mich schon umgeschaut und das Zählen eines strings in einem
anderen sollte kein Problem sein. Es geht mir aber nur um die
Leerstellen am Anfang des strings. Spätere Leerstellen sollen nicht
berücksichtigt werden.

¦ A ¦ B ¦
¦
"strukturname" ¦
" Ebene 1a" ¦
" Ebene 2a" ¦
" Ebene 2b" ¦
" Ebene 1b" ¦

Die " gehören nicht zum string, sollen nur zeigen, dass es sich um
einen handelt.

soll werden zu:

¦ A ¦ B ¦ C ¦

"strukturname" ¦
¦"Ebene 1a" ¦
¦ ¦"Ebene 2a" ¦
¦ ¦"Ebene 2b" ¦
¦"Ebene 1b" ¦

Dank euch schonmal für die Hilfe.

Gruss
Marco
Peter Schleif
2008-06-05 09:07:09 UTC
Permalink
Post by Marco
"strukturname" ¦
" Ebene 1a" ¦
" Ebene 2a" ¦
" Ebene 2b" ¦
" Ebene 1b" ¦
Mit VBA ist es recht einfach.

Peter


Sub verschieben()
Dim z As Long

With CreateObject("VBScript.RegExp")
.Pattern = "(\ *)[^\ ].*"
For z = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(z, Int(Len(.Replace(Cells(z, "A"), "$1")) / 2) + 1) _
= Trim(Cells(z, "A"))
Next
End With
End Sub
Marco
2008-06-05 09:24:32 UTC
Permalink
Hallo Peter,
Post by Peter Schleif
Mit VBA ist es recht einfach.
[code]
das ist immer wieder der Wahnsinn, wie kurz ihr den Code hinbekommt
und wie schnell ihr antwortet.
Funktionieren tut er fabelhaft. Wenn jetzt noch die ursprünglichen
Strings gelöscht werden, falls die Zelle verschoben wird, dann bin ich
dir unendlich dankbar.
Alle weiteren Anpassungen kriege ich selber hin.

Dank dir und Gruss

Marco
Peter Schleif
2008-06-05 09:31:48 UTC
Permalink
Post by Marco
Wenn jetzt noch die ursprünglichen
Strings gelöscht werden, falls die Zelle verschoben wird
Ooops. Sorry. Du wolltest ja _Verschieben_ und nicht Kopieren. Da
hilft ein If...Then... nach dem Kopieren

Peter

Sub verschieben()
Dim z As Long

With CreateObject("VBScript.RegExp")
.Pattern = "(\ *)[^\ ].*"
For z = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(z, Int(Len(.Replace(Cells(z, "A"), "$1")) / 2) + 1) _
= Trim(Cells(z, "A"))
If .Replace(Cells(z,"A"),"$1") <> "" Then Cells(z,"A") = ""
Next
End With
End Sub
Marco
2008-06-05 10:38:06 UTC
Permalink
Hallo Peter!
Post by Peter Schleif
Sub verschieben()
Dim z As Long
With CreateObject("VBScript.RegExp")
.Pattern = "(\ *)[^\ ].*"
For z = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(z, Int(Len(.Replace(Cells(z, "A"), "$1")) / 2) + 1) _
= Trim(Cells(z, "A"))
If .Replace(Cells(z,"A"),"$1") <> "" Then Cells(z,"A") = ""
Next
End With
End Sub
Spitze!! Ich habe mit der createObject-Methode keine Erfahrung, habe
den Code noch ein wenig angepasst, so dass man for Aufruf des Makros
einfach den Bereich der Spalte markiert, für den man die Verschiebung
vornehmen möchte, vielleicht nutzt das mal wem...

Sub MMtoXL()
Dim z As Long
Dim s As Long

s = Selection.Column
With CreateObject("VBScript.RegExp")
.Pattern = "(\ *)[^\ ].*"
For z = Selection.Row To Selection.Rows.Count + Selection.Row
- 1
Cells(z, Int(Len(.Replace(Cells(z, s), "$1")) / 2) + s) =
Trim(Cells(z, s))
If .Replace(Cells(z, s), "$1") <> "" Then Cells(z, s) = ""
Next
End With
End Sub

Dank dir Peter für die Mühe und Hilfe.

gruss Marco
Peter Schleif
2008-06-05 12:15:15 UTC
Permalink
Post by Marco
Ich habe mit der createObject-Methode keine Erfahrung
Damit wird nur ein regulärer Ausdruck angelegt. Man könnte das auch
über einen Verweis einbinden. Aber CreateObject ist kürzer und das
Object wird am Ende des With-Blocks automatisch zerstört.
Post by Marco
habe
den Code noch ein wenig angepasst, so dass man for Aufruf des Makros
einfach den Bereich der Spalte markiert
Wenn Du den Bereich eh schon markiert hast, bietet es sich natürlich
an, die Selection mit For Each zu durchlaufen. Die Laufvariable
referenziert dann jeweils eine Zelle und man kann das Verschieben sehr
elegant mit der Cut-Methode durchführen. Das spart dann auch das
Löschen mit If..Then... Die neue Postion bestimmt man mit .Offset.

So. Nun aber genug gespielt. Hauptsache der Code tut was er soll.


Sub MMtoXL2()
Dim zelle As Range

With CreateObject("VBScript.RegExp")
.Pattern = "(\ *)[^\ ].*"
For Each zelle In Selection
zelle.Cut zelle.Offset(0,Int(Len(.Replace(zelle,"$1"))/2))
zelle = Trim(zelle)
Next
End With
End Sub
Eberhard Funke
2008-06-05 13:49:26 UTC
Permalink
Am Thu, 05 Jun 2008 11:07:09 +0200 schrieb Peter Schleif:

Hallo Peter,
Post by Peter Schleif
Sub verschieben()
Dim z As Long
With CreateObject("VBScript.RegExp")
.Pattern = "(\ *)[^\ ].*"
For z = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(z, Int(Len(.Replace(Cells(z, "A"), "$1")) / 2) + 1) _
= Trim(Cells(z, "A"))
Next
End With
End Sub
Du hast dieses CreateObject....Pattern hier schon oft gepostet. Mit der
"Hilfe" allein komme ich nicht weiter. Kennst Du einen Link, wo man dazu
eine ausführlichere Anleitung erhalten kann?
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Peter Schleif
2008-06-05 15:20:13 UTC
Permalink
Post by Eberhard Funke
Du hast dieses CreateObject....Pattern hier schon oft gepostet. Mit der
"Hilfe" allein komme ich nicht weiter. Kennst Du einen Link, wo man dazu
eine ausführlichere Anleitung erhalten kann?
With CreateObject("VBScript.RegExp") ist eine kurze Schreibweise für
die Instanziierung eines Objects, dass reguläre Audrücke repräsentiert
und verarbeitet. Etwas ausführlicher, mit Verweis und IntelliSense
geht es wie im Code unten. Da ich dich hier als Excel/VBA-Profi
kennengelernt habe, kannst Du damit bestimmt was anfangen.

Zu regulären Ausdrücke selbst, habe ich unten ein paar Links
zusammengestellt. Die Syntax in den Tutorials ist teilweise PHP bzw.
Perl. Aber grundsätzlich sind reguläre Ausdrücke _sprach- und
systemunabhängig_ und lassen sich (fast) immer problemlos nach VBA
übertragen.

Sub regex_intellisense()
'-----------------------------------------------------
'/Verweis: Microsoft VBScript Regular Expressions/
'-----------------------------------------------------
Dim regex As New RegExp

regex.Pattern = "(\ *)[^\ ].*"
MsgBox Len(regex.Replace(" Ebene 2a", "$1"))
End Sub


Recht kurzweilige Einführung:
http://www.danielfett.de/df_artikel_regex.html


Ausführlicher, präziser, aber auch wesentlich trockener:
http://www1.uni-hamburg.de/W.Wiedl/Skripte/CGI-Perl/Regulaere_Ausdruecke/REInhalt.htm


Mit Aufgaben und Lösungen zum Online-Lernen:
http://www.regenechsen.de/phpwcms/index.php?regex_allg


Ein Freeware(Donation)-Tool zum Entwickeln (nur Windows)
http://www.weitz.de/regex-coach/#install
Eberhard Funke
2008-06-05 18:40:00 UTC
Permalink
Am Thu, 05 Jun 2008 17:20:13 +0200 schrieb Peter Schleif:

Danke Peter,
..... Da ich dich hier als Excel/VBA-Profi
kennengelernt habe, kannst Du damit bestimmt was anfangen.
Das war eine nicht beabsichtigte und gefährliche Irreführung meinerseits,
denn alles, was ich von Excel & VBA weiß, habe ich mir hier in der NG
zusammengelesen. Da habe ich jetzt erst einmal ein dickes Brett zu bohren.

Schön, dass Du Dich doch nicht von der NG verabschiedet hast, denn
vermutlich werden da *einige* Fragen aufkommen.

Ich vermute mal, die Links werden/wurden jetzt nicht nur von mir
angeklickt.

Nochmals vielen Dank.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Eberhard Funke
2008-06-08 18:57:58 UTC
Permalink
Am Thu, 05 Jun 2008 17:20:13 +0200 schrieb Peter Schleif:

Hallo Peter,

wie schon in meiner ersten Antwort angedeutet hast Du meinen Kenntnisstand
gewaltig überschätzt. Nach zwei Tagen vergeblichen Rumstocherns in
verschiedenen Quellen fühle ich mich wie ausgelaugt und leicht deprimiert.

Es geht zunächst *nicht_um_die_Suchmuster*, sondern um Befehle /
Anweisungen, die ich nicht verstehe und zu denen ich auch nichts in der
Hilfe finde (s. u.).
Post by Peter Schleif
With CreateObject("VBScript.RegExp") ist eine kurze Schreibweise für
die Instanziierung eines Objects, dass reguläre Audrücke repräsentiert
und verarbeitet. Etwas ausführlicher, mit Verweis und IntelliSense
geht es wie im Code unten.
....mit dem ich nicht zurechtkomme. Ich nehme an, für den "Verweis:
Microsoft VBScript Regular Expressions" muss ich ergendetwas einfügen?
(denn wenn ich den Code so kopiere, kommt bei "Dim regex As New RegExp"
eine Fehlermeldung "benutzerdefinierter Typ nicht definiert".
Post by Peter Schleif
Da ich dich hier als Excel/VBA-Profi
kennengelernt habe, kannst Du damit bestimmt was anfangen.
s. o.
Post by Peter Schleif
Zu regulären Ausdrücke selbst, habe ich unten ein paar Links
zusammengestellt. Die Syntax in den Tutorials ist teilweise PHP bzw.
Perl. Aber grundsätzlich sind reguläre Ausdrücke _sprach- und
systemunabhängig_ und lassen sich (fast) immer problemlos nach VBA
übertragen.
Sub regex_intellisense()
'-----------------------------------------------------
'/Verweis: Microsoft VBScript Regular Expressions/
'-----------------------------------------------------
Dim regex As New RegExp
regex.Pattern = "(\ *)[^\ ].*"
MsgBox Len(regex.Replace(" Ebene 2a", "$1"))
End Sub
Ich habe einen früher von Dir (als Function) geposteten Code zum Testen
abgewandelt:

Sub Test2()
Dim text As String
Dim kuerzel
Dim treffer As Variant
Dim NeuObj As Object

text = "Ich Verstehe Nur Bahnhof"
Set NeuObj = CreateObject("VBScript.RegExp")
With NeuObj
.Pattern = "([A-Z])"
.Global = True
For Each treffer In .Execute(text)
Debug.Print treffer,
kuerzel = kuerzel & treffer '.SubMatches(0)
Next
End With
Debug.Print kuerzel
End Sub

Immerhin werden die Grossbuchstaben ausgegeben, und im überwachungsfenster
bekomme ich immerhin für NeuObj.Execute(text) angezeigt, dass es sich um
ein Objekt vom Typ MatchCollection handelt.
[Und was ist Submaches(0), das anscheinend nicht erforderlich ist?]

Aber bei einem anderen Code (Michael v. Fondern, 21,02.08 Beispiel 3) im
Thread "Suche Beispiel-Text für Regex" finde ich die Zeile:

Dim s As String, matchlist As MatchCollection, m As Match

die bei Start des Makro moniert wird: "benutzerdefiniertet Typ nicht
definiert". Oben (Überwachungsfenster) kennt VBA (?) das Objekt
MatchCollection, und dann wieder nicht?
(Weder in der Hilfe noch im Objektkatalog habe ich MatchCollection finden
können.)


Wie Du unschwer erkennen kannst, geht bei mir jetzt alles so durcheinander,
dass ich nicht einmal gezielte Fragen stellen kann.

Bei den ganzen Codeteilen wie
.Execute(....)
.Test(....)
.Global
usw. scheint es sich um Methoden/Eigenschaften zu handeln. Bei meiner
Rumsucherei finde ich hier und da in Bröckchen, mit dem ich, wenn auch ohne
Verständis, arbeiten kann; aber dieses Trial& Error ist mehr frustrierend
als hilfreich. Wie komme ich da mehr systematisch dran? Was ist das
überhaupt, VB (und nicht VBA)? --> Zurück zu Top-of-the-page!
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Claus Busch
2008-06-08 19:21:12 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
Microsoft VBScript Regular Expressions" muss ich ergendetwas einfügen?
(denn wenn ich den Code so kopiere, kommt bei "Dim regex As New RegExp"
eine Fehlermeldung "benutzerdefinierter Typ nicht definiert".
im VB-Editor Extras => Verweise und dort Microsoft VBScript Regular
Expressions aktivieren. Dann sollte es funktionieren.


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Thomas Ramel
2008-06-08 20:36:04 UTC
Permalink
Grüezi Eberhard

Eberhard Funke schrieb am 08.06.2008
Post by Eberhard Funke
wie schon in meiner ersten Antwort angedeutet hast Du meinen Kenntnisstand
gewaltig überschätzt. Nach zwei Tagen vergeblichen Rumstocherns in
verschiedenen Quellen fühle ich mich wie ausgelaugt und leicht deprimiert.
Es geht zunächst *nicht_um_die_Suchmuster*, sondern um Befehle /
Anweisungen, die ich nicht verstehe und zu denen ich auch nichts in der
Hilfe finde (s. u.).
Schau dir dazu doch mal die folgende Seite etwas näher an, Gerd Ewald hat
diese ganze Thematik für Einsteiger recht gut zusammengefasst:

http://www.regenechsen.de/phpwcms/index.php


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps
Peter Schleif
2008-06-09 06:17:29 UTC
Permalink
[... RegExp-Probleme ...]
Hallo Eberhard.

Am besten Du vergisst CreateObject("VBScript.RegExp") erst mal wieder
und verwendest statt dessen ...As New RegExp. Dazu musst Du den
Verweis aktivieren. Siehe Claus' Antwort.

Danach kannst Du das das RegExp-Objekt mit Intellisense untersuchen.
Es hat vier Eigenschaften und drei Methoden. Die beiden Eigenschaften
.IgnoreCase und .Multiline lasse ich jetzt erst mal weg.

Eigenschaften
--------------
.Pattern - legt das Suchmuster fest

.Global - legt fest, ob .Pattern nur einmal trifft oder ob alle
Text-Stellen gefunden werden auf die das Muster trifft

Methoden
---------
.Test - prüft ob das Muster auf den Text passt

.Replace - ersetzt den Text (falls der Ausdruck trifft) durch einen
anderen. Im Ersatz-Text steht der Inhalt der Klammern
in den Variablen $1,$2,$3 zur Verfügung

.Execute - liefert eine Collection _aller_ Treffer. Macht also
hauptsächlich mit .Global=True Sinn. Jeder Treffer enthält
eine Sub-Collection, deren Elemente den Inhalten der
Klammern entprechen - also ähnlich wie $1,$2,$3


In Excel verwende ich reguläre Ausdrücke auf zwei verschieden Arten:

(1) .Global=False mit .Test/.Replace
(2) .Global=True mit .Execute


Beispiel zu (1)
----------------
Der RegEx findet einen beliebigen Text der auf "Nur" endet, gefolgt
von einem Leerzeichen, gefolgt von einem weiteren beliebigen Text.
Falls das Muster trifft, werden die beiden Textteile zurückgegeben und
das Wort "noch" dazwischen eingefügt.

Sub regex1()
'-----------------------------------------------------
'/Verweis: Microsoft VBScript Regular Expressions/
'-----------------------------------------------------
Dim regex As New RegExp

Const TEXT = "Ich Verstehe Nur Bahnhof"

regex.Pattern = "(.*Nur) (.*)"

If regex.Test(TEXT) Then
Debug.Print regex.Replace(TEXT, "$1 noch $2")
End If
End Sub


Beispiel zu (2)
----------------
Der RegEx "[A-Z][a-z][a-z]" ist eine erweiterte Version deines
Beispiels. Er findet einen Großbuchstaben gefolgt zwei Kleinen. Die
Klammern im Pattern im Code dienen nur dazu, die Funktion der
SubMatches zu demonstrieren. Drei Klammerpaare - drei SubTreffer.

Den Typ MatchCollection kenne ich nicht - obwohl man ja leicht erraten
kann wozu er dient. :-) Ich brauchte ihn aber auch noch nie. Variant
tut es hier auch.

Ich habe noch ein STOP eingefügt, damit Du im Lokal- oder
Überwachnungsfenster die Struktur der Collection "matches" überprüfen
kannst.


Sub regex2()
'-----------------------------------------------------
'/Verweis: Microsoft VBScript Regular Expressions/
'-----------------------------------------------------
Dim regex As New RegExp
Dim match As Variant
Dim matches As Variant

Const TEXT = "Ich Verstehe Nur Bahnhof"

regex.Pattern = "([A-Z])(([a-z])[a-z])"
regex.Global = True

Set matches = regex.Execute(TEXT)

Stop

For Each match In matches
Debug.Print
Debug.Print "Treffer : "; match.Value
Debug.Print "1.Klammer: "; match.SubMatches(0)
Debug.Print "2.Klammer: "; match.SubMatches(1)
Debug.Print "3.Klammer: "; match.SubMatches(2)
Next
End Sub
Eberhard Funke
2008-06-09 10:42:25 UTC
Permalink
Am Mon, 09 Jun 2008 08:17:29 +0200 schrieb Peter Schleif:

Hallo Claus, Thomas und Peter,

ich fühle mich wie jemand, der sich beim Schwimmen zu weit rausgewagt hat
(und das auch noch bei Nebel) und dem drei freundliche Helfer einen
Rettungsring zugworfen haben (obwohl Peter deutlich gesagt hatte, wo der
Ring hängt, nur hatte ich's nicht verstanden).

Also erst mal herzlichen Dank!
Mit den Einzelheiten werde ich mich später beschäftigen.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Eberhard Funke
2008-06-10 14:51:45 UTC
Permalink
Am Mon, 09 Jun 2008 08:17:29 +0200 schrieb Peter Schleif:


Hallo Peter,

Dein "Kompendium" war eine wertvolle Starthilfe, nochmals vielen Dank.

Mir ist aufgefallen, dass man den Verweis auf "Microsoft VBScript Regular
Expressions" bei jeder neuen Mappe neu einrichen muss (also anders als z. B
bei dem Verweis auf VBA). Kann man den ohne grösseren Aufwand ebenfalls
permanent einrichten? (Die Reichweite meiner Kenntnisse kannst Du ja
inzwischen einschätzen.)
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Claus Busch
2008-06-10 15:12:34 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
Mir ist aufgefallen, dass man den Verweis auf "Microsoft VBScript Regular
Expressions" bei jeder neuen Mappe neu einrichen muss (also anders als z. B
bei dem Verweis auf VBA). Kann man den ohne grösseren Aufwand ebenfalls
permanent einrichten? (Die Reichweite meiner Kenntnisse kannst Du ja
inzwischen einschätzen.)
aktive Verweise gelten immer nur für die jeweilige Arbeitsmappe und
werden auch nur für diese Arbeitsmappe getrennt gespeichert.
Du könntest dir aber den Pfad zu diesem Verweis auf deinem System
anzeigen lassen und dann den Verweis über ein Makro setzen (der
angegebene Pfad gilt für mein System, deinen Pfad kannst du bei Extras
=> Verweise auslesen):

Sub Verweis()

Dim objVBE As Object

Set objVBE = Application.VBE.ActiveVBProject.References
On Error Resume Next

objVBE.AddFromFile _
"C:\windows\system32\vbscript.dll\3"

End Sub


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Eberhard Funke
2008-06-10 18:59:38 UTC
Permalink
Am Tue, 10 Jun 2008 17:12:34 +0200 schrieb Claus Busch:

Danke Claus,
Post by Claus Busch
aktive Verweise gelten immer nur für die jeweilige Arbeitsmappe und
werden auch nur für diese Arbeitsmappe getrennt gespeichert.
Das hatte ich mir fast gedacht...
Post by Claus Busch
Du könntest dir aber den Pfad zu diesem Verweis auf deinem System
anzeigen lassen und dann den Verweis über ein Makro setzen (der
angegebene Pfad gilt für mein System, deinen Pfad kannst du bei Extras
Sub Verweis()
Dim objVBE As Object
Set objVBE = Application.VBE.ActiveVBProject.References
On Error Resume Next
objVBE.AddFromFile _
"C:\windows\system32\vbscript.dll\3"
End Sub
Aber wie steht es mit den Verweisen auf z. B.
Visual Bassic for Application oder
Microsoft Excel 9.0 Object Library?
Diese Verweise gelten bei mir automatisch auch für alle neuen
Arbeitsmappen, brauchen also nicht jeweils neu eingerichtet zu werden.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Claus Busch
2008-06-10 19:07:24 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
Aber wie steht es mit den Verweisen auf z. B.
Visual Bassic for Application oder
Microsoft Excel 9.0 Object Library?
Diese Verweise gelten bei mir automatisch auch für alle neuen
Arbeitsmappen, brauchen also nicht jeweils neu eingerichtet zu werden.
die Verweise auf Excel- Office- und VBA-Bibliotheken sind da eine
Ausnahme. Sie werden *immer* benötigt und sind daher immer gesetzt und
können auch nicht deaktiviert werden.


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Eberhard Funke
2008-06-10 19:39:37 UTC
Permalink
Post by Claus Busch
die Verweise auf Excel- Office- und VBA-Bibliotheken sind da eine
Ausnahme. Sie werden *immer* benötigt und sind daher immer gesetzt und
können auch nicht deaktiviert werden.
Danke Claus,
alles klar.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Thomas Ramel
2008-06-10 20:05:56 UTC
Permalink
Grüezi Eberhard

Eberhard Funke schrieb am 10.06.2008
Post by Eberhard Funke
Post by Claus Busch
aktive Verweise gelten immer nur für die jeweilige Arbeitsmappe und
werden auch nur für diese Arbeitsmappe getrennt gespeichert.
Das hatte ich mir fast gedacht...
Du könntest dir auch eine Vorlage anlegen in der diese Verweise gesetzt
sind und dann je nach Anwendung eine Mappe erzeugen, die auf dieser Vorlage
beruht.

Die (für dich) wichtigsten könntest Du ja auch gleich in der 'Mappe.xlt'
setzen und diese in den Ordner XLSTART kopieren, dann haben alle neuen
Mappen diese Verweise gleich gesetzt.


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps
Eberhard Funke
2008-06-11 20:10:19 UTC
Permalink
Am Tue, 10 Jun 2008 22:05:56 +0200 schrieb Thomas Ramel:

Danke Thomas,
Post by Thomas Ramel
Du könntest dir auch eine Vorlage anlegen in der diese Verweise gesetzt
sind und dann je nach Anwendung eine Mappe erzeugen, die auf dieser Vorlage
beruht.
Die (für dich) wichtigsten könntest Du ja auch gleich in der 'Mappe.xlt'
setzen und diese in den Ordner XLSTART kopieren, dann haben alle neuen
Mappen diese Verweise gleich gesetzt.
Damit ist der Verweis festgenagelt :-)

Der Vorschlag von Claus ist dann vorteilhaft, wenn man einen Code postet,
bei dem der Verweis benötigt wird, man aber (Lerneffekt aus eigener
Erfahrung) nicht davon ausgehen kann, dass der Adressat dies auch weiss.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Peter Schleif
2008-06-12 04:28:13 UTC
Permalink
Post by Eberhard Funke
Der Vorschlag von Claus ist dann vorteilhaft, wenn man einen Code postet,
bei dem der Verweis benötigt wird
Das ist einer der Gründe, warum ich gerne CreateObject(...) verwende.
Man muss nicht immer auf den Verweis hinweisen. Beim Versenden von
Code per Mail oder ins Usenet spart man sich so einige Rückfragen.

Den anderen Grund hattest Du auch schon angeführt: In einer neuen
Mappe sind die Verweise nicht gesetzt. Thomas hatte ja schon auf
XLSTART/Mappe.xlt hingewiesen. Hat aber IMHO den Nachteil, dass dann
immer alle möglichen Verweise gesetzt sind, von denen man in der
aktuellen Mappe vielleicht nur einen braucht. Vielleicht könnte man
dem mit verschiedenen Vorlagen begegnen.

Aber solange man das Object noch nicht kennt, macht der Verweis
natürlich auf jeden Fall Sinn - zumindest wegen Intellisense.

Peter

Loading...