我曾经有过这个过程的子,但我试图转换成一个功能没有成功。可能吗?如果尝试做一个子程序,那就完美了。也许只是关于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
答案 0 :(得分:1)
您还没有声明函数返回的变量类型。顺序如下:
Function SomeName(Parameters) AS Double
'Do something'
SomeName = SomeVariable
End Function
请注意AS Double
,它会返回您分配给该函数的值。
记得将Double
更改为您尝试返回的实际数据类型。