Makroproblem

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Allerdings sind meine Excel-Makrokentnisse nicht wirklich von Vorteil
Naja, warscheinlich nicht mal in Excel, denn Sowas:

Code: Alles auswählen

For i = 2 To i = 5
läuft auch dort nicht. :wink:

Auch weiß ich nicht ob das:

Code: Alles auswählen

MsgBox "Inhalt von S: ist "&row, 16, "was'n'das?"


in Deiner Absicht liegt, denn auch Excel gäbe Dir hier nur den Wert der Variablen row zurück und keinesfalls den aktuellen Zellwert, row ist String-Variable und kein Objekt.

Also:

Code: Alles auswählen

Sub Main 

Dim counter As Integer, i As Integer 
Dim row As String 

For i = 2 To 5 
   row = thisComponent.getCurrentController().getActiveSheet().getCellRangeByName("S" & i).String 
   thisComponent.getCurrentController().getActiveSheet().getCellRangeByName("S" & i).String = row & "hallo" 
   MsgBox "Inhalt von S: ist "&row, 16, "was'n'das?" 
Next i 

End Sub
Vermutlich aber:

Code: Alles auswählen

Sub Main 

Dim counter As Integer, i As Integer 
Dim row As Object

For i = 2 To 5 
   row = thisComponent.getCurrentController().getActiveSheet().getCellRangeByName("S" & i)
   thisComponent.getCurrentController().getActiveSheet().getCellRangeByName("S" & i).String = row.String & "hallo" 
   MsgBox "Inhalt von S: ist "&row.String, 16, "was'n'das?" 
Next i 

End Sub


Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Du verstehst mich falsch

Das da oben hat nix mit Excel zu tun
Nein, das tue ich nicht.
by the way: die for-Schleife funktioniert in Excel übrigens wunderbar (natürlich ohne das zweite 'i =') und gehört eigentlich zum Standard dort, aber das mal nur ganz am Rande:p


und was heißt dieser Unsinn - das ich im Irrtum bin wenn ich falschen Code als solchen benenne, weil der Code eigentlich nicht falsch ist sondern richtig wenn man ihn ändert. Nee, ernsthaft, wenn ich schreibe:

Code: Alles auswählen

Fohr i = 3 To 7
ist das nicht eigentlich richtig und funktioniert wunderbar wenn ich nur das h streiche, sondern es ist zunächst einfach falsch.
Ich finde es nicht toll wenn ich eine falsche Code-Zeile mit einem Zwinkern kommentiere und dann als Antwort zwischen den Zeilen lese das die ja 'eigentlich' nicht falsch ist und ich anscheinend von VBA keine Ahnung habe ... oder nimmst Du ernsthaft an ich hätte die Schleife ansich bemängelt - natürlich bezog sich das auf das zweite i =

Es ist jedoch zunächst genau diese falsch formulierte Schleife die Dein Makro nicht funktionieren läßt und nichts weiter.
Das Du statt .String .Value verwandt hast ist ein Detail was Du nicht wissen konntest, nur der eigentliche Fehler war die Schleifenformulierung.
Ich will mich hier nicht über Excel unterhalten, sondern mein Problem beseitigen


das ist völlig klar, nur warum postest Du einen nicht funktionierenden Code, wenn Du garnicht wissen willst wie der funktionieren würde - Nein, Du bist ja sogar darauf eingegangen:
Jedoch tut sich nix beim Ausführen des Makros
das hört sich dann aber schon so an als wenn Du zunächst wissen wolltest wie Du das Makro zu Laufen bringst.

Da ich das Makro nun hingeschrieben habe, hast Du genau das was Du brauchst und mußt nur statt Spalte "S" Spalte A bearbeiten, mehr StarBasic-Spezifisches ist nicht nötig, denn das:
Wie entferne ich nun alle Sonderzeichen aus dem String und das erste Zeichen?
funktioniert durch einfache Stringmanipulation wie auch in VBA möglich, da ist nichts Calc-Spezifisches.

Mithin beispielsweise insgesamt:

Code: Alles auswählen

Sub Main 
Dim i As Integer 
Dim row As Object 
For i = 2 To 50 
	row = thisComponent.getCurrentController().getActiveSheet().getCellRangeByName("A" & i) 
	x = row.String
	z = ""
	For j = LEN(x) to 1 Step -1
		y = RIGHT(x,j)
		y1 = LEFT(y,1)
		Select Case ASC(y1)
			Case 48 To 57
				y1 = y1
			Case 65 To 90
				y1 = y1
			Case 97 To 122
				y1 = y1
			Case Else
				y1 = ""
		End Select
		z = z & y1
	Next j
	thisComponent.getCurrentController().getActiveSheet().getCellRangeByName("A" & i).String = RIGHT(z, LEN(z)-1)
Next i 
End Sub
wobei alles ab:

Code: Alles auswählen

z = ""
bis:

Code: Alles auswählen

Next j
in VBA völlig gleich ginge, so das Dir dieser Teil überhaupt nicht hätte schwer fallen können (denn Du sagst ja wohl das Du VBA-Kenntnisse hast) und den Rest hatte ich ja bereits gepostet.



Gruß
Stephan
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey ckoepp,
In VBA gibts übrigens neben "Suchen und Ersetzen" auch ein "Leerzeichen-Trimmer" sowie eine "Substring"-Funktion.
Na ja, diese Funktionen findest du in OOo Basic selbstverständlich auch, nur war deine Frage nicht nach Leerzeichen gerichtet, sondern allgemein nach Sonderzeichen und Leerzeichen. Die Trimmfunktionen (übrigens wie bei Excel) entfernen Leerzeichen vorne und hinten - nicht unbedingt in der Mitte.
Und "Sonderzeichen" gibt es viele - wenn du dir den UNI-code betrachtest ;-)
Und eine Substiring Funktion findet eine (meist die erste) Stelle eines Suchstrings - wenn du aber alle Zeichen entfernen willst und nicht weisst, wie viele Zeichen du hast und wieviel vorkommen können, ist das Zeichenweise analysieren immer noch der beste Weg - auch in VBA.
Aber im Ergebnis soielt es keine Rolle, welchen Weg man als Programmierer einschlägt - es gibt sicher viele, die zum Ziel führen.

In dem Sinne, viele Grüße

Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten