Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: mexico67 am April 09, 2012, 11:15:48 Vormittag

Titel: Office 2003: Arbeitsblatt mit Schnittstelle verbinden
Beitrag von: mexico67 am April 09, 2012, 11:15:48 Vormittag
Hallo Office-Gemeinde,
da man ja Excel auch "Zweckentfremden" ( Schaltpläne erstellen)kann, wende ich mich mit meinem Projekt vertrauendsvoll an Euch und hoffe, daß Ihr mit helfen könnt.
Projekt: Habe mit mehreren Arbeitsblättern Schaltpläne erstellt ( Hausinstallation )
Nun habe ich gedacht, daß es doch möglich sein sollte, daß sich eine gezeichnete Linie sich farblich( z.B. von blau nach rot) verändert, wenn an Com1 oder altem Druckerport (Zentronix) oder auch eventuell über einen RS 232-USB-Adapter) an einem PIN "high"=rot(12V+) und "low"= blau(0Volt) anliegt.
Habe schon mehrere Versuche unternommen, die führten aber leider zu keinem Ergebnis.
Wäre sehr Dankbar, wenn ich zu einem positiven Ergebnis kommen könnte.

Viele Grüße

Mexico67
Titel: Antw:Office 2003: Arbeitsblatt mit Schnittstelle verbinden
Beitrag von: Officer am April 09, 2012, 12:09:17 Nachmittag
Hallo mexico67,

wie du Deine Daten über die Schnittstellen nach Excel bekommst, kann ich dir an dieser Stelle leider nicht sagen.
Wie Du aber abhänig von einem Wert in einer Zelle (im Beispiel Zelle E4) eine Linie einfärben kannst, habe ich in der beigefügten Beispieldatei kurz erläutert. Wenn Du in Zelle E4 entweder rot oder blau auswählst wird die Linie entsprechend eingefärbt. Wenn du etwas anderes in die Zelle eingibst, wird die Linie schwarz eingefärbt.

Dieser Code muss in das Code-Modul des jeweiligen Arbeitsblatts, im Beispiel Tabelle1:

Code: Visual Basic
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Address = "$E$4" Then einfaerben
  3. End Sub
  4.  

Diesen Code zum einfärben der Linien kommt in ein Code-Modul.

Code: Visual Basic
  1. Sub einfaerben()
  2.  
  3. With ActiveSheet.Shapes("Line 1")
  4.   If ActiveSheet.Range("E4").Value = "rot" Then
  5.     .Line.ForeColor.SchemeColor = 10
  6.   ElseIf ActiveSheet.Range("E4").Value = "blau" Then
  7.     .Line.ForeColor.SchemeColor = 12
  8.   Else
  9.     .Line.ForeColor.SchemeColor = 0
  10.   End If
  11. End With
  12.  
  13. End Sub
  14.  

Das komplette Beispiel findest du in der beigefügten Beispieldatei.

Gruß

Officer
Titel: Antw:Office 2003: Arbeitsblatt mit Schnittstelle verbinden
Beitrag von: Ricco am April 09, 2012, 13:12:29 Nachmittag
Hallo mexico67,

Officer hat schon gezeigt, wie man die gewünschten Linien produziert. Fehlen tut nur noch die Hardwareanbindung, d. h. wie liest man denn nun Signale vom seriellen Port / Parallelport ein.

Nehmen wir den Parallelport LPT1. Windows bietet - wie so oft, wenn's ins Eingemachte geht -, keine bordeigenen Mittel an. Du brauchst eine externe DLL, die Du auf http://logix4u.net/parallel-port findest. Sie wurde ehedem von Jan Axelson für Windows 95 geschrieben, dann aber für neuere Betriebssysteme bis Windows XP angepasst. Die Datei sollte im Windows Systemverzeichnis abgelegt werden. (Auf die Bitversion achten!) Sie sollte auch unter Windows 7 laufen, - falls man denn überhaupt noch einen Parallelport am Rechner hat.

Als nächstes musst Du die Basisadresse des Parallelports auf Deinem Rechner finden. Normalerweise ist das &H378, aber sicherheitshalber bitte im Gerätemanager unter den Eigenschaften des Ports nachsehen.

Die DLL bietet nur zwei Prozeduren an, Inp und Out:

Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Du benötigst nur Inp, die zu Beginn des Projekts wie oben deklariert werden muss. Danach kann sie wie eine normale Funktionsprozedur aufgerufen werden.

Der Eingabewert ergibt sich dann wie folgt:

Dim inpval as Integer, iPortAddress as Integer, iStatus as Integer
iPortAddress=CInt(&H378)
inpval = Inp(iPortAddress)

Der Status der i-ten Datenleitung ergibt sich aus der iStatus = (inpval and 2^i), also etwa für Pin 13 das Bit 4.

Abfragen tut man das im geeigneten/gewünschten Tabellen-Event.

MfG,
Ricco.
Titel: Office 2003: Antw:Office 2003: Arbeitsblatt mit Schnittstelle verbinden
Beitrag von: mexico67 am April 09, 2012, 14:46:01 Nachmittag
hallo Officer & Ricco,

recht herzlichen Dank für Eure Hilfe. Werde demnächst alles ausprobieren.


Viele Grüße

Mexico67