Zelleninhalt der selektierten Zellen auslesen
Zelleninhalt der selektierten Zellen auslesen
Hi,
ich möchte gerne den Zelleninhalt der selektierten Zellen auslesen.
Versucht habe ich es mit
pm.ActiveSheet.Selection.Item(1, 1)
pm.ActiveSheet.Selection.Item(2, 1)
pm.ActiveSheet.Selection.Item(3, 1)
- Angenommen ich habe zwei Zellen C1 und C2 markiert, dann liefert Item(3, 1) den Wert von C3 zurück, obwohl dieser nicht markiert ist.
- Ein Befehl for each funktionert leider auch nicht.
- Ein weiteres Problem: wenn die selektierten Zellen nicht zusammenhängen, dann bekomme ich die Fehlermeldung:
Invalid procedure call or argument
.
ich möchte gerne den Zelleninhalt der selektierten Zellen auslesen.
Versucht habe ich es mit
pm.ActiveSheet.Selection.Item(1, 1)
pm.ActiveSheet.Selection.Item(2, 1)
pm.ActiveSheet.Selection.Item(3, 1)
- Angenommen ich habe zwei Zellen C1 und C2 markiert, dann liefert Item(3, 1) den Wert von C3 zurück, obwohl dieser nicht markiert ist.
- Ein Befehl for each funktionert leider auch nicht.
- Ein weiteres Problem: wenn die selektierten Zellen nicht zusammenhängen, dann bekomme ich die Fehlermeldung:
Invalid procedure call or argument
.
Re: Zelleninhalt der selektierten Zellen auslesen
versuche es mal mit
Damit wird der Inhalt der Zelle ausgelesen, in der der Cursor steht. Wenn du statt 1 eine Variable nimmst, die weiter zählt, können mehrere Zellen bis zu einer selbst festgelegten Grenze ausgelesen werden.
Unter "Kontrollstrukturen" findest du alle sonstigen möglichen Schleifen.
Code: Alles auswählen
pm.ActiveSheet.Selection(1, 1).Value
Doch, sieh mal in der Hilfe unter "Anweisungen und Funktionen" nachEin Befehl for each funktionert leider auch nicht.
Unter "Kontrollstrukturen" findest du alle sonstigen möglichen Schleifen.
Re: Zelleninhalt der selektierten Zellen auslesen
Natürlich habe ich ein Variable genommen, aber er liest nicht die selektierten Zellen sondern nimmt einfach den Offset der ersten selektierten Zelle.
Nein For Each funktioniert nicht, wenn die selektierten Zellen nicht zusammenhängen.
Nein For Each funktioniert nicht, wenn die selektierten Zellen nicht zusammenhängen.
Re: Zelleninhalt der selektierten Zellen auslesen
Kleines Beispiel, habe in einer Tabelle die Zahl 1-10 eingegeben, hier das Script
hier die Ausgabe
Zu For each kann ich so nichts sagen manngels Erfahrung, ich benutze andere Schleifen.
Code: Alles auswählen
Dim pm as Object
dim i as integer
Set pm = CreateObject("PlanMaker.Application") ' Verbindung aufbauen
pm.Application.Visible = True
i = 1
DO while i < 10
print pm.ActiveSheet.Selection(i, 1).Value
i = i + 1
loop
d.h. die Ausgabe liefert die gewünschten Werte. Falls du noch Probleme hast, wäre es am einfachsten, wenn du den Code hier einstellen würdest, dann kann man besser testen.1
2
3
4
5
6
7
8
9
Programm erfolgreich abgeschlossen.
Zu For each kann ich so nichts sagen manngels Erfahrung, ich benutze andere Schleifen.
Re: Zelleninhalt der selektierten Zellen auslesen
Nein das geht nicht, wenn die selektierten Zellen isoliert sind, dann gibt es folgende Fehlermeldung:
Unbenannt 1 : Error in line: 10 - Invalid procedure call or argument
Siehe Bild
Unbenannt 1 : Error in line: 10 - Invalid procedure call or argument
Siehe Bild
- Dateianhänge
-
- PlanMaker.png (58.05 KiB) 8910 mal betrachtet
Re: Zelleninhalt der selektierten Zellen auslesen
was verstehst du in diesem Zusammenhang unter "isoliert"wenn die selektierten Zellen isoliert sind
Aufgrund fehlender Informationen bin ich davon ausgegangen, dass vertikal ausgelesen werden soll. Selbstversständlich geht das auch horizontal und auch in Sprüngen.
Anbei ein neues Script, das die Tabelle deines Beispiels ausliest. Der Cursor sollte dann auf B2 stehen. Man kann auch eine Abfrage einbauen, ab welcher Zelle das Script starten soll, aber dann wird das Script umfangreicher.
Code: Alles auswählen
im pm as Object
Set pm = CreateObject("PlanMaker.Application") ' Verbindung aufbauen
pm.Application.Visible = True
spalte = pm.ActiveSheet.Selection.Column
zeile = pm.ActiveSheet.Selection.row
DO while spalte < 10
print pm.ActiveSheet.Cells.Item(zeile,spalte).Value
spalte = spalte + 2
loop
Re: Zelleninhalt der selektierten Zellen auslesen
> was verstehst du in diesem Zusammenhang unter "isoliert"
Schau dir doch einfach das Bild an, was ich gepostet habe, dort siehst du drei selektierte Zellen (diese werden blau markiert), die nicht verbunden sind.
Übrigens es gibt keinen Grund wieso diese drei (oder beliebig viele) selektierten Zellen in einer Zeile oder in einer Rehe stehen sollten.
Zelle 1 kann also z.B. D4
Zelle 2 kann also z.B. F8
Zelle 3 kann also z.B. E20 sein, usw
Schau dir doch einfach das Bild an, was ich gepostet habe, dort siehst du drei selektierte Zellen (diese werden blau markiert), die nicht verbunden sind.
Übrigens es gibt keinen Grund wieso diese drei (oder beliebig viele) selektierten Zellen in einer Zeile oder in einer Rehe stehen sollten.
Zelle 1 kann also z.B. D4
Zelle 2 kann also z.B. F8
Zelle 3 kann also z.B. E20 sein, usw
Re: Zelleninhalt der selektierten Zellen auslesen
Nein, den gibt es auch nicht, das war meiner eigenen Bequemlichkeit geschuldet. Trotzdem muss man dem Script den Weg vorgeben, den es gehen soll.Übrigens es gibt keinen Grund wieso diese drei (oder beliebig viele) selektierten Zellen in einer Zeile oder in einer Rehe stehen sollten.
Man kann eine Markierung (Selelction) in einer Tabelle setzen in einem definierten Bereich (Range) oder auch manuell. Leider gibt es aber keine Möglichkeit, bei jeder einzelnen Zelle die Eigenschaft "markiert" oder nicht abzufragen. Meines Wissens kann das BM nicht.
Re: Zelleninhalt der selektierten Zellen auslesen
Das kann Excel leider besser, da sagt man einfach:
for each bla in selection
z.B. -> bla.high = 10 // damit wird die Höhe aller selektierten Zellen geändert
next
Wäre doch ein prima Feature für Planmaker
for each bla in selection
z.B. -> bla.high = 10 // damit wird die Höhe aller selektierten Zellen geändert
next
Wäre doch ein prima Feature für Planmaker
Re: Zelleninhalt der selektierten Zellen auslesen
Ein Basic Skript als Workaround
1. Die auszulesenden Zellen markieren und ihnen dann mit [Format]-[Zeichen]-[Hintergrundfarbe] eine Farbe geben, die nicht transparent ist.
2. Den interessierenden Bereich insgesamt markieren.
3. Das Skript "auswahl_auslesen.bas" starten.
Ein Beispiel: Das Skript liest hier die grün markierten Zellen.
1. Die auszulesenden Zellen markieren und ihnen dann mit [Format]-[Zeichen]-[Hintergrundfarbe] eine Farbe geben, die nicht transparent ist.
2. Den interessierenden Bereich insgesamt markieren.
3. Das Skript "auswahl_auslesen.bas" starten.
Code: Alles auswählen
Sub auswahl_auslesen
Dim pm as Object
Set pm = CreateObject("PlanMaker.Application")
pm.Application.Visible = True
Dim rngZahlen as Object
Dim row, col as Integer
Dim swert
Dim farbe as long
Set rngZahlen = pm.ActiveSheet.Selection
For row = 1 To rngZahlen.Rows.Count
For col = 1 to rngZahlen.Columns.Count
swert = rngZahlen.Cells.Item(row, col).Value
farbe = rngZahlen.Cells.Item(row, col).Font.BColor
If farbe <> -1 then
MsgBox swert
End If
Next col
Next row
Set pm = Nothing
End Sub
Gerhard Etzel
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
Re: Zelleninhalt der selektierten Zellen auslesen
Grundsätzlich eine gute Idee. Eine ähnliche Idee hatte ich auch schon, habe dann aber davon abgesehen. Meine Überlegung war wenn ich in einer größeren Tabelle, und davon kann man ja ausgehen, 100 Zellen selektiere und zusätzlich noch mit einem Merkmal versehen soll, ist das eine abendfüllende Beschäftigung.
Nein, in BM müsste wie in VBA eingeführt werden
Ich hatte vor einigen Jahren schon auf dieses Manko hingewiesen.
Nein, in BM müsste wie in VBA eingeführt werden
Code: Alles auswählen
For Each Zelle In Selection
Re: Zelleninhalt der selektierten Zellen auslesen
Das Argument würde für mich nur zählen, wenn ich die selektierten Zellen jede einzeln noch einmal mit einer Farbe versehen müsste. Aber ich habe z. B. die 100 Zellen markiert, dann brauche ich maximal 4 Mausklicks zusätzlich, um allen markierten Zellen die Farbe zuzuweisen:Dewes hat geschrieben: ↑19.01.2018 10:22:48 Grundsätzlich eine gute Idee. Eine ähnliche Idee hatte ich auch schon, habe dann aber davon abgesehen. Meine Überlegung war wenn ich in einer größeren Tabelle, und davon kann man ja ausgehen, 100 Zellen selektiere und zusätzlich noch mit einem Merkmal versehen soll, ist das eine abendfüllende Beschäftigung.
1. [Zeichen]
2. [Hintergrundfarbe]
3. Farbe wählen
4. [OK]
Oder noch einfacher: Den Befehl [Hintergrundfarbe] in die Schnellzugriffsleiste legen.
Dann muss ich nur:
1. Den Befehl anklicken
2. gewünschte Farbe anklicken
fertig.
Übrigens habe ich das Skript noch ergänzt: Am Ende werden alle Farbmarkierungen wieder auf "transparent" gesetzt:
Code: Alles auswählen
pm.ActiveSheet.Selection.Font.BColor = -1
Gerhard Etzel
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
-
- Beiträge: 527
- Registriert: 28.08.2013 20:31:43
Re: Zelleninhalt der selektierten Zellen auslesen
Hallo.
@ Dewes: Dem Vorschlag "For Each Zelle In Selection" auch in PlanMaker einzuführen, würde ich hiermit gern zustimmen.
@ Get: Dein Script hat den Vorteil, dass die '100 Zellen' farbig hervorgehoben sind und dies auch so bleibt.
So kann später noch mal nachgesehen werden, welche Zellen Berücksichtigung fanden.
Die Einbindung eines Dialogs in das Script wäre vielleicht noch überlegenswert.
Der Dialog könnte in etwa so aussehen: "Sollen alle farbigen Zellen wieder auf transparent gesetzt werden? Ja / Nein".
Viele Grüße
Trendpeiler
@ Dewes: Dem Vorschlag "For Each Zelle In Selection" auch in PlanMaker einzuführen, würde ich hiermit gern zustimmen.
@ Get: Dein Script hat den Vorteil, dass die '100 Zellen' farbig hervorgehoben sind und dies auch so bleibt.
So kann später noch mal nachgesehen werden, welche Zellen Berücksichtigung fanden.
Die Einbindung eines Dialogs in das Script wäre vielleicht noch überlegenswert.
Der Dialog könnte in etwa so aussehen: "Sollen alle farbigen Zellen wieder auf transparent gesetzt werden? Ja / Nein".
Viele Grüße
Trendpeiler
Re: Zelleninhalt der selektierten Zellen auslesen
Ob das so einfach geht? Selection ist in PM doch meines Wissens in PM immer ein rechteckiger Bereich (minimal eien Zelle) und enthält nicht zufällig verteile Zellen. Wichtig wäre meines Erachtens, für jede Zelle das Merkmal markiert lesbar zu machen, wobei ich davon ausgehe, dass dieses Merkmal sowieso existiert. Dann könnte das im Prinzip so aussehen:Trendpeiler hat geschrieben: ↑19.01.2018 15:00:58 Hallo.
@ Dewes: Dem Vorschlag "For Each Zelle In Selection" auch in PlanMaker einzuführen, würde ich hiermit gern zustimmen.
Code: Alles auswählen
For Each Cell in Range
If cell.marked = True Then
"Mache was"
End If
End ForEach
Das ist erledigt. Das neue Skript:Trendpeiler hat geschrieben: ↑19.01.2018 15:00:58 @ Get: Dein Script hat den Vorteil, dass die '100 Zellen' farbig hervorgehoben sind und dies auch so bleibt.
So kann später noch mal nachgesehen werden, welche Zellen Berücksichtigung fanden.
Die Einbindung eines Dialogs in das Script wäre vielleicht noch überlegenswert.
Der Dialog könnte in etwa so aussehen: "Sollen alle farbigen Zellen wieder auf transparent gesetzt werden? Ja / Nein".
Viele Grüße
Trendpeiler
Code: Alles auswählen
Sub auswahl_auslesen
Dim pm as Object
Set pm = CreateObject("PlanMaker.Application")
pm.Application.Visible = True
Dim rngZahlen as Object
Dim row, col, antw as Integer
Dim swert
Dim farbe as long
Set rngZahlen = pm.ActiveSheet.Selection
For row = 1 To rngZahlen.Rows.Count
For col = 1 to rngZahlen.Columns.Count
swert = rngZahlen.Cells.Item(row, col).Value
farbe = rngZahlen.Cells.Item(row, col).Font.BColor
If farbe <> -1 then
MsgBox swert
End If
Next col
Next row
antw = MsgBox("Alle Zellen wieder Transparent machen?", MB_YESNO + MB_ICONQUESTION, "Zellen auslesen")
If antw = IDYES Then
pm.ActiveSheet.Selection.Font.BColor = -1
End If
Set pm = Nothing
End Sub
Gerhard Etzel
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
Autor (gerhard-etzel-buch.de). Meine Bücher wurden alle mit Textmaker geschrieben!
Windows 10, SMO NX Universal 64 Bit Prof.
Intel(R) Core(TM) i5, 16 GB Ram
Re: Zelleninhalt der selektierten Zellen auslesen
Nun ja, nachdem man per STRG-Klick beliebige Zellen auswählen kann, und PM das intern ja verwalten muß, sollte es nicht zu aufwendig sein, diese "ragged selection" erreichbar zu machen. Diese dann a la For Each abzugrasen, bietet sich an.
Mit freundlichem Gruß
Karl
SM 2018 rev. 982/0109/64, klassisches Menu @ W8.1/64 /Deutsch/Deutsch // emC 7
SM 2024NX Nightly, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276; Samsung SSD 840pro
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6591.
Empfehlung für supereinfache Bildschirmvideos: https://www.screentogif.com/
Karl
SM 2018 rev. 982/0109/64, klassisches Menu @ W8.1/64 /Deutsch/Deutsch // emC 7
SM 2024NX Nightly, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276; Samsung SSD 840pro
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6591.
Empfehlung für supereinfache Bildschirmvideos: https://www.screentogif.com/