Witam mam dzisiaj ciekawe pytanie ponieważ potrzebuje macro do exel które pobierze dane wysyłane na port com np z arduino ma być to do magazynu energii lecz póki co używam bascom avr z kodem
$crystal = 16000000
$regfile = "m328pdef.dat"
Dim W As Word
Do
For W = 0 To 30
Print W
Wait 1
Next W
Loop
dane są wysyłane ale co zrobić aby exel je pobierał i np wpisywał odrazu do arkusza
dostałem od znajomego gotowy kod
Sub test()
Dim Pocz As Long
Dim CzasInterw As Long
Dim Koniec As Long
Dim LbaRekordow As Long
Dim TablDrogi() As Double
Dim i As Long
Dim InpVal As String
Const CzasPomiaru As Single = 40 '(czas w sekundach)
Const Interwal As Integer = 50 '(interwał w milisekundach)
Const WierszPoczatkowy As Long = 2 'nr wiersza od którego rozpoczniemy wpisywanie danych
LbaRekordow = CzasPomiaru * 1000 / Interwal
If LbaRekordow > Worksheets(1).Rows.Count - WierszPoczatkowy + 1 Then
MsgBox "To się nie zmieści w kolumnie arkusza!" & vbCr & vbCr & _
"Maksymalny czas pomiaru to " & _
Int((Worksheets(1).Rows.Count - WierszPoczatkowy + 1) * Interwal / 1000) & " sek.", _
vbCritical
Exit Sub
End If
i = 1
ReDim TablDrogi(i To LbaRekordow, 1 To 1)
MSComm1.CommPort = 1 '"COM1"
MSComm1.InBufferSize = 1024
MSComm1.Settings = "9600,e,7,1"
MSComm1.InputLen = 12
Pocz = GetTickCount
Koniec = Pocz + CzasPomiaru * 1000
'pętla odmierzająca CzasPomiaru
Do
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeText
Cmnd = "11:0"
MSComm1.Output = Cmnd
'pętla sprawdzająca bufor
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 12
InpVal = MSComm1.Input
TablDrogi(i, 1) = CInt(Mid(InpVal, 6, 4)) / 10
'albo
'TablDrogi(i, 1) = CDbl(CInt(Left(Right(InpVal, 6), 4)) / 10)
'pętla pilnująca interwału
CzasInterw = Pocz + Interwal
Do
DoEvents
Loop Until GetTickCount >= CzasInterw
i = i + 1
Pocz = Pocz + Interwal
Loop Until GetTickCount >= Koniec
Arkusz1.Cells(WierszPoczatkowy, 1).Resize(LbaRekordow) = TablDrogi
MsgBox "Czas minął"
End Sub
lecz podczas uruchomienia makra wyskakuje błąd z linią
MSComm1.CommPort = 1 '"COM1"
Będę bardzo wdzięczny za pomoc.