Olá Mestres, bom dia.
Possuo um código VBA que executa a importação de uma planilha do Excel e acrescenta os dados numa tabela existente. O problema é que antes de executar esta rotina tenho que abrir a referida planilha e excluir a linha de títulos caso contrário apresenta erro de conversão de dados.
Devo informar que a tal planilha é resultado da exportação de uma tabela do Access e como tal, ao exportar do Access pro Excel a planilha resultante exibe a linha de Títulos o que dificulta a re-importação.
O Código de importação é o seguinte:
Private Sub cmdIniciar_Click()
'Aqui contém alguma linhas do Macoratti - Excel - Visual Basic - Importando e Exportando dados
Me.Caption = " Atenção: Operação iniciada, por favor, aguarde !!! "
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
Dim db As Database, rs As Recordset
If Me.txtPath <> "" And IsNull(Me.cboSheets) Or IsEmpty(Me.cboSheets) Then
MsgBox "Selecione a planilha de Origem", vbExclamation, "Aviso"
Me.cboSheets.SetFocus
Me.cboSheets.Dropdown
Exit Sub
End If
If Me.txtPath <> "" And IsNull(Me.cboTableDefs) Or IsEmpty(Me.cboTableDefs) Then
MsgBox "Selecione a tabela de Destino", vbExclamation, "Aviso"
Me.cboTableDefs.SetFocus
Me.cboTableDefs.Dropdown
Exit Sub
End If
'Abrir o arquivo do Excel
Set xlw = xl.Workbooks.Open(Me.txtPath)
Set db = CurrentDb()
'Abre a tabela receptora no BD corrente
Set rs = db.OpenRecordset(Me.cboTableDefs)
'definir qual a planilha de trabalho
xlw.Sheets(Me.cboSheets.Value).Select
'Verifica o conteúdo da célula na posição especificada (linha 1,coluna 1)se é > 0
If xlw.Application.Cells(1, 1).Value > 0 Then
'Percorre a planilha na posição especificada
For X = 1 To 65536 'Imagino que neste ponto poderia ser For X = 2 To 65536
'variavel = xlw.Application.Cells(x, 1).Value - (linha 1,coluna 1) - linha na posição atual do For e
'adiciona os dados na tabela Access
'--------------------------------------------------
If xlw.Application.Cells(X, 1).Value = 0 Then
Set mc = Worksheets(Me.cboSheets.Value).Cells(X, 1)
'MsgBox mc.Address()
MsgBox "Um (0) Zero foi encontrado na célula " & mc.Address() & "." _
& vbCr & "A importação seguiu normalmente até a" _
& vbCr & "célula imediatamente anterior a " & mc.Address() & "."
Exit For
End If
'-------------------------------------------------
rs.AddNew
rs("IdPac") = xlw.Application.Cells(X, 1).Value
rs("DataCad") = xlw.Application.Cells(X, 2).Value
rs("Pront") = xlw.Application.Cells(X, 3).Value
rs("Convênio") = xlw.Application.Cells(X, 4).Value
rs("Matrícula") = xlw.Application.Cells(X, 5).Value
rs("Plano") = xlw.Application.Cells(X, 6).Value
rs("Validade") = xlw.Application.Cells(X, 7).Value
rs("Paciente") = xlw.Application.Cells(X, .Value
rs("DNasc") = xlw.Application.Cells(X, 9).Value
rs("Idade") = xlw.Application.Cells(X, 10).Value
rs("Sexo") = xlw.Application.Cells(X, 11).Value
rs("Cor") = xlw.Application.Cells(X, 12).Value
rs("ECivil") = xlw.Application.Cells(X, 13).Value
rs("Profissão") = xlw.Application.Cells(X, 14).Value
rs("CPF") = xlw.Application.Cells(X, 15).Value
rs("Ender") = xlw.Application.Cells(X, 16).Value
rs("Complem") = xlw.Application.Cells(X, 17).Value
rs("Bairro") = xlw.Application.Cells(X, 18).Value
rs("Cidade") = xlw.Application.Cells(X, 19).Value
rs("CEP") = xlw.Application.Cells(X, 20).Value
rs("UF") = xlw.Application.Cells(X, 21).Value
rs("Tel") = xlw.Application.Cells(X, 22).Value
rs("Cel") = xlw.Application.Cells(X, 23).Value
rs("TelTrab") = xlw.Application.Cells(X, 24).Value
rs("Educação") = xlw.Application.Cells(X, 25).Value
rs("EMail") = xlw.Application.Cells(X, 26).Value
rs("IndicadoPor") = xlw.Application.Cells(X, 27).Value
rs.Update
Next X
'Fechar a planilha sem salvar alterações
'Para salvar mude False para True
xlw.Close False
'Liberando a memória
Set xlw = Nothing
Set xl = Nothing
rs.Close
db.Close
'Definindo propriedades
Me.txtPath = Null
Me.Text1 = Null
Me.cboSheets = Null
Me.cboSheets.Enabled = False
Me.cboTableDefs = Null
Me.cboTableDefs.Enabled = False
Me.cmdProcurar.Enabled = True
Me.cmdProcurar.SetFocus
Me.cmdIniciar.Enabled = False
Me.cboSheets.RowSource = "" 'AddItem wsheet.NameMe.cboSheets.AddItem wsheet.Name
Me.Caption = " InfoBasic Smart System"
MsgBox "P R O N T O !!!", vbExclamation, "Fim do Procedimento"
End If
End Sub
A pergunta que não quer calar é:
Haveria algum lugar onde se possa indicar que a 1º linha não deve ser importada?
Abraços, WSenna
Possuo um código VBA que executa a importação de uma planilha do Excel e acrescenta os dados numa tabela existente. O problema é que antes de executar esta rotina tenho que abrir a referida planilha e excluir a linha de títulos caso contrário apresenta erro de conversão de dados.
Devo informar que a tal planilha é resultado da exportação de uma tabela do Access e como tal, ao exportar do Access pro Excel a planilha resultante exibe a linha de Títulos o que dificulta a re-importação.
O Código de importação é o seguinte:
Private Sub cmdIniciar_Click()
'Aqui contém alguma linhas do Macoratti - Excel - Visual Basic - Importando e Exportando dados
Me.Caption = " Atenção: Operação iniciada, por favor, aguarde !!! "
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
Dim db As Database, rs As Recordset
If Me.txtPath <> "" And IsNull(Me.cboSheets) Or IsEmpty(Me.cboSheets) Then
MsgBox "Selecione a planilha de Origem", vbExclamation, "Aviso"
Me.cboSheets.SetFocus
Me.cboSheets.Dropdown
Exit Sub
End If
If Me.txtPath <> "" And IsNull(Me.cboTableDefs) Or IsEmpty(Me.cboTableDefs) Then
MsgBox "Selecione a tabela de Destino", vbExclamation, "Aviso"
Me.cboTableDefs.SetFocus
Me.cboTableDefs.Dropdown
Exit Sub
End If
'Abrir o arquivo do Excel
Set xlw = xl.Workbooks.Open(Me.txtPath)
Set db = CurrentDb()
'Abre a tabela receptora no BD corrente
Set rs = db.OpenRecordset(Me.cboTableDefs)
'definir qual a planilha de trabalho
xlw.Sheets(Me.cboSheets.Value).Select
'Verifica o conteúdo da célula na posição especificada (linha 1,coluna 1)se é > 0
If xlw.Application.Cells(1, 1).Value > 0 Then
'Percorre a planilha na posição especificada
For X = 1 To 65536 'Imagino que neste ponto poderia ser For X = 2 To 65536
'variavel = xlw.Application.Cells(x, 1).Value - (linha 1,coluna 1) - linha na posição atual do For e
'adiciona os dados na tabela Access
'--------------------------------------------------
If xlw.Application.Cells(X, 1).Value = 0 Then
Set mc = Worksheets(Me.cboSheets.Value).Cells(X, 1)
'MsgBox mc.Address()
MsgBox "Um (0) Zero foi encontrado na célula " & mc.Address() & "." _
& vbCr & "A importação seguiu normalmente até a" _
& vbCr & "célula imediatamente anterior a " & mc.Address() & "."
Exit For
End If
'-------------------------------------------------
rs.AddNew
rs("IdPac") = xlw.Application.Cells(X, 1).Value
rs("DataCad") = xlw.Application.Cells(X, 2).Value
rs("Pront") = xlw.Application.Cells(X, 3).Value
rs("Convênio") = xlw.Application.Cells(X, 4).Value
rs("Matrícula") = xlw.Application.Cells(X, 5).Value
rs("Plano") = xlw.Application.Cells(X, 6).Value
rs("Validade") = xlw.Application.Cells(X, 7).Value
rs("Paciente") = xlw.Application.Cells(X, .Value
rs("DNasc") = xlw.Application.Cells(X, 9).Value
rs("Idade") = xlw.Application.Cells(X, 10).Value
rs("Sexo") = xlw.Application.Cells(X, 11).Value
rs("Cor") = xlw.Application.Cells(X, 12).Value
rs("ECivil") = xlw.Application.Cells(X, 13).Value
rs("Profissão") = xlw.Application.Cells(X, 14).Value
rs("CPF") = xlw.Application.Cells(X, 15).Value
rs("Ender") = xlw.Application.Cells(X, 16).Value
rs("Complem") = xlw.Application.Cells(X, 17).Value
rs("Bairro") = xlw.Application.Cells(X, 18).Value
rs("Cidade") = xlw.Application.Cells(X, 19).Value
rs("CEP") = xlw.Application.Cells(X, 20).Value
rs("UF") = xlw.Application.Cells(X, 21).Value
rs("Tel") = xlw.Application.Cells(X, 22).Value
rs("Cel") = xlw.Application.Cells(X, 23).Value
rs("TelTrab") = xlw.Application.Cells(X, 24).Value
rs("Educação") = xlw.Application.Cells(X, 25).Value
rs("EMail") = xlw.Application.Cells(X, 26).Value
rs("IndicadoPor") = xlw.Application.Cells(X, 27).Value
rs.Update
Next X
'Fechar a planilha sem salvar alterações
'Para salvar mude False para True
xlw.Close False
'Liberando a memória
Set xlw = Nothing
Set xl = Nothing
rs.Close
db.Close
'Definindo propriedades
Me.txtPath = Null
Me.Text1 = Null
Me.cboSheets = Null
Me.cboSheets.Enabled = False
Me.cboTableDefs = Null
Me.cboTableDefs.Enabled = False
Me.cmdProcurar.Enabled = True
Me.cmdProcurar.SetFocus
Me.cmdIniciar.Enabled = False
Me.cboSheets.RowSource = "" 'AddItem wsheet.NameMe.cboSheets.AddItem wsheet.Name
Me.Caption = " InfoBasic Smart System"
MsgBox "P R O N T O !!!", vbExclamation, "Fim do Procedimento"
End If
End Sub
A pergunta que não quer calar é:
Haveria algum lugar onde se possa indicar que a 1º linha não deve ser importada?
Abraços, WSenna