Forums Últimos mensajes - Powered by IBM
 

ayuda con macro excel VBA pliss!!!

21/09/2006 - 20:07 por Mauricio | Informe spam
Necesito ayuda porfavor, tengo una macro en excel que realiza varias tareas
de tablas dinamicas, sobre archivos cuyos nombres cambian en el tiempo, asi
que deben ir parametrizados.

cuando corro la macro desde el excel (está en el personal.xls) funciona sin
ningun problema, pero necesito ejecutarla desde la linea de comandos, algo
asi como :

excel.exe /xmacro1("string")

esta macro debe recibir un string de 8 caracteres como parametro (fecha) y
en base a eso hacer los calculos.

porfavor, necesito saber como puedo hacerlo desde la linea de comandos o
desde una mini app de vb6 que lo unico que haga sea llamar a esta macro.

la macro es bastante complicada, pero aqui va si les sirve de algo:

Sub RDALLMTR(p As String)
' Para crear las tablas dinamicas por cada hoja y día
' Acceso directo: CTRL+y
Dim q As String, k As String, j As String
'p = "20060207"
j = Mid$(p, 1, 4) & "-" & Mid$(p, 7, 2) & "-" & Mid$(p, 5, 2) 'yyyyddmm
If (CInt(Mid$(p, 5, 2)) - 1) < 10 Then 'para obtener el dia anterior
q = "0" & (CInt(Mid$(p, 5, 2)) - 1)
Else
q = (CInt(Mid$(p, 5, 2)) - 1)
End If
k = Mid$(p, 5, 2) 'dia actual para el nombre de la hoja

'****** INICIO PROCESO
If k = "01" Then 'mes inicia correr ademas macro para reporte mensual anterior
Workbooks.Open Filename:="C:\CMTR\RPT\RPTDIA.xls" 'abre vacio con hoja 01
Else 'el mes ya partio, ABRE EL DEL DIA ANTERIOR
Workbooks.Open Filename:="C:\CMTR\RPT\RPTDIA" & q & Mid$(p, 7, 2) &
Mid$(p, 1, 4) & ".xls"
On Error GoTo 1
Sheets(k).Delete 'si existe la del dia actual la elimina
1: Sheets.Add.Name = k 'la crea nuevamente AL principio
End If

With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
.Connection = "ODBC;DSN=MS Access
Database;DBQ=C:\CMTR\CMTR.mdb;DefaultDir=C:\CMTR;DriverId%;" & _
"FIL=MS Access;MaxBufferSize 48;PageTimeout=5;"
.CommandType = xlCmdSql
.CommandText = Array("SELECT ALLMTR.MOD_DATE, ALLMTR.LOGIN_NAME,
ALLMTR.NUM_CELS, ALLMTR.MONTO, " & _
"ALLMTR.PN" & Chr(13) & "" & Chr(10) & "FROM
`C:\CMTR\CMTR`.ALLMTR ALLMTR" & _
Chr(13) & "" & Chr(10) & "WHERE (ALLMTR.MOD_DATE={ts
'" & j & " 00:00:00'})")
If k = "01" Then
.CreatePivotTable TableDestination:="'[RPTDIA.xls]" & k & "'!R1C2",
TableName:="TDinam" & k, _
DefaultVersion:=xlPivotTableVersion10
Else
.CreatePivotTable TableDestination:="'[RPTDIA" & q & Mid$(p, 7, 2) &
Mid$(p, 1, 4) & ".xls]" & _
k & "'!R1C2", TableName:="TDinam" &
k, _
DefaultVersion:=xlPivotTableVersion10
End If
End With
With ActiveSheet.PivotTables("TDinam" & k)
.NullString = "0"
.PivotCache.OptimizeCache = True
End With
ActiveSheet.PivotTables("TDinam" & k).PivotFields("MOD_DATE").Caption =
"Fecha"
With ActiveSheet.PivotTables("TDinam" & k).PivotFields("LOGIN_NAME")
.Caption = "Usuarios"
.ShowAllItems = True
End With
With ActiveSheet.PivotTables("TDinam" & k).PivotFields("PN")
.Caption = "Tipo"
.ShowAllItems = True
.PivotItems("0").Caption = "Cargos"
.PivotItems("1").Caption = "Abonos"
End With
ActiveSheet.PivotTables("TDinam" & k).AddFields RowFields:=Array("Usuarios",
"Datos"), _
ColumnFields:="Tipo", _
PageFields:="Fecha"
With ActiveSheet.PivotTables("TDinam" & k).PivotFields("MONTO")
.Orientation = xlDataField
.Caption = "Monto Tx"
.Position = 1
End With
With ActiveSheet.PivotTables("TDinam" & k).PivotFields("NUM_CELS")
.Orientation = xlDataField
.Caption = "Nº Cels"
End With
ActiveSheet.PivotTables("TDinam" & k).Format xlTable2
Columns("B:H").EntireColumn.AutoFit
Columns("H:H").EntireColumn.Hidden = True
Rows("2:3").EntireRow.Hidden = True
Columns("A").ColumnWidth = 2
Columns("B").HorizontalAlignment = xlLeft

'guardar REPORTE DIARIO como
ActiveWorkbook.SaveAs Filename:="C:\CMTR\RPT\RPTDIA" & Mid$(p, 5, 2) &
Mid$(p, 7, 2) & Mid$(p, 1, 4) & _
".xls", FileFormat:=xlNormal, Password:="",
WriteResPassword:="", _
ReadOnlyRecommended:=False,
CreateBackup:=False
'si el archivo ya existe sedebe hacer click
en el cuadro de sobreescribir
'**** TERMINO DE PROCESO DIARIO REPORTE ALLMTR

If Weekday(q, 2) = 2 Then 'es lunes
'correr macro para reporte semana anterior (lunes a domingo)
MsgBox ("es lunes")
End If
If k = "01" Then 'es primero de mes
MsgBox ("es primero de mes")
'correr macro para reporte mensual anterior (01 a hoy)
End If
End Sub
 

Leer las respuestas

#1 Francisco Parrilla
22/09/2006 - 07:48 | Informe spam
Revisa este link:

Cómo llamar a macros de Microsoft Excel que toman parámetros
http://support.microsoft.com/kb/153307/es

Saludos

Preguntas similares