Seite 1 von 1
copy - aber nur, was sichtbar ist
Verfasst: Mo, 14.02.2005 12:13
von Hago
Hallo,
ich habe ein Makro, mit dem können bestimmte Zeilen einer Tabelle unsichtbar gemacht werden, wenn in eine bestimmte Zelle ein "x" geschrieben wird.
Ich habe ein zweites Makro, mit dem die Inhalte der Tabelle kopiert und in eine neue Tabelle einfügt werden.
Das Problem ist, daß immer alles kopiert wird. Ich hätte aber gerne, daß nur kopiert wird, was sichtbar ist.
Kann mir da jemand helfen?
Gruß, Hago
Verfasst: Di, 15.02.2005 08:01
von Toxitom
Hey Hago,
wenn du das mit einem Makro machst, dann arbeitest du mit dem Objektmodell - da ist immer alles drin. Der Controller steuert das View-Objekt, da können Zellen ausgeblendet werden.
Zwei Varianten:
1. Du besorgst dir die Information aus dem View-Objekt über den Controller -> ist aber wahrscheinlich der umständlichere und schwierigere Weg.
2. Du analysierst per Makro (Schleifen) alle Zellinhalte und übernimmst nur die, wo kein X drin ist -> ist meiner Ansicht schneller und einfacher zu lösen, eventuell aber (aufgrund der Schleifen) langsamer in der Ausführung. Kommt auf die Anzahl der Zellen an.
Gruss
Thomas
Verfasst: Di, 15.02.2005 16:49
von Hago
Hi Thomas,
ich danke Dir.
Die Zeit ist in diesem Fall kein Problem. - Ich werd's mal versuchen, obwohl ich ja ein absoluter Basic-Laie bin.
D.h., wenn Du mir noch so ein wenig zeigen könntest, wie die Schleife auszusehen hat, wäre ich sehr dankbar.
Gruß, Hago
Verfasst: Mi, 16.02.2005 18:04
von Toxitom
Hallo Hago,
D.h., wenn Du mir noch so ein wenig zeigen könntest, wie die Schleife auszusehen hat, wäre ich sehr dankbar.
Jo, wenn ich ein wenig Zeit habe, poste ich dir einene Anfang.
Aber - was für Tabellen meist du eigentlich? Texttabellen oder Calc?
Damit der richtig Code rauskommt....
Gruss
Thomas
Verfasst: Mi, 16.02.2005 23:26
von Hago
Hallo Thomas,
Calc-Tabellen meine ich.
Eine hat 170 Zeilen, die anderen haben ca. 40 Zeilen.
Unten habe ich das Makro angehängt, das die Zeilen aus- und einblendet.
Inzwischen habe ich einiges an Basic-Tutorials durchgeackert, aber ich denke nicht, daß ich das so auf die Schnelle hin bekomme.
Würde mich sehr freuen.
Gruß, Hago
................................
Sub Filterein_aus()
Dok = ThisComponent
Controller = Dok.CurrentController
Blatt = Controller.ActiveSheet
Cursor =Blatt.createCursor()
Cursor.GotoEndofUsedArea(True)
EndZeile = Cursor.getRangeAddress.EndRow
For I = 0 To EndZeile
Zelle = Blatt.getCellByPosition(8,I)
Wert = Zelle.String
If Wert = "x" or Wert = "X" then
Zeile = Blatt.rows(I)
If Zeile.IsVisible then
Zeile.IsVisible = False
else Zeile.IsVisible = true
end if
End If
next
End Sub
Verfasst: Sa, 19.02.2005 16:03
von Hago
Hi,
ich glaub's fast selbst nicht, aber ich hab' da was zuasmmengestupft, das mehr oder weniger macht, was ich will:
............................
sub Kopieren3
myDoc = ThisComponent
oTabelle1 = myDoc.Sheets(0)
oTabelle2 = myDoc.Sheets(1)
For j=4 to 10
Zeile = oTabelle1.rows(j)
If Zeile.IsVisible then
For i=1 to 6
x = oTabelle1.getCellByPosition(i,j).String
oTabelle2.getCellByPosition(i-1,j-4).String = x
Next i
End if
Next j
end sub
.................................
Das Problem ist jetzt noch, daß ich in Tabelle2 an Stelle der ausgeblendeten Zeile eine leere Zeile bekomme. Ich möchte da aber lieber gar keine Zeile.
Kann mir da jemand etwas helfen?
Gruß, Hago
Verfasst: Sa, 19.02.2005 16:30
von Toxitom
Hallo Hago,
ich hab zwar immer noch wenig Zeit, aber da hab ich was für dich:
Das Problem ist jetzt noch, daß ich in Tabelle2 an Stelle der ausgeblendeten Zeile eine leere Zeile bekomme. Ich möchte da aber lieber gar keine Zeile.
Du bauchst du zwei Schleifen:
die erste, die alle Inhalte (außer den nicht gewünschten) in einen Array einliest, eine Zeite, die den Array dann in die Zellen schreibt.
Hier ein Beispiel, dass du dann natürlich entsprechend umstricken musst:
Code: Alles auswählen
sub Zufall
Dim aListe1(5), aListe2(5) ' die Listen mit den Namen - Arrays a 6 Elem
Dim i%, n%, zz%
Dim oDoc as object, oTab as Object
oDoc = ThisComponent
oTab = oDoc.sheets.getsheetByIndex(0)
REM Schleife zum auslesen der Namen
For i = 0 to 5
aListe1(i) = oTab.getCellRangeByName("B" & i+2).string
next
REM Zufallszahl erzeugen, und Werte umkopieren
n = 0
Do
zz = CINt(RND() * 5) 'liefert ganze Zufallszahlen von 0 bis 5
if aListe1(zz) <> "###" then
aListe2(n) = aListe1(zz)
aListe1(zz) = "###" 'bereits übernommene Werte markieren
n = n+1
loop until n >= 6
REM die Neue Liste eintragen
for i = 0 to 5
oTab.getCellRangeByName("C" & i+2).string = aListe2(i)
next
end sub
Dieser Code liest Namen aus einer Liste ein, "würfelt" sie durch und gibt sie wieder aus. Das dürfte dein Problem in etwas beschreiben.
Gruss
Thomas
Verfasst: Do, 24.02.2005 13:10
von Hago
Geschafft! Endlich.
Das ist jetzt dabei rausgekommen:
Code: Alles auswählen
sub Kopieren4
myDoc = ThisComponent
oTabelle1 = myDoc.Sheets(0)
oTabelle2 = myDoc.Sheets(1)
jn=1
For j=7 to 25
Zeile = oTabelle1.rows(j)
If not Zeile.IsVisible then
jn=jn-1
j = j+1
else
For i=2 to 7
oTabelle2.getCellByPosition(i-2,jn).String = oTabelle1.getCellByPosition(i,j).String
Next i
End if
jn=jn+1
Next j
end sub
Falls mir jemand noch was Schlaues sagen kann, um es zu vereinfachen... - ich bin immer empfänglich.
Gruß, Hago