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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Mauricio
22/09/2006 - 15:41 | Informe spam
Gracias Fraqncisco... creo haber solucionado de otra manera el problema
perosi no es así utilizare este sistema que si funciona... gracias...

"Francisco Parrilla" escribió:

Revisa este link:

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

Saludos

Respuesta Responder a este mensaje
#3 Gabriel Raigosa
30/09/2006 - 22:40 | Informe spam
Carpeta
Descripción
Dirección

1
** Microsoft Excel *
http://esnips.com/web/GabrielRaigosa

2
Archivos para usar en clase
http://esnips.com/web/RaigosaClase

3
Fechas y Horas
http://esnips.com/web/RaigosaFechasHoras

4
Formato y Formato Condicional
http://esnips.com/web/RaigosaFormatos

5
Foro Excel
http://esnips.com/web/ForoExcel

6
Funciones de Busqueda
http://esnips.com/web/RaigosaBusqueda

7
Funciones de Texto
http://esnips.com/web/RaigosaTexto

8
Funciones Financieras
http://esnips.com/web/RaigosaFinancieras

9
Funciones Logicas
http://esnips.com/web/RaigosaLogicas

10
Graficos con Excel
http://esnips.com/web/RaigosaGraficos

11
Grupo (Sabados)
Privado

12
Grupo (Viernes)
Privado

13
Grupo Excel Septiembre
Privado

14
Juegos con Excel
http://esnips.com/web/RaigosaJuegosExcel

15
Macros con Excel
http://esnips.com/web/Macros-con-Excel

16
Manuales Excel
http://esnips.com/web/RaigosaManuales

17
Paginas WEB
http://esnips.com/web/RaigosaPaginasExcel

18
Practicas - XLS
http://esnips.com/web/RaigosaPracticasXLS

19
Tablas Dinámicas
http://esnips.com/web/RaigosaTablasDinamicas

20
TEST
http://esnips.com/web/GabrielRaigosa-test

21
Validación
http://esnips.com/web/RaigosaValidacion

22
Varios
http://esnips.com/web/RaigosaVarios

23
VBA - Visual Basic para Aplicaciones
http://esnips.com/web/RaigosaVBA














Gabriel Raigosa
http://esnips.com/web/Raigosa
http://esnips.com/web/ForoExcel
"Mauricio" escribió en el mensaje
news:
| 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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida