locked
Serial Ports / AT Commands In VBA RRS feed

  • General discussion

  • Dear Friends,

    While on .Net my following Excel VSTO AddIn with a ComboBox reflecting the Ports active, is working great how to convert the same to a VBA code?

    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.IO
    Imports System.IO.Ports
    Imports System.Threading
     
    Public Class frm_XLAT
    	Dim MainPort As SerialPort, AllPorts() As String
    	Private Sub frm_XLAT_Load(sender As Object, e As EventArgsHandles MyBase.Load
    		AllPorts = SerialPort.GetPortNames 'Get Error In VBA
    		For Each PortList In AllPorts
    			cmb_Port.Items.Add(PortList)
    		Next
    	End Sub
    	Private Sub btn_Send_Click(sender As Object, e As EventArgsHandles btn_Send.Click
    		Dim Rng_A As Excel.Range, Rng_B As Excel.Range, NoOfMsgs As Long
    		On Error Resume Next
    		Rng_A = Globals.ThisAddIn.Application.Range(txt_Cells.Text)
    		Rng_B = Globals.ThisAddIn.Application.Range(txt_Msgs.Text)
    		If Rng_A Is Nothing Or Rng_B Is Nothing Or Rng_A.Cells.Count <> Rng_B.Cells.Count Or Rng_A.Columns.Count <> Rng_B.Columns.Count Or Rng_A.Rows.Count <> Rng_B.Rows.Count Or (Rng_A.Row <> Rng_B.Row And Rng_A.Column <> Rng_B.Column) Then
    			MsgBox("Invalid Excel Addresses." & vbCr & "Ensure Correct and Equal Sized Ones.")
    			GoTo GetOut2
    		End If
    GoBack:
    		Dim ValidPort As Boolean
    		On Error GoTo GetOut
    		ValidPort = False
    		MainPort = New SerialPort
    		MainPort.PortName = Me.cmb_Port.Text
    		MainPort.BaudRate = 9600
    		MainPort.Parity = Parity.None
    		MainPort.DataBits = 8
    		MainPort.StopBits = 1
    		MainPort.ReadTimeout = 500
    		MainPort.WriteTimeout = 500
    		For Each PortList In AllPorts
    			If MainPort.PortName = PortList Then
    				ValidPort = True
    				Exit For
    			End If
    		Next
    		If MainPort.IsOpen Then
    			MainPort.Close()
    			GoTo GoBack
    		End If
    		MainPort.Open()
    		ValidPort = True
    		For NoOfMsgs = 1 To Rng_A.Count
    			ResultBack(MainPort, "AT")
    			ResultBack(MainPort, "AT+CMGF=1")
    			ResultBack(MainPort, "AT+CMGS=""" & Rng_A(NoOfMsgs).VALUE & """")
    			ResultBack(MainPort, Rng_B(NoOfMsgs).VALUE & vbCrLf & Chr(26))
    		Next
    GetOut:
    		If ValidPort = False Then MsgBox("Invalid Port!" & vbNewLine & "Check out Connectivity, Driver(s)" & vbCr & "and Correct Selection." & vbNewLine & "Better Luck Next Time!")
    GetOut2:
    		If MainPort.IsOpen Then MainPort.Close()
    	End Sub
    	Public Sub ResultBack(CurrentPort As SerialPort, CMD As String)	'Function ResultBack(CurrentPort As SerialPort, CMD As String) As String
    		Dim CleanReseter As New AutoResetEvent(True)
    		CurrentPort.DiscardInBuffer()
    		CurrentPort.DiscardOutBuffer()
    		CleanReseter.Reset()
    		CurrentPort.Write(CMD & vbCrLf)
    		CleanReseter.WaitOne(300, False)
    	End Sub
     
    	Private Sub btn_CellNos_Click(sender As Object, e As EventArgsHandles btn_CellNos.Click
    		Me.Hide()
    		txt_Cells.Text = PickAdd()
    		Me.Show()
    	End Sub
    	Private Sub btn_Msgs_Click(sender As Object, e As EventArgsHandles btn_Msgs.Click
    		Me.Hide()
    		txt_Msgs.Text = PickAdd()
    		Me.Show()
    	End Sub
    	Public Function PickAdd() As String
    		Dim Rng As Excel.Range
    		On Error Resume Next
    		Rng = Globals.ThisAddIn.Application.InputBox("Select The Relevant Cells.", , , , , , , 8)
    		If Rng Is Nothing Then
    			PickAdd = ""
    		ElseIf Rng.Columns.Count > Rng.Rows.Count Then
    			Rng = Rng.Resize(1, Rng.Columns.Count)
    			PickAdd = Rng.Address
    		Else
    			Rng = Rng.Resize(Rng.Rows.Count, 1)
    			PickAdd = Rng.Address
    		End If
    	End Function
    End Class


    Sunday, July 24, 2016 6:01 PM