Red de conocimiento informático - Conocimiento informático - ¿Cómo crear un sistema de recaudación de entradas a través de EXCEL?

¿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")