Visual Basic para Aplicaciones - Duda al leer datos de un excel

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Pedro
Val: 3
Ha aumentado su posición en 6 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Duda al leer datos de un excel

Publicado por Pedro (2 intervenciones) el 03/03/2020 09:35:12
Buenas tardes,
soy nuevo en este foro, soy un antiguo programador de visual basic 6.0, que he andado tocando otros palos y lenguajes durante varios años y ahora estoy intentando hacer una pequeña cosilla con visual basic studio.

Os cuento:

.- Tengo realizado en proceso en visual basic 6.0 que realiza entre otras cosas, la lectura de una excel con varias pestañas, y que al final de dicho proceso genera unos ficheros txt en base a los datos de las celdas de cada hoja de un excel.

.- Ahora, quiero que ese mismo proceso, funcione exactamente igual, pero con visual studio, para lo cual he creado una pantalla igual, y he copiado el codigo. El caso es que tengo ya bastante deprudado el codigo, pero me encuentro una problematica que no me deja avanzar mas, concretamente con la lectura de las hojas de la excel.

Os pego el codigo y os adjunto unas imagenes de los errores a ver si alguien puede ayudarme
Gracias de antemano.

Private Function LeerExcel() As Boolean

'* dimensiones
Dim xlApp As Excel.Application
Dim xlLibro As Excel.workbook
Dim xlHoja As Excel.Worksheet
Dim varMatriz As VariantType
Dim lngUltimaFila As Long


Dim strNumHoja As String
Dim intNumHoja As Integer
Dim intIndice As Integer
Dim Pacontrato As String
Dim NumeroFactura As Long

Dim FechaEmision As Date
Dim Concepto As Integer
Dim Importe As Double
Dim ImpTotIvaFactura As Double
Dim ImpTotGeneralFactura As Double
Dim ImpBase As Double


'On Error GoTo AtrapaErr_LeerExcel
Try

LeerExcel = False

'* inicializamos la variable que controla como si el proceso de lectura y generacion del fichero ha funcionado bien
'* abrir programa Excel
'xlApp = New Excel.Application(Application)
xlApp = New Excel.Application
'Property xlApp
' Set(ByVal Value As New Excel.Application)
' End Set
'End Property
'xlApp.Visible = False

xlLibro = xlApp.Workbooks.Open(Trim(TxtRutaFactura.Text))
NumeroFactura = CLng(Trim(TxtNumeroFactura.Text))

'* recorremos todas las pestalas de la excel de facturas
For intIndice = 1 To ActiveWorkbook.Worksheets.Count
Sheets(intIndice).Select
Pacontrato = ActiveWorkbook.Worksheets(intIndice).Name
'* si es cliente de EFIPROSER realizamos la extraccion de la informacion y la pegamos en un nuevo excel para Infodasis
If ConsultaCliente(Trim(Pacontrato)) = True Then
FechaEmision = Format(Now, "dd/MM/yyyy")

'* generamos un registro en bbdd por el concepto CUOTA FIJA
Concepto = 1
Importe = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(27, 8).Value
ImpTotIvaFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 3).Value
ImpTotGeneralFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(36, 8).Value
ImpBase = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 1).Value
If GrabarDatosClientes(Pacontrato, NumeroFactura, FechaEmision, Concepto, Importe, ImpTotGeneralFactura, ImpTotIvaFactura, ImpBase) = False Then
Exit Function
End If

'* generamos un registro en bbdd por el concepto ENERGIA CONSUMIDA
Concepto = 2
Importe = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(29, 8).Value
ImpTotIvaFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 3).Value
ImpTotGeneralFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(36, 8).Value
ImpBase = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 1).Value
If GrabarDatosClientes(Pacontrato, NumeroFactura, FechaEmision, Concepto, Importe, ImpTotGeneralFactura, ImpTotIvaFactura, ImpBase) = False Then
Exit Function
End If

'* generamos un registro en bbdd por el concepto CONSUMO
Concepto = 3
Importe = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(31, 8).Value
ImpTotIvaFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 3).Value
ImpTotGeneralFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(36, 8).Value
ImpBase = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 1).Value
If GrabarDatosClientes(Pacontrato, NumeroFactura, FechaEmision, Concepto, Importe, ImpTotGeneralFactura, ImpTotIvaFactura, ImpBase) = False Then
Exit Function
End If

'* generamos un registro en bbdd por el concepto SUPLIDO
Concepto = 4
Importe = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(34, 8).Value
ImpTotIvaFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 3).Value
ImpTotGeneralFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(36, 8).Value
ImpBase = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 1).Value
If GrabarDatosClientes(Pacontrato, NumeroFactura, FechaEmision, Concepto, Importe, ImpTotGeneralFactura, ImpTotIvaFactura, ImpBase) = False Then
Exit Function
End If
'* suamamos uno al numero de factura, ya que los diferentes conceptos deben pertenecer a la misma factura
NumeroFactura = NumeroFactura + 1
End If

Next intIndice


'* cerramos el archivo Excel
xlLibro.Close(SaveChanges:=False)
' ejemplo de cierre en .net
'Workbooks("BOOK1.XLS").Close SaveChanges:=False

'* reset variables de los objetos

xlApp.Quit '



'Set xlHoja = Nothing
'Set xlLibro = Nothing
'Set xlApp = Nothing
'Set objExcel = Nothing

'* indicamos que el proceso de generacion del fichero ha funcionado correctamente
LeerExcel = True

Exit Function

Catch es As Exception
'***************************************************************************************
xlApp.Quit
'***************************************************************************************
xlHoja = Nothing
xlLibro = Nothing
xlApp = Nothing
MessageBox.Show("AtrapaErr_LeerExcel.Se ha producido un error no controlado. Contacte con su administrador informatico")
End Try
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pedro
Val: 3
Ha aumentado su posición en 6 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Duda al leer datos de un excel

Publicado por Pedro (2 intervenciones) el 03/03/2020 13:42:39
Buenos dias de nuevo,
a ver si alguien me puede dar una pista o algo. Voy a centrarme solo en el problema real, ya que viendo mi mensaje anterior, creo que he metido mucha "paja" en el codigo y quizas os asustasteis....

El problema lo tengo porque el "ActiveWorkbook.Sheets" no esta declarado, supongo que esa no es la manera de referenciarlo, ¿podeis ayudarme? En negrita he señalado los casquetazos.

Private Function LeerExcel() As Boolean

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
'* dimensiones
Dim xlApp As Excel.Application
Dim xlLibro As Excel.workbook
Dim xlHoja As Excel.Worksheet
Dim varMatriz As VariantType
Dim lngUltimaFila As Long
 
 
Try
 
LeerExcel = False
 
xlApp = New Excel.Application
 
xlLibro = xlApp.Workbooks.Open(Trim(TxtRutaFactura.Text))
NumeroFactura = CLng(Trim(TxtNumeroFactura.Text))
 
'* recorremos todas las pestalas de la excel de facturas
For intIndice = 1 To ActiveWorkbook.Worksheets.Count
  Sheets(intIndice).Select
  Pacontrato = ActiveWorkbook.Worksheets(intIndice).Name
  If ConsultaCliente(Trim(Pacontrato)) = True Then FechaEmision = Format(Now, "dd/MM/yyyy")
 
   '* generamos un registro en bbdd por el concepto CUOTA FIJA
  Concepto = 1
  Importe = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(27, 8).Value
  ImpTotIvaFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 3).Value
  ImpTotGeneralFactura = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(36, 8).Value
  ImpBase = ActiveWorkbook.Sheets(Pacontrato).Application.Cells(37, 1).Value
  If GrabarDatosClientes(Pacontrato, NumeroFactura, FechaEmision, Concepto, Importe, ImpTotGeneralFactura,                      ImpTotIvaFactura,ImpBase) = False Then
     Exit Function
End If
Next intIndice
 
 
'* cerramos el archivo Excel
xlLibro.Close(SaveChanges:=False)
 
xlApp.Quit '
 
'* indicamos que el proceso de generacion del fichero ha funcionado correctamente
LeerExcel = True
 
Exit Function
 
Catch es As Exception
   xlApp.Quit
   xlHoja = Nothing
   xlLibro = Nothing
  xlApp = Nothing
  MessageBox.Show("AtrapaErr_LeerExcel.Se ha producido un error no controlado. Contacte con su administrador informatico")
End Try
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar