Sara ol Posted June 7, 2012 at 10:04 AM Report Share #461155 Posted June 7, 2012 at 10:04 AM 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 More sharing options...
FreiNando Posted June 7, 2012 at 10:58 AM Report Share #461159 Posted June 7, 2012 at 10:58 AM 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 More sharing options...
Sara ol Posted June 8, 2012 at 12:07 AM Author Report Share #461281 Posted June 8, 2012 at 12:07 AM 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 More sharing options...
FreiNando Posted June 8, 2012 at 08:27 AM Report Share #461296 Posted June 8, 2012 at 08:27 AM 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 More sharing options...
Sara ol Posted June 8, 2012 at 09:02 PM Author Report Share #461546 Posted June 8, 2012 at 09:02 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now