Sql 如何制作包含双击的vba函数

Sql 如何制作包含双击的vba函数,sql,vba,function,counter,Sql,Vba,Function,Counter,我曾经有一个sub来完成这个过程,但是我试图转换成一个函数却没有成功。可能吗?如果一个人尝试做一个子程序,它会完美地工作。也许这只是子函数和函数之间的区别,但我不确定这一点。我在互联网上搜索了几个小时,但我找不到答案。你能帮帮我吗?提前谢谢你 Function Comparacion_Ventas(Pais As String, _ Tienda_Anterior As Integer, _

我曾经有一个sub来完成这个过程,但是我试图转换成一个函数却没有成功。可能吗?如果一个人尝试做一个子程序,它会完美地工作。也许这只是子函数和函数之间的区别,但我不确定这一点。我在互联网上搜索了几个小时,但我找不到答案。你能帮帮我吗?提前谢谢你

Function Comparacion_Ventas(Pais As String, _
                            Tienda_Anterior As Integer, _ 
                            Tienda_Posterior As Integer, _ 
                            AñoEstudio As Integer, _
                            MesEstudio As Integer, _ 
                            AñoPosteriorEstudio As Integer, _ 
                            AñoAnteriorComparado As Integer)

    Dim Posterior As New ADODB.Recordset
    Dim Anterior  As New ADODB.Recordset
    Dim conn As New ADODB.Connection
    Dim sql As String
    Dim carac_conn As String
    Dim i As Integer
    Dim j As Integer

    Dim Diferencia_Ventas As Double
    Dim Diferencia_Alquileres As Double
    Dim Suma_Ventas As Double
    Dim Suma_Alquileres As Double

    Diferencia_Ventas = 0
    Diferencia_Alquileres = 0
    Suma_Ventas = 0
    Suma_Alquileres = 0

    sql = "SELECT EBIT_Nuevo_" & Pais & ".Tienda, EBIT_Nuevo_" & Pais & ".Ejercicio, EBIT_Nuevo_" & Pais & ".Periodo_Contable, EBIT_Nuevo_" & Pais & _ 
          ".Cifra_de_Ventas, EBIT_Nuevo_" & Pais & ".ALQUILERES" & _
          " FROM EBIT_Nuevo_" & Pais & "" & _
          " WHERE ((EBIT_Nuevo_" & Pais & ".Tienda IN (" & Tienda_Posterior & ") ) AND ((EBIT_Nuevo_" & Pais & ".Cifra_de_Ventas > 0)) AND " & _
          "((EBIT_Nuevo_" & Pais & ".Ejercicio=" & AñoEstudio & ") AND (EBIT_Nuevo_" & Pais & ".Periodo_Contable>" & MesEstudio & ") OR " & _
          "(EBIT_Nuevo_" & Pais & ".Ejercicio=" & AñoPosteriorEstudio & ") AND (EBIT_Nuevo_" & Pais & ".Periodo_Contable<=" & MesEstudio & "))) " & _
          " ORDER BY EBIT_Nuevo_" & Pais & ".Tienda, EBIT_Nuevo_" & Pais & ".Ejercicio, EBIT_Nuevo_" & Pais & ".Periodo_Contable "

    carac_conn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ThisWorkbook.Path & "\Basetdas_New.mdb"
    ' Conexión a BD
    conn.Open ConnectionString:=carac_conn
    ' Petición a BD
    Posterior.Open Source:=sql, ActiveConnection:=conn

    ' Datos obtenidos
    If Posterior.EOF = True Then
        MsgBox " No hay datos en la base de datos", vbInformation
    Else
        Posterior_array = Posterior.GetRows()
    End If

    Posterior.Close
    conn.Close

    sql = "SELECT EBIT_Nuevo_" & Pais & ".Tienda, EBIT_Nuevo_" & Pais & ".Ejercicio, EBIT_Nuevo_" & Pais & ".Periodo_Contable, EBIT_Nuevo_" & _ 
          Pais & ".Cifra_de_Ventas, EBIT_Nuevo_" & Pais & ".ALQUILERES" & _
          " FROM EBIT_Nuevo_" & Pais & "" & _
          " WHERE ((EBIT_Nuevo_" & Pais & ".Tienda IN (" & Tienda_Anterior & ") ) AND ((EBIT_Nuevo_" & Pais & ".Cifra_de_Ventas > 0)) AND " & _
          "((EBIT_Nuevo_" & Pais & ".Ejercicio=2013) AND (EBIT_Nuevo_" & Pais & ".Periodo_Contable<" & MesEstudio & ") OR " & _
          "(EBIT_Nuevo_" & Pais & ".Ejercicio=" & AñoAnteriorComparado & ") AND (EBIT_Nuevo_" & Pais & ".Periodo_Contable>=" & MesEstudio & "))) " & _
          " ORDER BY EBIT_Nuevo_" & Pais & ".Tienda, EBIT_Nuevo_" & Pais & ".Ejercicio, EBIT_Nuevo_" & Pais & ".Periodo_Contable "

    carac_conn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ThisWorkbook.Path & "\Basetdas_New.mdb"
    ' Conexión a BD
    conn.Open ConnectionString:=carac_conn
    ' Petición a BD
    Anterior.Open Source:=sql, ActiveConnection:=conn

    ' Datos obtenidos
    If Anterior.EOF = True Then
        MsgBox " No hay datos en la base de datos", vbInformation
    Else
        Anterior_array = Anterior.GetRows()
    End If

    Anterior.Close
    conn.Close

    For i = 0 To UBound(Anterior_array, 2)
        For j = 0 To UBound(Posterior_array, 2)
            If Posterior_array(2, j) = Anterior_array(2, i) Then
                Diferencia_Ventas = 0
                Diferencia_Ventas = Posterior_array(3, j) - Anterior_array(3, i)
                Sheets("Example").Cells(i, 2) = Diferencia_Ventas
                Suma_Ventas = Suma_Ventas + Diferencia_Ventas
                Exit For
            End If
        Next j
    Next i

    Comparacion_Ventas = Suma_Ventas
End Function
函数比较(PAI作为字符串_
Tienda_前面为整数
Tienda_后验整数
AñoE作为整数_
以整数形式表示的值,\u
AñoPosteriorEstudio作为整数
AñoInteriorO(作为整数)
作为新的ADODB.Recordset
作为新的ADODB.Recordset
Dim conn作为新的ADODB连接
将sql设置为字符串
暗淡的卡拉克线
作为整数的Dim i
作为整数的Dim j
双倍暗差
双色差
双色暗淡的苏马文塔斯
暗淡的苏玛·阿奎莱雷斯是双人的
差异=0
差异=0
Suma_Ventas=0
Suma_Alquileres=0
sql=“选择息税折旧摊销前利润(EBIT)新息税折旧及摊销前利润(Pais&)”.Tienda,息税折旧及摊销前利润(EBIT)新息税折旧及摊销前利润(EBIT)新息税折旧及摊销前利润(Pais&“.Ejercicio),息税折旧及摊销前利润(EBIT)新息税折旧及摊销前利润(Pais&“
“.Cifra_de_Ventas,息税前利润新报”&Pais&“.ALQUILERES”&_
“来自新息税前利润”&PAI&“_
其中((息税折旧摊销前利润新息税折旧及摊销前利润和摊销前利润)和((息税折旧及摊销前利润新息税折旧及摊销前利润和摊销前利润)以及((息税折旧及摊销前利润新息税折旧及摊销前利润和摊销后利润)和((息税折旧及摊销前利润新息税折旧及摊销前利润>0))和“&_
((息税折旧摊销前利润新息税折旧及摊销前利润表和.Ejercicio=“&AñoEstudio&”)和(息税折旧及摊销前利润新息税折旧及摊销前利润表和.Periodo_Contable>“&MesEstudio&”)或“&”_
“(息税折旧摊销前利润(EBIT)&Pais&.”Ejercicio=“&AñoPosteriorEstudio&”)和(息税折旧摊销前利润(EBIT)&Pais&“.periodos&.”续表0)和“&_
“((息税折旧摊销前利润新报“&Pais&”.Ejercicio=2013)和(息税折旧摊销前利润新报“&Pais&”.Periodo_Contable=“&MesEstudio&”)和”_
“按息税折旧摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、折旧及摊销前利润、摊销前利润、折旧及摊销前利润、折旧及摊销前利润、摊销前利润
carac_conn=“Provider=Microsoft.Jet.OLEDB.4.0;数据源=”&thishworkbook.Path&“\Basetdas\u New.mdb”
“Conexión a BD
连接开放连接字符串:=carac\u连接
“佩蒂西翁酒店
开源:=sql,ActiveConnection:=conn
达托斯奥特尼多斯酒店
如果frontial.EOF=True,则
MsgBox“无基准基准基准”,VBS信息
其他的
前面的数组=前面的.GetRows()
如果结束
前方,关闭
关闭连接
对于i=0到UBound(前_数组,2)
对于j=0到uBond(后_阵列,2)
如果后面的数组(2,j)=前面的数组(2,i),那么
差异=0
静脉差异=后静脉阵列(3,j)-前静脉阵列(3,i)
表格(“示例”)。单元格(i,2)=差异
相貌=相貌+差异
退出
如果结束
下一个j
接下来我
可比性=可比性
端函数

您尚未声明要由函数返回的变量类型。顺序如下:

Function SomeName(Parameters) AS Double

    'Do something'

    SomeName = SomeVariable

End Function
请注意,
为Double
,它将返回您分配给函数的值


请记住将
Double
更改为您试图返回的实际数据类型。

谢谢您,Gareth,我已经按照您提到的更改了代码,我仍然得到一个值!excel中的错误。我的实际数据类型是双精度的。请尝试在VBA编辑器中执行该函数,并告诉我们是否发生错误。该函数在VBA中正常工作。所以我猜我在excel工作表中做错了什么。尝试转到公式选项卡->计算公式,因为这可能会说明它失败的地方。这是一个#值!错误,可能与数据类型有关?这对我来说毫无意义。我从工作表中调用函数的方式与在VBA中调用的方式相同。