Zelleninhalt der selektierten Zellen auslesen

andi4
Beiträge: 7
Registriert: 03.04.2017 13:00:35

Zelleninhalt der selektierten Zellen auslesen

Beitrag von andi4 »

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


.
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes »

versuche es mal mit

Code: Alles auswählen

pm.ActiveSheet.Selection(1, 1).Value
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.
Ein Befehl for each funktionert leider auch nicht.
Doch, sieh mal in der Hilfe unter "Anweisungen und Funktionen" nach

Unter "Kontrollstrukturen" findest du alle sonstigen möglichen Schleifen.
andi4
Beiträge: 7
Registriert: 03.04.2017 13:00:35

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von andi4 »

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.
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes »

Kleines Beispiel, habe in einer Tabelle die Zahl 1-10 eingegeben, hier das Script

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
hier die Ausgabe
1
2
3
4
5
6
7
8
9
Programm erfolgreich abgeschlossen.
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.

Zu For each kann ich so nichts sagen manngels Erfahrung, ich benutze andere Schleifen.
klaus314
Beiträge: 14
Registriert: 16.12.2017 20:39:00

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von klaus314 »

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
Dateianhänge
PlanMaker.png
PlanMaker.png (58.05 KiB) 8763 mal betrachtet
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes »

wenn die selektierten Zellen isoliert sind
was verstehst du in diesem Zusammenhang unter "isoliert"

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
klaus314
Beiträge: 14
Registriert: 16.12.2017 20:39:00

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von klaus314 »

> 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
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes »

Übrigens es gibt keinen Grund wieso diese drei (oder beliebig viele) selektierten Zellen in einer Zeile oder in einer Rehe stehen sollten.
Nein, den gibt es auch nicht, das war meiner eigenen Bequemlichkeit geschuldet. Trotzdem muss man dem Script den Weg vorgeben, den es gehen soll.

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.
klaus314
Beiträge: 14
Registriert: 16.12.2017 20:39:00

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von klaus314 »

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 :)
Benutzeravatar
Get
Beiträge: 231
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Get »

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.

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
Ein Beispiel: Das Skript liest hier die grün markierten Zellen.
auswahl_auslesen.JPG
auswahl_auslesen.JPG (19.64 KiB) 9235 mal betrachtet
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
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes »

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

Code: Alles auswählen

For Each Zelle In Selection
Ich hatte vor einigen Jahren schon auf dieses Manko hingewiesen.
Benutzeravatar
Get
Beiträge: 231
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Get »

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.
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:
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	
Diese Anweisung vor "set pm = Nothing" eintragen.
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
Trendpeiler
Beiträge: 527
Registriert: 28.08.2013 20:31:43

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Trendpeiler »

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
Benutzeravatar
Get
Beiträge: 231
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Get »

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.
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:

Code: Alles auswählen

For Each Cell in Range
	If cell.marked = True Then
		"Mache was"
	End If
End ForEach
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
Das ist erledigt. Das neue Skript:

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
FFF
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 2328
Registriert: 11.06.2013 22:30:18

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von FFF »

Get hat geschrieben: 19.01.2018 18:13:48 Selection ist in PM doch meines Wissens in PM immer ein rechteckiger Bereich (minimal eien Zelle) und enthält nicht zufällig verteile Zellen.
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/
Antworten

Zurück zu „BasicMaker 2018 für Windows“