Preguntas sobre programación de VBA, los requisitos específicos son los siguientes
Le doy un ejemplo. Esto fue escrito por mí para resolver algunos problemas. Se pasó la depuración. Estos archivos se colocan en tres carpetas y se cuentan juntos. hay alguno Pregúntame claramente.
'Análisis de algoritmo de esta tabla
'Agregue el contenido del informe diario de productos defectuosos de este mes y el contenido de este mes de la tabla de resumen de mantenimiento de este mes, y al mismo tiempo agregue el contenido de la tabla de resumen de productos defectuosos de este mes El inventario mensual se acumula para calcular el inventario del mes actual
'Para facilitar la redacción del programa, el contenido de la tabla de resumen de productos defectuosos del mes anterior no se considera en realidad. uso, se puede copiar directamente del mes anterior
'Este algoritmo toma prestado el efecto de agregar nuevos elementos hacia abajo en el diccionario, por lo que no se puede confundir porque el inventario del mes anterior corresponde al número de material uno a uno
'La razón por la cual los tipos de números de materiales reparados este mes no se cuentan es porque todos los números de materiales en el informe diario defectuoso de este mes y el inventario del mes pasado cubren los números de materiales reparados este mes.
Sub RefreshData() p>
Dim wb_bl As Workbook 'Libro de trabajo de informe diario de producto defectuoso
Dim wb_wx As Workbook 'Libro de trabajo de informe diario de mantenimiento
Dim sht_me Como Hoja de Trabajo 'Este informe no es Tabla resumen de productos defectuosos
Dim sht_wx Como Hoja de Trabajo 'Informe diario de mantenimiento
Dim sht_bl Como Hoja de Trabajo 'Informe diario de productos defectuosos
Dim str As String
Establecer sht_me = ThisWorkbook.ActiveSheet
str = ThisWorkbook.Path
str = Mid(str, 1, InStrRev( str, "\")) 'Obtener el directorio superior
Application.ScreenUpdating = False
Establecer wb_bl = GetObject(str & "Informe diario de productos defectuosos" & "\" & Left(ThisWorkbook.Name, 2) & "Estadísticas anuales de productos defectuosos.xlsm")
Establecer wb_wx = GetObject(str & "Informe de mantenimiento diario" & "\" & Left(ThisWorkbook.Name, 2) & "Estadísticas de mantenimiento anual.xlsm")
Para cada sht_bl en wb_bl.Sheets 'Obtener informe diario de producto defectuoso mes
Si sht_bl.Name = sht_me.Name Entonces
Salir para
Finalizar si
Siguiente
Para cada sht_wx en wb_wx.Sheets 'Obtener informe diario de mantenimiento mensual
Si sht_wx.Name = sht_me.Name Entonces
Salir para
Finalizar si
Siguiente
Establecer d = CreateObject("scripting.dictionary")
Dim cnt_me As Integer
Dim cnt_bl As Integer p>
Dim cnt_wx como entero
Dim arr1, x como entero
arr1 = sht_me.Range("b3:b" & sht_me.Range("b65536"). End(xlUp).Row)
For x = 1 To UBound(arr1) 'Importa el número de material del mes correspondiente en esta tabla al diccionario
d(arr1(x , 1) ) = x + 1
Siguiente x
arr1 = sht_bl.Range("b3:b" & sht_bl.Range("b65536").End(xlUp). Fila)
For x = 1 To UBound(arr1) 'Importar el número de material del mes correspondiente del producto defectuoso al diccionario
d(arr1(x, 1)) = x + 1
Siguiente x
'La razón por la que no es necesario importar los números de material en la tabla de estadísticas de mantenimiento es que el contenido de mantenimiento debe basarse en el inventario de el mes anterior y los defectos de este mes
sht_me.Range ("B3").Resize(d.Count, 1) = Application.WorksheetFunction.Transpose(d.keys)
cnt_me = sht_me.Cells(65535, 2).End(xlUp).Row
cnt_bl = sht_bl.Cells(65535, 2).End(xlUp).Row
cnt_wx = sht_wx.Cells(65535, 2).End(xlUp).Row
Para x = 3 Para cnt_me
sht_me.Cells(x, 4).Value = Application.WorksheetFunction .SumIf(sht_bl.Range("b3:b" & cnt_bl), sht_me.Cells (x, 2), sht_bl.Range("d3:d" & cnt_bl)) 'Número de productos defectuosos
sht_me.Cells(x, 5).Value = Application.WorksheetFunction.SumIf(sht_wx.Range ("b3:b" & cnt_wx), sht_me.Cells(x, 2), sht_wx.Range("c3:c" & cnt_wx )) 'Cantidad de reparación
sht_me.Cells(x, 6) .Value = Application.WorksheetFunction.SumIf(sht_wx.Range("b3:b" & cnt_wx), sht_me.Cells(x, 2) , sht_wx.Range("d3:d" &c
nt_wx)) 'Cantidad de desecho
Siguiente x
Establecer d = Nada
wb_bl.Close False
wb_wx.Close False p> p>
Establecer wb_bl = Nada
Establecer wb_wx = Nada
Application.ScreenUpdating = True
End Sub