Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
  • Avatar do usuário
  • Avatar do usuário
  • Avatar do usuário
Por Tomze
#9498
Alguém pode me informarcomo resolvo o seguinte problema:

Em um formulário digito uma data em uma Textbox, e com a data digitada quero procurar a mesma em outra planilha que contem uma matriz indexada por data na primeira coluna e que me retornará o conteúdo da segunda coluna.
Isto eu sempre fiz com o PROCV, porém em VBA não está funcionando conforme código abaixo:

Private Sub CmdGrava_Click()
'Cria as variaveis
Dim indice As Characters
Dim dataindice As Date
Dim retorno


datacalc = DateValue(TextDataInicio.Value)
retorno = 0
datacarencia = DateSerial(Year(datacalc), Month(datacalc) + (carencia - 1), Day(datacalc))
indice = "INDICES.xlsx"


retorno = WorksheetFunction.VLookup(contador, Sheets(indice).Range("A3:B16"), 2, False)
Avatar do usuário
Por Reinaldo
Avatar
#9504
Pelo trecho do codigo não é possivel identificar as variaveis.
O que vem a ser Contador?
Por que "Indices.xlx"?
Algumas considerações:
Utilise a variavel indice como String ao inves de Characters
Para calculo datacarencia pode tambem utilizar DateAdd ==>datacarencia = VBA.DateAdd("m", -1, datacalc)

Poste seu modelo assim ficara mais simples erapido obter uma resposta
Por Tomze
#9506
Bom dia,

Reinaldo antes de mais nada, obrigado.

indice = "INDICES.xlsx" ==> É a planilha onde se encontra a matriz que busco o valor de um índice da data procurada.


retorno = WorksheetFunction.VLookup(datacarencia, Sheets(indice).Range("A3:B16"), 2, False) ==> Desculpe mas a variável estava errada, a correta é datacarencia que contem a data que vou pesquisar.


Reinaldo, no excel eu trabalho muito com procv para pesquisar valores de índices econômicos para determinados meses e funciona perfeitamente, mas quando tento fazer o mesmo via código VBA, dá erro.

Será que pode me orientar como resolver este problema.
Por Tomze
#9507
Startec escreveu:Voce quer procurar a data em outra Pasta_de_trabalho?
Sim, estou tentando acessar esta planilha em outra pasta, o que faço normalmente com PROCV, mas em VBA não estou conseguindo acessar a matriz da referida planilha com a data procurada.

At.
Por Tomze
#9547
Reinaldo antes de mais nada, obrigado.

indice = "INDICES.xlsx" ==> É a planilha onde se encontra a matriz que busco o valor de um índice da data procurada.


retorno = WorksheetFunction.VLookup(datacarencia, Sheets(indice).Range("A3:B16"), 2, False) ==> Desculpe mas a variável estava errada, a correta é datacarencia que contem a data que vou pesquisar.


Reinaldo, no excel eu trabalho muito com procv para pesquisar valores de índices econômicos para determinados meses e funciona perfeitamente, mas quando tento fazer o mesmo via código VBA, dá erro.

Será que pode me orientar como resolver este problema.
Por AndersonLeal
Posts
#9556
Utilize Application antes da função, assim:

Application.WorksheetFunction.Vlookup(datacarencia etc)

E tem mais:

INDICES.xlsx NÃO É UMA PLANILHA, é uma pasta de trabalho.
Avatar do usuário
Por Reinaldo
Avatar
#9573
Estou sem office no momento, então seria algo +/- assim:
Código: Selecionar todos
Sub CmdGrava_Click()
'Cria as variaveis
Dim indice As string 'Altere de Character para string
Dim dataindice As Date
Dim retorno
datacalc = DateValue(TextDataInicio.Value)
retorno = 0
datacarencia = DateSerial(Year(datacalc), Month(datacalc) + (carencia - 1), Day(datacalc))

indice = "INDICES.xlsx"

retorno = WorksheetFunction.VLookup( DataCarencia, WorkBook(indice).Sheets("Plan1").Range("A3:B16"), 2, False) 

End Sub
Por Tomze
#9662
Bom dia,

Reinaldo, segue em anexo a planilha com código, o qual não estou conseguindo resultado esperado.

Por gentileza se poder dar uma olhada e me dizer o que está errado eu lhe agradeço.

At.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por FelipeGualberto
Posts Avatar
#9670
@Tomze,
Utilize Option Explicit em todos seus componentes (http://ambienteoffice.com.br/blog/varia ... n-explicit)
---
Código: Selecionar todos
Private Sub ComButt_PegIndice_Click()
    Dim MatchRow As Long
    Dim SearchValue As Long
    Dim wsData As Worksheet
    
    TextBox_Índice.Text = ""
    
    If Not IsDate(TextBox_Data.Text) Then
        MsgBox "Digite uma data válida.", vbExclamation
        TextBox_Data.SetFocus
        GoTo Quit
    End If
    SearchValue = CLng(CDate(TextBox_Data.Text))
    
    Set wsData = ThisWorkbook.Worksheets("Plan2")
    
    On Error Resume Next
    MatchRow = WorksheetFunction.Match(SearchValue, wsData.Columns("A"), 0)
    On Error GoTo 0
    
    If MatchRow = 0 Then
        MsgBox "Data não encontrada!", vbExclamation
        GoTo Quit
    End If
    
    TextBox_Índice.Text = wsData.Cells(MatchRow, "B").Value
Quit:
End Sub
Por Tomze
#9695
Prezado Felipe,

Muito obrigado, funcionou.

Gostaria de abusar mais um pouco e perguntar como ficaria o código no caso de pegar os dados em uma planilha externa que está em outra pasta da rede.

Se for possível lhe agradeço.

At.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord