Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafamatos

Access/Excel

Recommended Posts

Olá, pessoal!

 

Sou novo no fórum e não sei se posso estar postando minha dúvida aqui.

 

Tenho a seguinte programação usando banco de dados através do excel:

 

Dim O As Variant

Dim Num_Linhas As Variant

Dim cn As ADODB.Connection

 

Set cn = New ADODB.Connection

cn.ConnectionString = "DRIVER={ORACLE ODBC DRIVER};SERVER=DIL_DIL_SOR;UID="";PWD="";DBQ=DIL_DIL_SOR;DBA=W;APA=T;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC=10;TLO=O;"

cn.Open

 

Set Tabela = New ADODB.Recordset

 

Sql = "SELECT SOLICITACOES_SERVICO.SEQ, SOLICITACOES_SERVICO.DESCRICAO, SOLICITACOES_SERVICO.STT_SOLIC, SOLICITACOES_SERVICO.DTHR_FIM_ATEND FROM DIE.SOLICITACOES_SERVICO SOLICITACOES_SERVICO WHERE SOLICITACOES_SERVICO.DTHR_DEFEITO>='01/01/2011' GROUP BY SOLICITACOES_SERVICO.SEQ, SOLICITACOES_SERVICO.DESCRICAO, SOLICITACOES_SERVICO.STT_SOLIC, SOLICITACOES_SERVICO.DTHR_FIM_ATEND"

Tabela.Open Sql, cn, adOpenKeyset, adLockOptimistic

 

Num_Linhas = 9999

 

For O = 1 To Num_Linhas

Set SS = Range("A" & O)

Set descricao = Range("B" & O)

Set Status = Range("C" & O)

Set data = Range("D" & O)

 

If Not Tabela.EOF Then

SS.FormulaR1C1 = Val(Tabela(0))

On Error GoTo programa:

descricao.FormulaR1C1 = Tabela(1)

On Error GoTo programa

Status.FormulaR1C1 = Tabela(2)

On Error GoTo programa

data.FormulaR1C1 = Format(CDate(Tabela(3)), "dd/mm/yyyy hh:mm")

On Error GoTo programa:

 

 

programa: Resume Next

 

Tabela.MoveNext

 

End If

 

Next O

GoTo Formatar

 

Formatar:

Columns("A:D").Select

With Selection

.HorizontalAlignment = xlGeneral

.VerticalAlignment = xlBottom

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = True

.ReadingOrder = xlContext

.MergeCells = False

End With

 

Range("A1").Select

Range(Selection.End(x1Down)).Select

Range(Selection.End(x1ToRight)).Select

Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

 

End Sub

 

Está funcionando normalmente, mas minha dúvida seria no caso do For, pois como são inseridos dados diariamente no sistema, gostaria de usar um comando que não precisasse estar mudando o número de linhas no For, e, sim, fazer com que a tabela se atualize automaticamente.

 

Já tentei maneiras diferentes, como contar a quantidade de valores da tabela "SOLICITACOES_SERVICO.SEQ" e jogar o valor da quantidade no For. Mas não obtive sucesso.

 

Se alguém puder ajudar, agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafa,

 

Acredito que você possa utilizar um "while", enquanto a range for diferente de null...

 

dim i as integer

i=1
Do While SS <> null

Set SS = Range("A" & i)
Set descricao = Range("B" & i)
Set Status = Range("C" & i)
Set data = Range("D" & i)

.
.
.

i = i+1

Loop[/Code]

 

 

 

PS: por que não usar uma rotina de transferência de arquivo...?! Algo parecido com isso, mas para Excel - se houve interesse, eu posto depois...

 

Transfersheet

 

 

Sem mais,

 

Julien Sorel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa, boa noite.

 

Não sei se seu código funciona desta forma, porém, quando utilizo este tipo de loop sem saber o tamanho do arquivo que será varrido eu coloco como limitador o proprio tamanho do arquivo. Como por exemplo no trecho:

 

For O = 1 To Arquivo ou tabela.eof

// Onde o eof significa até o fim do arquivo que está sendo lido, assim você evita de errar o número e garante que será feito até o final do mesmo.//

 

 

 

Espero ter ajudado.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.