VBA - ČITANJE SAOBRAĆAJNE U WIN 11 64 BIT I OFFICE 64 BIT
Imao sam problem sa VBA kodom jer mi je ranije radio kao sat, međutim sda na WIN 11 ni makac... i onnda instaliram Autoit ( veza:
https://www.autoitscript.com/site/autoit/downloads/ i napravim u njegovom rootu sledeću datoteku:
#include <Clipboard.au3>
Global $N = "Čitač elektronske saobraćajne dozvole"
WinWait($N, "", 10)
WinActivate($N)
Sleep(1500)
ControlClick($N, "", "[TEXT:Pročitaj saobraćajnu dozvolu]")
Sleep(5000)
$RegBr = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:18]")
$Marka = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:21]")
$Model = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:17]")
$PrvaReg = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:19]")
$Godina = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:20]")
$Boja = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:10]")
$Sasija = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:16]")
$Motor = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:9]")
$Snaga = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:15]")
$Zapremina = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:14]")
$Masa = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:12]")
$Nosivost = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:5]")
$Sedista = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:11]")
$Stajanje = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:8]")
$Vrsta = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:7]")
$Gorivo = ControlGetText($N,"","[CLASS:WindowsForms10.EDIT.app.0.378734a;INSTANCE:6]")
ClipPut($RegBr & "|" & _
$Marka & "|" & _
$Model & "|" & _
$PrvaReg & "|" & _
$Godina & "|" & _
$Boja & "|" & _
$Sasija & "|" & _
$Motor & "|" & _
$Snaga & "|" & _
$Zapremina & "|" & _
$Masa & "|" & _
$Nosivost & "|" & _
$Sedista & "|" & _
$Stajanje & "|" & _
$Vrsta & "|" & _
$Gorivo)
a onda u vba u excelu, novi modul i u njega:
Option Explicit
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Sub CitajSaobracajnu_201()
Dim hWnd As LongPtr
Dim DataObj As New MSForms.DataObject
Dim A As Variant
Dim C As Long
Dim Sasija As String
hWnd = FindWindow(vbNullString, "Čitač elektronske saobraćajne dozvole")
If hWnd = 0 Then
Shell "c:\MUPRS\CitacSaobracajne\CitacSaobracajne.exe", vbNormalFocus
Application.Wait Now + TimeValue("00:00:04")
End If
Shell """C:\Program Files (x86)\AutoIt3\AutoIt3.exe"" ""C:\Program Files (x86)\AutoIt3\CitajSaobracajnu_201.au3""", vbHide
Application.Wait Now + TimeValue("00:00:08")
DataObj.GetFromClipboard
If Trim(DataObj.GetText) = "" Then
MsgBox "Clipboard je prazan.", vbExclamation
Exit Sub
End If
A = Split(DataObj.GetText, "|")
Sasija = Trim(A(6))
If Sasija = "" Then
MsgBox "Broj šasije nije pronađen.", vbExclamation
Exit Sub
End If
' PROVERA DUPLIKATA
For C = 2 To 500
If Trim(Cells(9, C).Value) = Sasija Then
MsgBox _
"VOZILO JE VEĆ UNETO!" & vbCrLf & vbCrLf & _
"Broj šasije: " & Sasija, _
vbCritical
Beep
Exit Sub
End If
Next C
' PRVA PRAZNA KOLONA PO MARKI
For C = 2 To 500
If Trim(Cells(4, C).Value) = "" Then Exit For
Next C
If C > 500 Then
MsgBox "Nema više slobodnih kolona.", vbExclamation
Exit Sub
End If
Cells(3, C) = A(0) ' Registracija
Cells(4, C) = A(1) ' Marka
Cells(5, C) = A(2) ' Model
Cells(6, C) = A(3) ' Datum prve registracije
Cells(7, C) = A(4) ' Godina proizvodnje
Cells(8, C) = A(5) ' Boja
Cells(9, C) = A(6) ' Broj šasije
Cells(10, C) = A(7) ' Broj motora
Cells(11, C) = A(8) ' Snaga
Cells(12, C) = A(9) ' Zapremina
Cells(13, C) = A(10) ' Masa
Cells(14, C) = A(11) ' Nosivost
Cells(15, C) = A(12) ' Broj sedišta
Cells(16, C) = A(13) ' Broj mesta za stajanje
Cells(17, C) = A(14) ' Vrsta vozila
Cells(18, C) = A(15) ' Pogonsko gorivo
Application.StatusBar = _
"Učitano vozilo u kolonu " & _
Split(Cells(1, C).Address, "$")(1)
Beep
End Sub
i eto rešio problem... na listu će učitati podatke iz saobraćajne od kolon B nadalje ... Meni zasad radi i to dobro. I još nešto.. ovaj način povezivanja može uzimati podatke i za ostale aplikacije, lične, zdravstvene... samo putanje izmenite...
Prijatno
200-VOZILA.xlsm
CitajSaobracajnu_201.zip