von Collector » Do, 30.11.2006 23:27
Hi folks
Es hat geklappt, Danke nochmal. Ohne Eure Hilf wäre ich noch Monate entfernt gewesen.
Werde mal den Code mit meinen vielleicht übertriebenen Erläuterungen hier reinstellen
Natürlich werde ich noch Feintuning betreiben.
Doch konnte nicht mehr warten.
Code: Alles auswählen
Option Explicit 'Hier erzwinge ich, das alle Variablen, die in der
'Prozedur vorkommen, explizit deklariert Die (ausdrück-
'lich bekannt gemacht)werden müssen.
'Um Fehler zu vermeiden und die Lesbarkeit zu erhö-
'hen, sollte man sich angewöhnen, die Variablen am
'Anfang zu definieren. Es ist aber nicht unbedingt
'notwendig.
'Der Befehl "Option Explicit" muss am Anfang eines
'Programms stehen.
'-----------------------------------------------------------------------
'---------- Hier werden öffentliche (lokale) Variablen definiert--------
'-----------------------------------------------------------------------
'Öffentliche Variablen werden im Kopfbereich eines
'Moduls mit dem Schlüsselwort Dim definiert. Sie
'stehen allen Modulen in ihrer Bibliothek zur Ver-
'fügung.
'Eine lokale Variable steht nur solange zur Verfüg-
'ung, wie das verknüpfte Makro ausgeführt wird, da-
'nach wird die Variable zurückgesetzt.
dim oSheet as object 'die Variable "oSheet" soll das Tabellenbl. als
'Objekt aufnehmen.
'Die Variable Objekt ist nicht nur ein Datentyp,
'es werden noch die benötigten Bearbeitungsfunk-
'tionen mitgeliefert
'-----------------------------------------------------------------------
'----------------------- Hauptprogramm ------------------------------
'-----------------------------------------------------------------------
sub Hauptprogramm 'Hier startet das Programm bzw. die Prozedur (Macro)
'mit seinen Unterprogrammen (Prozeduren oder Funk-
'tionen)
init 'In dieser Prozedur sollen die Variablen deklariert
'werden.
hole_Zeichenkette 'Mit dieser Zeile wird die hole_Zeichenkette
'Prozedur aufgerufen.
end sub 'Hier endet das Hauptprogramm
'-----------------------------------------------------------------------
'------------------ Init Prozedur ------------------------------------
'-----------------------------------------------------------------------
sub init
'der Variablen "oSheet" wird ein objekt übergeben,näm-
'lich thisComponent,damit sprechen
oSheet = thisComponent.sheets(0) 'wir das aktuelle Dokument an und
'mit dem Zusatz .sheets(0)wird auf
'das erste Tabellenblatt verwiesen.
end sub 'Ende von der Prozedur init
'-----------------------------------------------------------------------
'--------------------- hole Zeichenkette Prozedur ---------------------
'-----------------------------------------------------------------------
sub hole_Zeichenkette
dim z as long 'die z Variable dient als Zählvariable
dim sZellString as String 'genauer gesagt für die Zeilen,es wird
'"long" benutzt weil es mehr als 32767
'Zeilen sind, die untersucht werden sollen. Variable "sZellString"
'soll später die Zeichenkette(String)die in der Zeile vorkommt auf-
'nehmen.
z = 1 ' in der 1.Zeile soll die Suche starten. |
do until oSheet.getCellRangeByName("D" & z).string = ""
'die do-until-loop Schleife wird so lange ausgeführt bis eine
'bestimmte Bedingung (""=leer) nicht erfüllt is.Mit dem Anhang
'.getCellRangeByName lade ich den Inhalt der Zelle direkt über
'den Namen in unserem Beispiel D1
sZellString = oSheet.getCellRangeByName("D" & z).string
'der gefundene Zellinhalt wird der Variable sZellString übergeben.
vergl_Zeichenkette (sZellString, z) 'hier benutze ich die Funktion
'"vergl_Zeichenkette" und über-
'gebe die benötigten Parameter(sZellString,i)
z = z+1 'die Zeilennummer wird um eins erhöht.
loop 'die Schleife beginnt von vorn.
end sub 'Ende der Prozedur hole_Zeichenkette
'-------------------------------------------------------------------------------------
'------------------------ vergleiche Zeichenkette -----------------------------------
'-------------------------------------------------------------------------------------
sub vergl_Zeichenkette(sStr as string, iZeile as long) 'Wenn die Prozedur bzw. Funktion
'aufgerufen bzw. gestartet wird
'müssen zwei Parameter schon vor-
'vorhanden sein. In unserem Fall bekommt die Variable
'"sStr" die Zeichenkette von sZellString und die Variable "iZeile"
'den Wert von z
dim aLand() 'hier wird die Variablen "aLand" zu einem dynamischen Datenfeld
'defeniert. Das bedeutet, das erst später die Anzahl der Indexe
'bestimmt wird.
dim aSpalte() 'jedes Land bekommt eine Spalte zu gewiesen.
dim p as integer 'die Laufvariable "p" soll für den Peak bzw. Platz sein
dim l as integer 'die Laufvariable "l" soll für die Länder sein
dim sTeilstring as String 'das wird die gesuchte Zeichenkette sein
aLand = Array("D", "USA", "GB", "I", "NL", "F", "S", "CH") 'hier bekommen die Variablen
'ihre Zuweisungen bzw.werden
'die Arrays gefüllt aLand(0)=D; aLand(1)=USA; aLand(2)=GB; usw.
'somit wäre aLand(7) dimensioniert
aSpalte = Array("E", "F", "G", "H", "I", "J", "K", "L") 'jedes Land bekommt später eine Spalte
'zugewiesen.
for p = 1 to 100 'diese for-next Schleife soll 100 mal durchlaufen werden, in unserem
'Fall für die Charplätze von 1 bis 100
for l = 0 to uBound(aLand) 'diese for-next Schleife soll 8 mal (Länderanzahl
'durch uBound ermittelt) durchlaufen.
sTeilstring = " " & aLand(l) & " " & p 'hier bekommt die Variable die Zeichenkette die
'gesucht wird
if instr(sStr,sTeilstring) then
oSheet.getCellRangeByName(aSpalte(l) & iZeile).string = p
'mit instr wird die Zeichenkette "sStr" auf ein Teilstring
'1.ersten Durchlauf wäre dies " D 1" untersucht
'wenn (then) gefunden führe
'oSheet.getCellRangeByName(aSpalte(l) & iZeile).string = p
'hier soll der Wert p bei Angabe des Zellenname (E1)in die
'Zelle geschrieben werden.
end if
next l
next p
end sub
Die Formatierung sieht hier nicht so toll aus, muss mal nachschauen warum das so ist. Viel Spass damit.
So, dies ist das Programm von Toxitom, was von mir als Anfänger kommentiert und nach meinem Geschmack verändert wurde.
Ich hoffe meine Kommentare sind nicht gar so falsch.
Collector
Hi folks
Es hat geklappt, Danke nochmal. Ohne Eure Hilf wäre ich noch Monate entfernt gewesen.
Werde mal den Code mit meinen vielleicht übertriebenen Erläuterungen hier reinstellen
Natürlich werde ich noch Feintuning betreiben.
Doch konnte nicht mehr warten.
[code]Option Explicit 'Hier erzwinge ich, das alle Variablen, die in der
'Prozedur vorkommen, explizit deklariert Die (ausdrück-
'lich bekannt gemacht)werden müssen.
'Um Fehler zu vermeiden und die Lesbarkeit zu erhö-
'hen, sollte man sich angewöhnen, die Variablen am
'Anfang zu definieren. Es ist aber nicht unbedingt
'notwendig.
'Der Befehl "Option Explicit" muss am Anfang eines
'Programms stehen.
'-----------------------------------------------------------------------
'---------- Hier werden öffentliche (lokale) Variablen definiert--------
'-----------------------------------------------------------------------
'Öffentliche Variablen werden im Kopfbereich eines
'Moduls mit dem Schlüsselwort Dim definiert. Sie
'stehen allen Modulen in ihrer Bibliothek zur Ver-
'fügung.
'Eine lokale Variable steht nur solange zur Verfüg-
'ung, wie das verknüpfte Makro ausgeführt wird, da-
'nach wird die Variable zurückgesetzt.
dim oSheet as object 'die Variable "oSheet" soll das Tabellenbl. als
'Objekt aufnehmen.
'Die Variable Objekt ist nicht nur ein Datentyp,
'es werden noch die benötigten Bearbeitungsfunk-
'tionen mitgeliefert
'-----------------------------------------------------------------------
'----------------------- Hauptprogramm ------------------------------
'-----------------------------------------------------------------------
sub Hauptprogramm 'Hier startet das Programm bzw. die Prozedur (Macro)
'mit seinen Unterprogrammen (Prozeduren oder Funk-
'tionen)
init 'In dieser Prozedur sollen die Variablen deklariert
'werden.
hole_Zeichenkette 'Mit dieser Zeile wird die hole_Zeichenkette
'Prozedur aufgerufen.
end sub 'Hier endet das Hauptprogramm
'-----------------------------------------------------------------------
'------------------ Init Prozedur ------------------------------------
'-----------------------------------------------------------------------
sub init
'der Variablen "oSheet" wird ein objekt übergeben,näm-
'lich thisComponent,damit sprechen
oSheet = thisComponent.sheets(0) 'wir das aktuelle Dokument an und
'mit dem Zusatz .sheets(0)wird auf
'das erste Tabellenblatt verwiesen.
end sub 'Ende von der Prozedur init
'-----------------------------------------------------------------------
'--------------------- hole Zeichenkette Prozedur ---------------------
'-----------------------------------------------------------------------
sub hole_Zeichenkette
dim z as long 'die z Variable dient als Zählvariable
dim sZellString as String 'genauer gesagt für die Zeilen,es wird
'"long" benutzt weil es mehr als 32767
'Zeilen sind, die untersucht werden sollen. Variable "sZellString"
'soll später die Zeichenkette(String)die in der Zeile vorkommt auf-
'nehmen.
z = 1 ' in der 1.Zeile soll die Suche starten. |
do until oSheet.getCellRangeByName("D" & z).string = ""
'die do-until-loop Schleife wird so lange ausgeführt bis eine
'bestimmte Bedingung (""=leer) nicht erfüllt is.Mit dem Anhang
'.getCellRangeByName lade ich den Inhalt der Zelle direkt über
'den Namen in unserem Beispiel D1
sZellString = oSheet.getCellRangeByName("D" & z).string
'der gefundene Zellinhalt wird der Variable sZellString übergeben.
vergl_Zeichenkette (sZellString, z) 'hier benutze ich die Funktion
'"vergl_Zeichenkette" und über-
'gebe die benötigten Parameter(sZellString,i)
z = z+1 'die Zeilennummer wird um eins erhöht.
loop 'die Schleife beginnt von vorn.
end sub 'Ende der Prozedur hole_Zeichenkette
'-------------------------------------------------------------------------------------
'------------------------ vergleiche Zeichenkette -----------------------------------
'-------------------------------------------------------------------------------------
sub vergl_Zeichenkette(sStr as string, iZeile as long) 'Wenn die Prozedur bzw. Funktion
'aufgerufen bzw. gestartet wird
'müssen zwei Parameter schon vor-
'vorhanden sein. In unserem Fall bekommt die Variable
'"sStr" die Zeichenkette von sZellString und die Variable "iZeile"
'den Wert von z
dim aLand() 'hier wird die Variablen "aLand" zu einem dynamischen Datenfeld
'defeniert. Das bedeutet, das erst später die Anzahl der Indexe
'bestimmt wird.
dim aSpalte() 'jedes Land bekommt eine Spalte zu gewiesen.
dim p as integer 'die Laufvariable "p" soll für den Peak bzw. Platz sein
dim l as integer 'die Laufvariable "l" soll für die Länder sein
dim sTeilstring as String 'das wird die gesuchte Zeichenkette sein
aLand = Array("D", "USA", "GB", "I", "NL", "F", "S", "CH") 'hier bekommen die Variablen
'ihre Zuweisungen bzw.werden
'die Arrays gefüllt aLand(0)=D; aLand(1)=USA; aLand(2)=GB; usw.
'somit wäre aLand(7) dimensioniert
aSpalte = Array("E", "F", "G", "H", "I", "J", "K", "L") 'jedes Land bekommt später eine Spalte
'zugewiesen.
for p = 1 to 100 'diese for-next Schleife soll 100 mal durchlaufen werden, in unserem
'Fall für die Charplätze von 1 bis 100
for l = 0 to uBound(aLand) 'diese for-next Schleife soll 8 mal (Länderanzahl
'durch uBound ermittelt) durchlaufen.
sTeilstring = " " & aLand(l) & " " & p 'hier bekommt die Variable die Zeichenkette die
'gesucht wird
if instr(sStr,sTeilstring) then
oSheet.getCellRangeByName(aSpalte(l) & iZeile).string = p
'mit instr wird die Zeichenkette "sStr" auf ein Teilstring
'1.ersten Durchlauf wäre dies " D 1" untersucht
'wenn (then) gefunden führe
'oSheet.getCellRangeByName(aSpalte(l) & iZeile).string = p
'hier soll der Wert p bei Angabe des Zellenname (E1)in die
'Zelle geschrieben werden.
end if
next l
next p
end sub
[/code]
Die Formatierung sieht hier nicht so toll aus, muss mal nachschauen warum das so ist. Viel Spass damit.
So, dies ist das Programm von Toxitom, was von mir als Anfänger kommentiert und nach meinem Geschmack verändert wurde.
Ich hoffe meine Kommentare sind nicht gar so falsch.
Collector