¿Cómo crear un sistema de recaudación de entradas a través de EXCEL?
1. Funciones del sistema de recopilación de datos: ingresar, guardar, consultar, borrar y modificar 2. ¿Dos interfaces?
1. "ingresar, guardar, consultar, borrar, modificar";
2. Interfaz de almacenamiento de datos: guardar datos en segundo plano; Interfaz de entrada:
3. Función de guardar Sub. Save() '?
'Guardar datos Marco, producido por xiaohou, hora 2013-9-5 '?
Dim r1, r2, r3 como rango con hojas ("Almacenamiento de datos ")?
Establecer r2 = .Range("a2", .[a100000].End(xlUp)) ¿Finalizar con?
Con hojas("Entrada de datos") ? Establecer r1 = .Range ("c4:e4, d6:l39")? Si está vacío(.Range("c4")) o está vacío(.Range("e4")) entonces 'o está vacío(.Range("b7:b41) ")) Agregar departamento no está vacío, MsgBox fallido ("¡La codificación y el nombre están vacíos, no se pueden guardar!")? , , 1) Si no es r3, ¿no es nada entonces?
MsgBox ("Este código ya existe y no se puede guardar.
Si es necesario modificar esta información, haga clic en Consulta y luego modifíquela")
¿Else?
Hojas("Almacenamiento de datos").Filas("2:35"). Insertar Mayús: =xlDown ?
.Range("c6:l39").Copiar ?'¿Copiar la información del cuerpo de la tabla "Entrada de datos"?
Hojas("Almacenamiento de datos") .Range(" c2:l2").PasteSpecial Paste:=xlPasteValues ? .Range("c4"). ¿Copiar?'¿Copiar codificación de "entrada de datos"?
Hojas("Almacenamiento de datos") .Range("a2: a35").PasteSpecial Paste:=xlPasteValues? .Range("e4"). ¿Copiar?'¿Copiar el nombre de "Entrada de datos"?
Hojas("Almacenamiento de datos"). Range("b2:b35" ).PasteSpecial Paste:=xlPasteValues ? r1.ClearContents ? 'Después de guardar los datos, ¿borrar la interfaz de entrada?
.Range("c4").Select End If ? End If End With End Sub
2. Función de consulta Sub Query() '?
' Macro de consulta y filtro, producida por xiaohou, hora 2013-9-5 ' '?
¿Dim Erow como entero Dim r1, r2 como rango con hojas ("entrada de datos")? Establecer r1 = .Range("d6:l39") ? )?
Erow = Sheets( "Almacenamiento de datos").[a100000].End(xlUp).Row
r1.ClearContents
'Para cada ce En .[a2:x2]?
'If ce lt;gt; "" Entonces ce.Value = "*" amp; ce amp "*" 'Agregar comodín * para implementar la consulta difusa' ¿Siguiente?
Si IsEmpty( .Range("c4")) O IsEmpty(.Range("e4")) Entonces
'O IsEmpty(.Range("b7:b41 ")) Agregar un departamento no está vacío y falló
MsgBox ("¡La codificación y el nombre están vacíos y no se pueden consultar! ") ? ¿Else?
Hojas("Almacenamiento de datos").Range("A1:l" & Erow).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=_.[c3:e4], CopyToRange: =.[A5:l5], Único:=Falso?
r2.Borders(xlDiagonalDown).LineStyle = xlNone r2.Borders(xlDiagonalUp).LineStyle = xlNone
r2. (xlEdgeLeft).LineStyle = xlNinguno
r2.Borders(xlEdgeTop).LineStyle = xlNone r2.Borders(xlEdgeBottom).LineStyle = xlNone
'r2.Borders(xlEdgeRight).LineStyle = xlNone r2.Borders(xlInsideVertical).LineStyle = xlNone r2. Borders(xlInsideHorizontal).LineStyle = xlNone
r2.NumberFormatLocal = ";"
'Para cada ce en .[a2:x2] 'Si ce lt;gt; Entonces ce.Value = Mid(ce, 2, Len(ce) - 2)? '¿Cancelar el comodín "*"? '¿Siguiente? Terminar con End Sub
3. '?
'Macro actualizado, producido por xiaohou, hora 2013-9-5 ?
¿Dim arr, d como objeto?
¿Dim r como rango?
Dim lramp;, iamp;, j?
With Sheets("data input") '¿Consultar y modificar el área de datos de la hoja de trabajo para escribir en la matriz arr?
'arr = .Range("A7:D" & .Range("A65536").End(xlUp).Row) ? arr = .Range("a6:l39") ? d6: l39") ?
¿Finalizar con?
Establecer d = CreateObject("scripting.dictionary") '¿Definir objeto de diccionario?
Para i = 1 A UBound (arr) '¿Fila por fila?
'Si Len(arr(i, 2)) lt; gt; Entonces 'Descargar la fila "total", es decir: ¿nombre de los datos de la transacción?
Si no d.exists(arr(i, 1) amp; arr(i, 2) amp; arr(i, 3)) Entonces d(arr(i, 1) amp; arr(i, 2) arr (i, 3)) = arr(i, 4) arr(9) arr(i, 5) _?
arr; (i, 6) amplificador; Chr(9) amplificador; (9) amp; arr(i, 10) amp; Chr(9) amp; arr(i, 11) amp; Chr(9) amp; El diccionario no existe (aparece la primera vez, el juicio aquí puede ser redundante), esta cadena se agrega al valor de la clave del diccionario y los campos de atributos relacionados posteriores se agregan a las entradas del diccionario mediante conexiones de pestañas.
'¿Finalizar si? ¿Siguiente?
?Con hojas("Almacenamiento de datos")?
?lr = .Range("A100000").End(xlUp).Row 'Almacenamiento de datos ¿Número de filas de datos de la hoja de cálculo? '.Range("C2:D" & lr).SpecialCells(xlCellTypeConstants, 23).ClearContents '¿Borrar los valores de las celdas sin fórmulas en las columnas C y D?
arr = .Range("A2:l" amp; lr) '¿Escribir el área de datos de la hoja de trabajo de almacenamiento de datos en la matriz arr?
For i = 1 To UBound(arr) 'Fila ¿por fila?
Si d.exists(arr(i, 1) amp; arr(i, 2) amp; arr(i, 3)) Then 'Si el diccionario de cadenas de conexión de nombres y codificación existe, es decir, hay en la Hoja2
For j = 4 To 12 'D, E, F...columna por columna? 'If Not Cells(i, j).TieneFormula Then Cells(i, j). ) = Split(d(arr(i, 1 ) amp; arr(i, 2)), Chr(9))(j - 3) 'Oración anterior: Si la celda no contiene una fórmula, escribe los datos correspondientes a Sheet2 en esta celda
Celdas(i? ?1,?j)?=?Split(d(arr(i,?1)?amp;?arr(i,?2)?amp; ?arr(i,?3)),?Chr (9))(j?-?4)?
¿Siguiente?
¿Fin?Si?
¿Siguiente?
¿Finalizar?
r.ClearContents?
Hojas("
Entrada de datos
").Cells(4,?3). Seleccione? MsgBox?("
Los datos han sido actualizados. Si desea ver el contenido actualizado, haga clic en el botón para consultar") p>