• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

makro excel do pobieranie danych z portu com

42 Warsaw Coding Academy
+1 głos
437 wizyt
pytanie zadane 16 stycznia 2022 w SQL, bazy danych przez danehcan Obywatel (1,170 p.)

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.

1 odpowiedź

0 głosów
odpowiedź 16 stycznia 2022 przez VBService Ekspert (256,600 p.)
edycja 16 stycznia 2022 przez VBService

Podobne pytania

+1 głos
1 odpowiedź 249 wizyt
pytanie zadane 27 września 2021 w Algorytmy przez msth32 Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 331 wizyt
pytanie zadane 26 listopada 2020 w Visual Basic przez ZenekMarjewka Nowicjusz (120 p.)
+1 głos
1 odpowiedź 484 wizyt
pytanie zadane 25 września 2020 w Visual Basic przez doeg Początkujący (430 p.)

93,395 zapytań

142,388 odpowiedzi

322,566 komentarzy

62,753 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...