04.11.2016, 16:53
(Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2016, 19:21 von WillWissen.
Bearbeitungsgrund: Makro in Codetags gesetzt
)
Hallo miteinander,
ich habe ein Problem und hoffe ihr könnt mir ein bisschen auf die Sprünge helfen.
Ich habe mit Hilfe einer Anleitung und vielem hin und her eine OPC Connection zwischen Excel und dem ABB Freelance Engineering geschaffen. Die Verbindung steht und ich kann auch Werte lesen und diese im ExcelSheet verändern. So weit so gut. Nun habe ich bei meinem Code das Problem, das wenn ich weitere Items hinzufüge immer wieder den Code erweitern muss das er diese auch liest und ich sie bearbeiten kann.
Ich hätte es nun gerne so, das wenn ich in Spalte A egal ob in Zeile 27 oder 1000 eine Messstelle eintrage das ich diese auch sofort lesen und schreiben kann ohne immer den Code zu verändern.
Das Problem liegt also hauptsächlich im markierten Bereich (denke ich :20: )
Ich hoffe mir kann hier jemand weiter helfen.
Liebe Grüße
Lukas
ich habe ein Problem und hoffe ihr könnt mir ein bisschen auf die Sprünge helfen.
Ich habe mit Hilfe einer Anleitung und vielem hin und her eine OPC Connection zwischen Excel und dem ABB Freelance Engineering geschaffen. Die Verbindung steht und ich kann auch Werte lesen und diese im ExcelSheet verändern. So weit so gut. Nun habe ich bei meinem Code das Problem, das wenn ich weitere Items hinzufüge immer wieder den Code erweitern muss das er diese auch liest und ich sie bearbeiten kann.
Code:
Option Explicit ' every variable has to be declared
Option Base 1 ' every Array starts on Index 1
Private MyOPCServer As OPCServer
Private WithEvents MyOPCGroup As OPCGroup
Private MyOPCItems() As OPCItem
Private Sub cmdConnect__Click()
Dim i As Integer
Set MyOPCServer = New OPCServer
'connect the OPC Server
Call MyOPCServer.Connect(Cells(4, 2))
'add one OPC Group
Set MyOPCGroup = MyOPCServer.OPCGroups.Add("Gruppe1")
'apply for DataChange
MyOPCGroup.IsSubscribed = True
MyOPCGroup.UpdateRate = 500
'add Items
ReDim MyOPCItems(6)
For i = 1 To 6
Set MyOPCItems(i) = MyOPCGroup.OPCItems.AddItem(Cells(20 + i, 1), 20 + i)
Next i
'set buttons
End Sub
Private Sub cmdDisconnect__Click()
'disconnect the OPC Server
Call MyOPCServer.Disconnect
Set MyOPCServer = Nothing
'set buttons
End Sub
Private Sub cmdWrite__Click()
Dim shandles(6) As Long 'parameter value
Dim Values(6) As Variant 'parameter value
Dim Errors() As Long 'return value
Dim i As Integer
Dim n As Interior
[color=#339933]shandles(1) = MyOPCItems(1).serverhandle[/color]
[color=#339933]shandles(2) = MyOPCItems(2).serverhandle[/color]
[color=#339933]shandles(3) = MyOPCItems(3).serverhandle[/color]
[color=#339933]shandles(4) = MyOPCItems(4).serverhandle[/color]
[color=#339933]shandles(5) = MyOPCItems(5).serverhandle[/color]
[color=#339933]shandles(6) = MyOPCItems(6).serverhandle[/color]
'shandles(7) = MyOPCItems(7).serverhandle
For i = 1 To 6
Values(i) = Cells(20 + i, 8)
If Values(i) = "" Then Values(i) = 0
Call MyOPCGroup.SyncWrite(6, shandles, Values, Errors)
Next i
End Sub
Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, _
ByVal NumItems As Long, _
ClientHandles() As Long, _
ItemValues() As Variant, _
Qualities() As Long, _
TimeStamps() As Date)
Dim i As Integer
For i = 1 To NumItems
Cells(ClientHandles(i), 6) = ItemValues(i)
Next i
End Sub
Ich hätte es nun gerne so, das wenn ich in Spalte A egal ob in Zeile 27 oder 1000 eine Messstelle eintrage das ich diese auch sofort lesen und schreiben kann ohne immer den Code zu verändern.
Das Problem liegt also hauptsächlich im markierten Bereich (denke ich :20: )
Ich hoffe mir kann hier jemand weiter helfen.
Liebe Grüße
Lukas