Zelleninhalt der selektierten Zellen auslesen

Fehlerberichte, Hilfe und Anregungen zu BasicMaker 2018 für Windows

Moderator: SoftMaker Team

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

Zelleninhalt der selektierten Zellen auslesen

Beitrag von andi4 » 11.01.2018 07:20:40

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: 1859
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes » 11.01.2018 09:30:25

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 » 11.01.2018 14:34:16

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: 1859
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes » 11.01.2018 18:36:25

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: 13
Registriert: 16.12.2017 20:39:00

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von klaus314 » 13.01.2018 23:18:38

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) 1747 mal betrachtet

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

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes » 14.01.2018 10:04:11

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: 13
Registriert: 16.12.2017 20:39:00

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von klaus314 » 16.01.2018 08:37:52

> 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: 1859
Registriert: 06.02.2007 14:01:47

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes » 18.01.2018 18:38:34

Ü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: 13
Registriert: 16.12.2017 20:39:00

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von klaus314 » 18.01.2018 20:13:06

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: 147
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Get » 18.01.2018 21:45:45

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) 1638 mal betrachtet

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

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Dewes » 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.

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: 147
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Get » 19.01.2018 10:54:11

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.

Trendpeiler
Beiträge: 362
Registriert: 28.08.2013 20:31:43

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Trendpeiler » 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.


@ 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: 147
Registriert: 08.12.2014 13:39:39
Kontaktdaten:

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von Get » 19.01.2018 18:13:48

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

FFF
Beiträge: 928
Registriert: 11.06.2013 22:30:18

Re: Zelleninhalt der selektierten Zellen auslesen

Beitrag von FFF » 19.01.2018 18:31:57

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
emC 7 & SM 2016 rev766.0331 @ W8.1/64
SM 2018 rev. 933/0620/64, klassisches Menu
16GB Ram; Intel-"Onboard" Grafik, 2560x1440 Monitor 100% Darstellungsgröße
LaserJet 1200 per USB via Fritzbox 6490.

Antworten

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