Jump to content

VBA no Excel


Sara ol

Recommended Posts

Sou uma aluna de informatica aplicada à gestão e o meu professor é doido e deu-nos um trabalho prático para fazer muito acima dos nossos conhecimentos e pior a teórica que nos deu não não é suficiente para fazermos o trabalho. por isso peço ajuda. o trabalho consiste em no excel actualizar de minuto a minuto a taxa de cambio EUR/USD, actualizar um grafico, fazer um registo da variação e fazr uma previsão se compramos dolar ou euros. inicialmente temos em carteira 1000 euros e apostamos sempre o dinheiro todo. depois temos de fazer uma coluna pararegistar os ganhos e as perdas(pq o prof não está interessado se a nossa previsão está correcta ou não pq isso é muito dificil e como critério para a previsão só usamos a comparação do valor com o do minuto anterior, apesar de eu querer fazer uma comparação com pelo menos cinco valores mas não sei fazer). daquilo que está feito não conseguimos colocar a previsão no minuto a seguir e depois da previsão fazer a compra no minoto seguinte. será que me podes ajudar? o codigo que está feit é este:

Option Explicit

Dim d As Date

Sub ValorCambio()

Dim r As Double

Dim i As Integer

Dim j As Integer

Dim s As String

Dim f As Double

Dim e As Double

Dim g As Double

Dim h As Double

Dim w As String

Sheets("Sheet1").Cells(4, 6) = 1000

'Abrir uma pagina de internet

Application.Workbooks.Open ("http://forex.tradingcharts.com/")

'Mudar de celulas

i = 3

While Sheets("Sheet1").Cells(i, 1) <> ""

DoEvents

i = i + 1

Wend

'Ir buscar o que estiver numa célula para por noutra

ThisWorkbook.Sheets("Sheet1").Cells(i, 3) = Workbooks("forex.tradingcharts.com").Worksheets("forex.tradingcharts").Cells(157, 3) / 10000

'Hora

Sheets("Sheet1").Cells(i, 2) = Time

'Data

Sheets("Sheet1").Cells(i, 1) = Date

'Fechar folha sem guardar

Application.DisplayAlerts = False

Application.Workbooks("forex.tradingcharts.com").Close SaveChanges:=False

Application.DisplayAlerts = True

'Variação

If i >= 5 Then

j = i - 1

f = Sheets("Sheet1").Cells(i, 3)

e = Sheets("Sheet1").Cells(j, 3)

If f = e Then

Sheets("Sheet1").Cells(i, 4) = "Neutro"

Else

If f < e Then

Sheets("Sheet1").Cells(i, 4) = "Descida"

End If

If f > e Then

Sheets("Sheet1").Cells(i, 4) = "Subida"

End If

End If

End If

'Previsao

If i >= 6 Then

j = i - 1

g = Sheets("Sheet1").Cells(i, 3)

h = Sheets("Sheet1").Cells(j, 3)

If h = g Then

Sheets("Sheet1").Cells(i, 5) = "Mantém"

Else

If h < g Then

Sheets("Sheet1").Cells(i, 5) = "Comprar USD"

End If

If h > g Then

Sheets("Sheet1").Cells(i, 5) = "Comprar EUR"

End If

End If

End If

Sheets("Sheet1").Cells(4, 6) = 1000

'Troca do Dinheiro

Sheets("Sheet1").Cells(4, 6) = "1000"

Sheets("Sheet1").Cells(5, 6) = "1000"

If i >= 6 Then

If Sheets("Sheet1").Cells(i, 5) = "Comprar USD" Then

If Sheets("Sheet1").Cells(i - 1, 6) <> "" Then

Sheets("Sheet1").Cells(i, 7) = Sheets("Sheet1").Cells(i, 3) * Sheets("Sheet1").Cells(i - 2, 6)

Sheets("Sheet1").Cells(i, 6) = ""

Else

Sheets("Sheet1").Cells(i - 1, 7) = ""

End If

Else

If Sheets("Sheet1").Cells(i, 5) = "Comprar EUR" Then

'Workbooks("IAG").Sheets("Folha1").Cells(i, 6) = Workbooks("IAG").Sheets("Folha1").Cells(i - 1, 6)

If Sheets("Sheet1").Cells(i - 1, 7) <> "" Then

Sheets("Sheet1").Cells(i, 6) = Sheets("Sheet1").Cells(i - 1, 7) / Sheets("Sheet1").Cells(i, 3)

Sheets("Sheet1").Cells(i, 7) = ""

Else

Sheets("Sheet1").Cells(i - 1, 6) = ""

End If

End If

If Sheets("Sheet1").Cells(i, 5) = "Manter" Then

If Sheets("Sheet1").Cells(i, 6) <> "" Then

Sheets("Sheet1").Cells(i, 6) = Sheets("Sheet1").Cells(i - 1, 6)

End If

If Sheets("Sheet1").Cells(i, 7) <> "" Then

Sheets("Sheet1").Cells(i, 7) = Sheets("Sheet1").Cells(i - 1, 7)

End If

End If

End If

End If

End Sub

Sub Tempo()

d = Time

Sheets("Sheet1").Cells(3, 12) = d

Sheets("Sheet1").Cells(5, 12) = Second(d)

d = d + (60 - Second(d)) * (((1 / 24) / 60) / 60)

Sheets("Sheet1").Cells(4, 12) = d

End Sub

o meu stress é que tenho de "apresentar" o trabalho amanha. em relaçao ao critério de previsão com cinco valores eu tentei fazer isto:

Sub previsao()

Dim i As Integer

Dim z1 As Double, z2 As Double, z3 As Double, z4 As Double, z5 As Double

Do

i = 11

z1 = Sheets("Sheet1").Cells(i, 6)

z2 = Sheets("Sheet1").Cells(i + 1, 6)

z3 = Sheets("Sheet1").Cells(i + 2, 6)

z4 = Sheets("Sheet1").Cells(i + 3, 6)

z5 = Sheets("Sheet1").Cells(i + 4, 6)

Sheets("Sheet1").Cells(i + 4, 7) = prev(z1, z2, z3, z4, z5)

i = i + 5

DoEvents

Loop Until Sheets("Sheet1").Cells(i, 6) = ""

End Sub

Function prev(z1, z2, z3, z4, z5)

prev = (z1 + z2 + z3 + z4 + z5) / 5

End Functio
Link to comment
Share on other sites

Pelo que vi, vais buscar a um livro na net a taxa de cambio EUR/USD e isso fica na celula C155 ce não na célula C157. Também não percebi o porquê de dividir este valor por 10 000.

Depois, e mais uma vez a falta de identação leva a trocar a ordem das instruções:

- Na sub previsao a inicialização do contador i está dentro do ciclo. Tem de ser colocada antes do Do. Por isso o contador não avança como desejado.

Uma dica: podes evitar a repetição de Sheets("Sheet1") usando o With ... End With

O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Link to comment
Share on other sites

obrigada por ter respondido.

o meu excel é de 2007 e o valor aparece na célula 157,3 mas os meus colegas tem o office 2010 e aparece na célula 154,3. nós dividimos por 10 000 porque o valor aparece com um ponto e não com uma virgula que o excel não aceita e converte-o como numero inteiro e então o meu prof disse para dividir por 10 000 ou seja é o caminho mais fácil para voltarmos a ter um numero real. 😕

sub rotina prev vou desistir dela pq já não tenho tempo.

entretanto eu e os meus colegas fizemos outro código mas dá-nos um bug: depois de abrir o excel do forex ele para e diz subscript out of range, será que me pode ajudar a descubrir o erro?

Dim d As Date

Private Sub CommandButton1_Click()

'Botao PARAR

Application.OnTime TimeValue(d), "Folha1.ValorCambio", Schedule:=False

End

End Sub

Private Sub CommandButton2_Click()

'Botão iniciar

Tempo

Application.OnTime TimeValue(d), "Folha1.ValorCambio"

End Sub

Sub ValorCambio()

Dim hora As Date

Dim r As Double

Dim i As Integer

Dim j As Integer

Dim f As Double

Dim e As Double

Dim g As Double

Dim h As Double

'Abrir uma pagina de internet

Application.Workbooks.Open ("http://forex.tradingcharts.com/")

'Mudar de celulas

i = 4

While Workbooks("Livro1").Sheets("Folha1").Cells(i, 2) <> ""

DoEvents

i = i + 1

Wend

'Ir buscar o que estiver numa célula para por noutra

Workbooks("Livro1").Worksheets("Folha1").Cells(i, 4) = Workbooks("").Worksheets("forex.tradingcharts").Cells(154, 3) / 10000

'Hora

Workbooks("Livro1").Sheets("Folha1").Cells(i, 3) = d

'Data

Workbooks("Livro1").Sheets("Folha1").Cells(i, 2) = Date

'Fechar folha sem guardar

Application.DisplayAlerts = False

Application.Workbooks("").Close SaveChanges:=False

Application.DisplayAlerts = True

'Actualizar grafico

Workbooks("Livro1").Worksheets("Folha2").Activate

ActiveSheet.ChartObjects("Gráfico 1").Activate

ActiveChart.ChartArea.Select

s = "C4:D" & i

ActiveChart.SetSourceData Source:=Sheets("Folha1").Range(s), PlotBy:=xlColumns

'Variação

If i >= 5 Then

j = i - 1

f = Workbooks("Livro1").Sheets("Folha1").Cells(i, 4)

e = Workbooks("Livro1").Sheets("Folha1").Cells(j, 4)

If f = e Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 5) = "Neutro"

Else

If f < e Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 5) = "Descida"

End If

If f > e Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 5) = "Subida"

End If

End If

End If

'Previsao

If i >= 7 Then

j = i - 1

k = i - 2

g = Sheets("Folha1").Cells(j, 4)

h = Sheets("Folha1").Cells(k, 4)

If h = g Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Manter"

Else

If h < g Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar USD" 'Eur mais valioso que o USD

End If

If h > g Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar EUR" 'USD vale mais que o EUR

End If

End If

End If

'Troca do Dinheiro

Workbooks("Livro1").Sheets("Folha1").Cells(4, 7) = "1000"

Workbooks("Livro1").Sheets("Folha1").Cells(5, 7) = "1000"

Workbooks("Livro1").Sheets("Folha1").Cells(6, 7) = "1000"

If i >= 7 Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar USD" Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 8) = "" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 8) = Workbooks("Livro1").Sheets("Folha1").Cells(i, 4) * Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 7)

Else

If Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 7) = "" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 8) = Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 8)

End If

End If

Else

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar EUR" Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 7) = "" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 7) = Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 8) / Workbooks("Livro1").Sheets("Folha1").Cells(i, 4)

Else

If Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 8) = "" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 7) = Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 7)

End If

End If

Else

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Manter" Then

If Sheets("Folha1").Cells(i - 1, 7) = "" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 8) = Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 8)

Else

If Sheets("Folha1").Cells(i - 1, 8) = "" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 7) = Workbooks("Livro1").Sheets("Folha1").Cells(i - 1, 7)

End If

End If

End If

End If

End If

End If

'Saldo

M = Workbooks("Livro1").Sheets("Folha1").Cells(i, 5)

N = Workbooks("Livro1").Sheets("Folha1").Cells(i, 6)

O = Workbooks("Livro1").Sheets("Folha1").Cells(i, 9)

If i >= 5 Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 5) = "Subida" Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar EUR" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Perda"

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar USD" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Ganho"

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Manter" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Perda"

End If

Else

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 5) = "Descida" Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar EUR" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Ganho"

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar USD" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Perda"

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Manter" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Perda"

End If

End If

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 5) = "Neutro" Then

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar EUR" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Perda"

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Comprar USD" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Perda"

End If

If Workbooks("Livro1").Sheets("Folha1").Cells(i, 6) = "Manter" Then

Workbooks("Livro1").Sheets("Folha1").Cells(i, 9) = "Ganho"

End If

End If

End If

'Recomeçar o processo principal

Tempo

Application.OnTime TimeValue(d), "Folha1.ValorCambio"

'Fim da rotina

End Sub

Sub Tempo()

d = Time

Worksheets("Folha1").Cells(11, 11) = d

'Worksheets("Folha1").Cells(8, 1) = Second(d)

d = d + (60 - Second(d)) * (((1 / 24) / 60) / 60)

Worksheets("Folha1").Cells(12, 11) = d

End Sub
Link to comment
Share on other sites

Em 08/06/2012 às 01:07, Sara ol disse:

... depois de abrir o excel do forex ele para e diz subscript out of range, será que me pode ajudar a descubrir o erro?

Dá erro porque falta o nome do livro em

Workbooks("Livro1").Worksheets("Folha1").Cells(i, 4) = Workbooks("forex.tradingcharts.com").Worksheets("forex.tradingcharts").Cells(154, 3) / 10000

O facto de em versões diferentes a celula ser diferente pode ser ultrapassado com as seguintes instruções, que irão passar para uma variavel Double a taxa de cambio:

'Abrir uma pagina de internet e copiar a taxa de cambio EUR/USD
Dim Cambio As Double
Application.Workbooks.Open ("http://forex.tradingcharts.com/")
With Workbooks("forex.tradingcharts.com").Worksheets("forex.tradingcharts")
Cambio = Val(WorksheetFunction.VLookup("EUR/USD", .Range("A150:C170"), 3, False))
End With
Workbooks("forex.tradingcharts.com").Close False

O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Link to comment
Share on other sites

Oi, FreiNando. nem sei como lhe agradecer 👍 . foi muito gentil da sua parte ter ajudado num momento que estava a precisar. sabe estou a tirar um curso de gestão e tenho esta cadeira de informatica aplicada à gestão. as coisas não correram bem pq o prof. não soube gerir as aulas teoricas com as práticas e então ficamos com muito poucas bases para fazer um trabalho complexo para o nosso nível e para a nossa área, aliás como se pode ver pelo codigo que construimos.... 😕 contudo aprendi alguma coisa e de grande utilidade.

acho interessante que as pessoas possam usar estes blogs não só para discutir de profissional para profissional como tb para pessoas sem bases que podem aprender com pessoas dispostas a ajudar os outros.

por isso mais uma vez muito obrigado 🙂 e espero que continue por aqui a ajudar as pessoas 😉

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.