Comprehensive CAN monitor for Windows® and its add-ins: Plotter, CANdb Import, Instruments Panel, and J1939
-
Zeusbey2
- Posts: 2
- Joined: Fri 15. Nov 2013, 13:11
Post
by Zeusbey2 » Fri 29. Nov 2013, 13:58
Hallo leute,
ich habe ein Problem bei transmission von Daten über send/empfang fenster oder makro zu Excel.
1.ich bin ne Anfänger
2.Bei Makro durchführung öffnen sich die Excel schon aber die Spalten sind leer
so sieht mein Programme aus:
Code: Select all
Dim RcvMsg
Set RcvMsg = MyClient.Messages.Add
Dim Spannung, Strom, power, nowstop, old_Spannung, old_current
' row counter for sheet
Dim g_CellCount
PrintToOutputWindow "create Excel connection"
Set objXL = CreateObject("Excel.Application")
objXL.Visible = True ' make it visible...also possible to bring to top
Set wbXL = objXL.Workbooks.Add()' ' New sheet
Set sXL = wbXL.Worksheets(1) ' goto Sheet1
' write Header
sXL.Cells(1,1) = "PEAK-System Technik PCAN-Explorer5 VBS Excel Demo (c)2013 PEAK Darmstadt"
sXL.Cells(3,1) = "No."
sXL.Cells(3,2) = "Spannung"
sXL.Cells(3,3) = "Strom"
sXL.Cells(3,4) = "Power"
Set Spannung = RcvMsg.ID.Data(5)
Set Strom = Signals("Strom")
g_CellCount=4
nowstop = false
Set power = Signals("Power")
If power Is Nothing Then
' Signal not found, create and initialize new one
Set power = Signals.Add("Power")
power.DataType = peDataTypeFloat
End If
PrintToOutputWindow "Start record"
While nowstop = false
'power.Value = Spannung.Value * Strom.Value
Wait(10) ' Prevent 100% CPU load
' WriteToExcel if a value is changed
if(old_Spannung <> Spannung.Value or old_Strom <> Strom.Value) Then
PrintToOutputWindow "write row in Excel"
' write directly into Excel sheet
sXL.Cells(g_CellCount,1) = g_CellCount-3
sXL.Cells(g_CellCount,2) = Spannung.Value
sXL.Cells(g_CellCount,3) = Strom.Value
sXL.Cells(g_CellCount,4) = power.Value
old_Spannung = Spannung.Value
old_Strom = Strom.Value
g_CellCount=g_CellCount+1
Last edited by
M.Gerber on Fri 29. Nov 2013, 14:29, edited 1 time in total.
Reason: [code]-Tag eingefügt wegen Übersichtlichkeit
-
PEAK-Support
- Sales & Support

- Posts: 1646
- Joined: Fri 10. Sep 2010, 19:34
Post
by PEAK-Support » Fri 29. Nov 2013, 14:52
Hmm...sieht aus wie ein Teil meines Bsp. Codes zum Speichern von CAN Daten in Excel...
Aber auch nur ein Teil davon. Bitte mal das
original Bsp. nehmen und durchlesen und
verstehen - dann editieren und sich in VBS einlesen.
Was sollen wir denn jetzt mit den paar Zeilen Code anfangen
Wer soll denn darauf eine Antwort geben
Was geht denn nicht, und wie soll man wissen was nicht geht wenn 2/3 des Codes fehlt

--------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
-
Zeusbey2
- Posts: 2
- Joined: Fri 15. Nov 2013, 13:11
Post
by Zeusbey2 » Mon 2. Dec 2013, 09:58
Hallo,
Danke für den Rückmeldung.ich will mein RcsMsg(Hexa) von CAN als Excel datei(dezimal) erstellen und zwar mit Verschieden IDs. ich versuche gerade dass es mir überhaupt was anzeigt danach kann ich es convertiren.
Code: Select all
Dim RcvMsg
Set RcvMsg = MyClient.Messages.Add
Dim Spannung, Strom, power, nowstop, old_Spannung, old_current
' row counter for sheet
Dim g_CellCount
PrintToOutputWindow "create Excel connection"
Set objXL = CreateObject("Excel.Application")
objXL.Visible = True ' make it visible...also possible to bring to top
Set wbXL = objXL.Workbooks.Add()' ' New sheet
Set sXL = wbXL.Worksheets(1) ' goto Sheet1
' write Header
sXL.Cells(1,1) = "PEAK-System Technik PCAN-Explorer5 VBS Excel Demo (c)2013 PEAK Darmstadt"
sXL.Cells(3,1) = "No."
sXL.Cells(3,2) = "Spannung"
sXL.Cells(3,3) = "Strom"
sXL.Cells(3,4) = "Power"
Set Spannung = RcvMsg.ID
Set Strom = Signals("Strom")
g_CellCount=4
nowstop = false
Set power = Signals("Power")
If power Is Nothing Then
' Signal not found, create and initialize new one
Set power = Signals.Add("Power")
power.DataType = peDataTypeFloat
End If
PrintToOutputWindow "Start record"
While nowstop = false
'power.Value = Spannung.Value * Strom.Value
Wait(10) ' Prevent 100% CPU load
' WriteToExcel if a value is changed
if(old_Spannung <> Spannung.Value or old_Strom <> Strom.Value) Then
PrintToOutputWindow "write row in Excel"
' write directly into Excel sheet
sXL.Cells(g_CellCount,1) = g_CellCount-3
sXL.Cells(g_CellCount,2) = Spannung.Value
sXL.Cells(g_CellCount,3) = Strom.Value
sXL.Cells(g_CellCount,4) = power.Value
old_Spannung = Spannung.Value
old_Strom = Strom.Value
g_CellCount=g_CellCount+1
' if 200 values writte, save file and close Excel (we do not chekc if file exist)
if g_CellCount > 200 Then
PrintToOutputWindow "reach the 200 value limit - noe save file (be sure you have rights to this folder!)"
wbXL.SaveAs("d:\temp\PowerExcel_Data.xls")
' quit Excel
objXL.Application.Quit
' set global stop flag to true
nowstop=true
End If
End If
Wend ' if stop flag set ...bye bye
PrintToOutputWindow "End Macro"
End Sub
Last edited by
M.Gerber on Tue 3. Dec 2013, 12:33, edited 1 time in total.
Reason: [Code]-Tag
-
PEAK-Support
- Sales & Support

- Posts: 1646
- Joined: Fri 10. Sep 2010, 19:34
Post
by PEAK-Support » Mon 2. Dec 2013, 10:18
Sie haben nun
unser Bsp. gepostet - schön das es Ihnen gefällt - aber das es funktioniert wissen wir ja (wenn man die passende Symboldatei damit verwendet)
Es wird aber auch nur in das Excel Sheet geschrieben wenn sich der Strom oder Spannungswert zum Vorwert geändert hat.
Code: Select all
' WriteToExcel if a value is changed
if(old_Spannung <> Spannung.Value or old_Strom <> Strom.Value) Then
PrintToOutputWindow "write row in Excel"
' write directly into Excel sheet
sXL.Cells(g_CellCount,1) = g_CellCount-3
sXL.Cells(g_CellCount,2) = Spannung.Value
sXL.Cells(g_CellCount,3) = Strom.Value
sXL.Cells(g_CellCount,4) = power.Value
old_Spannung = Spannung.Value
old_Strom = Strom.Value
g_CellCount=g_CellCount+1
Wenn dann 200 Zeilen geschrieben wurden, also 200 mal ein anderer Wert eingetragen wurde, wird die Tabelle gespeichert.
Code: Select all
' if 200 values writte, save file and close Excel (we do not chekc if file exist)
if g_CellCount > 200 Then
PrintToOutputWindow "reach the 200 value limit - noe save file (be sure you have rights to this folder!)"
wbXL.SaveAs("d:\temp\PowerExcel_Data.xls")
' quit Excel
objXL.Application.Quit
' set global stop flag to true
nowstop=true
End If
Soweit die Info was die paar Zeilen Code machen. Aber ich denke das man Grundlagen im Programmieren haben sollte um Scripte selber zu schreiben - paste & copy wird auf Dauer nichts. Und wir können keinen Grundlagenkurs im VBS programmieren mit unserem Support abdecken.
Deswegen: Thread closed...

--------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------