https://stackoverflow.com/questions/12407389/how-to-return-values-from-a-sql-server-stored-procedure-and-utilise-them-in-acce
https://youtu.be/a-uylSs8-CM
Excel vba https://youtu.be/XPQJTn1gnlU
B1: viết 1 PROCEDURE 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
 [dbo].[test] 0
ALTER PROCEDURE [dbo].[test]
    @ID_CongTy int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    -- Insert statements for procedure here
    SELECT * From tbBangGia Where ID_CongTy=@ID_CongTy
END
B2: viết code VBA
    Dim Conn As New ADODB.Connection
    Dim rcs As New ADODB.Recordset
    Dim strCn As String
    strCn = "PROVIDER=SQLOLEDB;SERVER=HONGNHAT\SQLEXPRESS;DATABASE=tai;UID=sa;PWD=123"
    Dim cn As New ADODB.Connection
    cn.ConnectionString = strCn
    cn.CommandTimeout = 15
    cn.Mode = adModeReadWrite
    cn.Open
    
    Dim cmd As New ADODB.Command
    With cmd
        .ActiveConnection = cn
        .CommandType = adCmdStoredProc
        .CommandTimeout = 60
        .CommandText = "dbo.test"
        .Parameters.Append .CreateParameter("ID_CongTy", adInteger, adParamInput, , 0)
    End With
    
  
    rcs.CursorType = adOpenKeyset
    rcs.LockType = adLockBatchOptimistic
    rcs.Open cmd
    
    
    Set rcs = cmd.Execute
    
    Do While (Not rcs Is Nothing)
        If rcs.State = adStateClosed Then Exit Do
        While Not rcs.EOF
            'For i = 0 To rcs.Fields.Count - 1
            '    rStr = rStr & " : " & rcs(i)
           ' Next i
            MsgBox rcs!TenBangGia
            
            rcs.MoveNext
          
        Wend
        Debug.Print "----------------------"
        Set ADORs = rcs.NextRecordset
    Loop
    
    
   
    
    Set cmd = Nothing
    
   cn.Close
** Gọi hàm có tham số là nvarchar
Option Compare Database
Option Explicit
Private Sub Command0_Click()
    Dim Conn As New ADODB.Connection
    Dim rcs As New ADODB.Recordset
    Dim strCn As String
    strCn = "PROVIDER=SQLOLEDB;SERVER=LAPTOP-1UAIHGHP\SQLEXPRESS;DATABASE=hoso;UID=sa;PWD=123"
    Dim cn As New ADODB.Connection
    cn.ConnectionString = strCn
    cn.CommandTimeout = 30
    cn.Mode = adModeReadWrite
    cn.Open
    
    Dim cmd As New ADODB.Command
    With cmd
        .ActiveConnection = cn
        .CommandType = adCmdStoredProc
        .CommandTimeout = 60
        .CommandText = "dbo.getHoSo"
     End With
     Dim prm As Object
    
     Set prm = cmd.CreateParameter("Lop", adVarChar, adParamInput)
     Dim giatri As String
     giatri = "1"
         
    prm.Size = Len(giatri)
    cmd.Parameters.Append prm
    cmd.Parameters("Lop") = giatri
     
    rcs.CursorType = adOpenKeyset
    rcs.LockType = adLockBatchOptimistic
    rcs.Open cmd
    
    
    Set rcs = cmd.Execute
    
    Do While (Not rcs Is Nothing)
        If rcs.State = adStateClosed Then Exit Do
        While Not rcs.EOF
            'For i = 0 To rcs.Fields.Count - 1
            '    rStr = rStr & " : " & rcs(i)
           ' Next i
            MsgBox rcs!ten
            
            rcs.MoveNext
          
        Wend
        Debug.Print "----------------------"
        Set rcs = rcs.NextRecordset
    Loop
    
    
   
    
    Set cmd = Nothing
    
   cn.Close
End Sub
 
** với produce là
USE [HoSo]
GO
/****** Object:  StoredProcedure [dbo].[getHoSo]    Script Date: 08/04/2023 20:15:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
-- [getHoSo] '1'
ALTER PROCEDURE [dbo].[getHoSo]
    @Lop nvarchar(50)    
AS
BEGIN
    SET NOCOUNT ON;
    -- Insert statements for procedure here
    
    SELECT * From tbHoSo Where Lop=@Lop 
    
END
 
*** Viết SQL
Dim Conn As New ADODB.Connection
    Dim rcs As New ADODB.Recordset
    Dim strCn As String
    strCn = "PROVIDER=SQLOLEDB;SERVER=LAPTOP-1UAIHGHP\SQLEXPRESS;DATABASE=hoso;UID=sa;PWD=123"
    Dim cn As New ADODB.Connection
    cn.ConnectionString = strCn
    cn.CommandTimeout = 30
    cn.Mode = adModeReadWrite
    cn.Open
    
    Dim cmd As New ADODB.Command
    With cmd
        .ActiveConnection = cn
        .CommandType = adCmdText
        .CommandTimeout = 60
        .CommandText = "Select * From dbo.tbHoSo"
     End With
     Dim prm As Object
     
    rcs.CursorType = adOpenKeyset
    rcs.LockType = adLockBatchOptimistic
    rcs.Open cmd
    
    
    Set rcs = cmd.Execute
    
    Do While (Not rcs Is Nothing)
        If rcs.State = adStateClosed Then Exit Do
        While Not rcs.EOF
            'For i = 0 To rcs.Fields.Count - 1
            '    rStr = rStr & " : " & rcs(i)
           ' Next i
            MsgBox rcs!ten
            
            rcs.MoveNext
*** Xóa bảng ghi
 Dim Conn As New ADODB.Connection
    Dim rcs As New ADODB.Recordset
    Dim strCn As String
    strCn = "PROVIDER=SQLOLEDB;SERVER=LAPTOP-1UAIHGHP\SQLEXPRESS;DATABASE=hoso;UID=sa;PWD=123"
    Dim cn As New ADODB.Connection
    cn.ConnectionString = strCn
    cn.CommandTimeout = 30
    cn.Mode = adModeReadWrite
    cn.Open
    
    Dim cmd As New ADODB.Command
    With cmd
        .ActiveConnection = cn
        .CommandType = adCmdText
        .CommandTimeout = 60
        .CommandText = "Delete from tbHoSo"
     End With
     
    rcs.CursorType = adOpenKeyset
    rcs.LockType = adLockBatchOptimistic
    rcs.Open cmd
    
    
   Set rcs = cmd.Execute
    
    
    
    
   
    
    Set cmd = Nothing
    
   cn.Close
          
        Wend
        Debug.Print "----------------------"
        Set rcs = rcs.NextRecordset
    Loop
    
    
   
    
    Set cmd = Nothing
    
   cn.Close
Vba Access kết nối với Store Procedure