Ir para conteúdo
Fórum Script Brasil

MarlonS

Membros
  • Total de itens

    20
  • Registro em

  • Última visita

Posts postados por MarlonS

  1. Obrigado, João Neto.

    Diferentemente da linguagem C, em que uma função acontece depois da outra de acordo com o que está escrito; em VBA, podemos ter vários módulos ou rotinas dependendo de botões, listbox, etc, de modo que elas podem ficar de modo não contínuo. Se eu chamo a sub rotina A e atribuo um valor X a uma variável var; depois chamo a subrotina B e somo 10 à mesma variável, terei X + 10; se fizer o contrário, X. Se eu precisar novamente chamar a rotina A, depois de ter executado A e B, a variável, que valia X + 10, volta a valer X...

    Não estou conseguindo ser claro, o que quero dizer é que esse tipo de linguagem me preocupa por tudo não acontecer em uma sequência única.

  2. Resolvi expor o problema por completo:

    Li dois ótimos tutoriais sobre buscas em excel, um deles usando PROCV e outro, VBA: http://www.exceldoseujeito.com.br/2008/10/...1/#comment-1923

    No entanto, tenho uma tabela com um formato padronizado por norma e a busca precisa ser feita sem alterá-la:

    Tabela_Complexa.jpg

    Note que há células mescladas.

    Cada planilha conta com uma tabela dessa e cada planilha/tabela é referente a UM produto de UMA unidade do supermercado.

    Parte 1: Preciso de um formulário que rastreie as planilhas em busca de tal produto e, ao encontrá-lo, exibir a planilha.

    Parte 2: Estando na planilha, preciso de um formulário semelhante ao do tutorial, em que eu digite um item específico, por exemplo, "QUERO AS VENDAS DO VENDEDOR B NO SEMESTRE 1" ou "TODOS OS DADOS REFERENTES AO VENDEDOR C" e ele me informe.

    Parte 3: Em seguida poder criar diversos gráficos, inclusive misturando planilhas.

    Há muito tempo procuro, pouco a pouco, dicas em fóruns, mas ainda não consigo resolver esse problema, para mim, muito complexo, e cá o exponho por completo.

    No meu caso não tem a ver com produtos de supermercados, mas é um exemplo análogo.

    Além da busca pelos funcionários, também é preciso que se busque "Nº Clientes / dia" ou "Caixas Func", por exemplo, tornando a busca complexa, por envolver dados mesclados e não mesclados.

  3. Li sobre PROCV em excel e o associei a buscas simples. No entanto, caso eu tenha uma tabela um pouco mais complexa, como a da figura abaixo, como faço para fazer uma busca?

    Como fazer uma busca, por exemplo, dos lucros de um funcionário X? Ou dos gastos brutos de um funcionário Y, no semestre Z? Finalmente, como fazer uma busca se tivermos células mescladas?

    Tabela.JPG

    Preciso de uma busca do tipo. Posteriormente, em uma planilha principal ou formulário, precisarei criar uma busca entre planilhas, mas, por enquanto, estou tentando aprender como fazer isso.

    Muito obrigado.

  4. Prossigo estudando tutoriais-exemplos de VBA para excel e me deparo com o seguinte:

    Private Sub CommandButton1_Click()

    Dim rngData As Range

    Dim rngCriteria As Range

    Dim rngExtract As Range

    Set rngData = Workbooks("DataList5.xlsm").Worksheets("Sales").Range("Database")

    Set rngCriteria = ThisWorkbook.Worksheets("Sales").Range("Criteria")

    Set rngExtract = ThisWorkbook.Worksheets("Sales").Range("Extract")

    'Ex tract data with Advanced Filter

    rngData.AdvancedFilter Action:=xlFilterCopy, _

    CriteriaRange:=rngCriteria, _

    CopyToRange:=rngExtract, _

    Unique:=False

    End Sub

    O que é um Range("Database")? Nesse caso, "Database" é o nome de um intervalo na planilha "Sales"? Ou ele seleciona as ocorrências da palavra"Database" em tal planilha?

    Sabendo o que é .Range("Database"), .Range("Criteria") e .Range("Extract"), pergunto-me o que está sendo filtrado.

    =================================

    E o que ocorre em:

    Sub UniqueCustomerRedux()

    Range("J1").Value = Range("D1").Value

    Range("A1").CurrentRegion.AdvancedFilter xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True

    End Sub

    Sub AllColumnsOneCustomer()

    Dim IRange As Range

    Dim ORange As Range

    Dim CRange As Range

    Set CRange = Cells(1, 1).Resize(2, 1)

    Set ORange = Cells(1, 3)

    Set IRange = Range("A1").Resize(FinalRow, 1)

    IRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=CRange, CopyToRange:=ORange

    End Sub

  5. Olá, gostaria da ajuda de vocês mais uma vez:

    Analisei o seguinte código, que gera um link para a planilha 1, na célula A1:

    Public Sub AddHyperlinks()

    ActiveSheet.Hyperlinks.Add _

    Anchor:=Range("A1"), _

    Address:="", _

    SubAddress:="'Plan1'!A1", _

    ScreenTip:=" Goes to Sheet1", _

    TextToDisplay:=" Link to Sheet1"

    End Sub

    No entanto, não compreendi a diferença entre Address e SubAddress. Gostaria de saber se é possível assim criar o seguinte:

    Dim var As String

    var = "asfg"

    Link para planilha de nome "var"

    O que seria de muita utilidade caso, por exemplo, cada planilha represente uma cidade e precisarmos de um formulário que, ao digitarmos o nome da cidade, abra a planiliha com seus dados.

  6. Comecei a aprender vba, mas não tenho o hábito de declarar variáveis, uma vez que, pelo que entendi, não é necessário.

    No entanto, fui tentar declarar e hoje tive o seguinte problema:

    O código:

    Option Explicit

    Sub test()

    Sub pla1 As Variant 'ou as string

    pla1 = ActiveWorkbook.FullName

    ActiveCell.FormulaR1C1 = pla1

    End Sub

    Resulta na mensagem:

    Erro de compilação: Era esperado : fim da instrução

    com o "as" selecionado

    O que ocorre?

    Obrigado.

  7. Olá, novamente.

    Estou acompanhando um tutorial de VBA para access e me deparei com o seguinte:

    Sub Test ()
         For Each Item In ActiveWorkbook.Sheets
             Debug.Print Item.name
         Next Item
    End Sub

    Não entendi o que isso faz, afinal, entendia item como, por exemplo, cada campo de um combobox/listbox, etc. Mas apenas no excel, não considerando formulários, o que quer dizer esses itens?

    Finalmente, sabendo o que são itens, o que significa Debug.Print?

  8. Cara, muito boa a resposta. Muito obrigado.

    Desse modo, então, quando eu precisar fazer relatório em uma planilha que envolva uma busca, por exemplo, em uma tabela com nomes, telefones e estados:

    João 000 0000 SP

    Rúbia 001 1234 MG

    José 612 2020 MG

    Natália 123 456 MT

    Pablo 777 1011 RJ

    Viviane 1221 3344 RS

    Larissa 1010 1234 SE

    melhor do que percorrer a tabela com while / .offset() e verificar se o nome naquela célula é o digitado; seria melhor eu usar o .find (what=Digitado, etc) e, quando encontrar o nome, copiar as duas próximas células, uma vez que isso significa que posso encontrar

    1º Um nome em qualquer lugar (não necessariamente em uma coluna específica).

    2º No primeiro caso, limitaria um while de linha = 0 a um tanto x; enquanto que, no segundo, posso adicionar um nome quando quiser que o código não precisa ser alterado. Certo?!

    Muito obrigado.

  9. Li a seguinte macro e gostaria de entender o que significa e como funciona o .find:

    Sub GoToMax ()

    Dim WorkRange As Range

    If TypeName ( Selection ) <> "Range" Then Exit Sub

    If Selection.Count = 1 Then

    Set WorkRange = Cells

    Else

    Set WorkRange = Selection

    End If

    MaxVal = Application.Max ( WorkRange )

    On Error Resume Next

    WorkRange.Find ( What:=MaxVal, _

    After:=WorkRange.Range ( "A1" ) , _

    LookIn:=xlValues, _

    LookAt:=xlPart, _

    SearchOrder:=xlByRows, _

    SearchDirection:=xlNext, MatchCase:=False _

    ) .Select

    If Err <> 0 Then MsgBox "Max value was not found: " _

    & MaxVal

    End Sub

    :( :Por que se usa o underline entre "What:=MaxVal," e "LookIn:" ?

    :unsure: O que significa "xl" em xlValues, xlPart, xlBy Rows e todas as vezes em que aparece em VBA?

    :rolleyes: O que é MatchCase?

    :blink: O que muda entre LookIn e LookAt?

    :lol: Posso fazer qualquer tipo de busca com .find?

  10. Criei um outro exemplo; de um formulário, eu entro com o nome e o mês e o programa retorna os produtos vendidos naquele mês por aquele vendedor:

    Eis o que não consigo programar:

    Pesquisa_Excel.JPG

    Para esta questão, criei o código abaixo:

    Sub pesquisa()

    Dim nome As String

    Dim mes As String

    Dim prod_vend As String

    Dim valor As Double

    Range("I2").Select

    nome = ActiveCell.value

    Range("A2").Select

    While ActiveCell.value <> ""

    If ActiveCell.value = nome Then

    'as variáveis recebem os valores restantes na tabela

    mes = ActiveCell.Offset(0, 1).value

    prod_vend = ActiveCell.Offset(0, 2).value

    valor = ActiveCell.Offset(0, 3).value

    'e tais valores são impressos na posição necessária

    Range("I6").value = prod_vend

    Range("I6").value = valor

    End If

    ActiveCell.Offset(1, 0).Select

    Wend

    End Sub

    Ao escrevermos o valor na célula I2 e executarmos, então a célula I6 guardará o valor; no entanto, o programa só guarda o último valor, pois as variáveis não são vetores. Daí, uma nova pergunta: como faço imprimir um valor em uma célula Ai, i=0,1,2,...,n que depende de quantos resultados já foram encontrados?

  11. Olá, preciso criar uma função que, digitando um nome na planilha1, ele seja pesquisado nas demais planilhas (banco de dados) e mostre na planilha1 os dados sobre tal nome.

    Para isso, preciso colocar na função, dentro do while (usado para varrer a outra planilha) que, ao encontrar o dado, copiar os valores sobre ele nessa planilha (tipo endereço, idade, cidade, etc) e imprimir na planilha1; gerando uma lista com os registros sobre tal nome.

    No entanto, para que isso seja possível, gostaria de saber qual é o comando que copia o valor de uma determinada célula de uma determinada planilha sem precisar ativar tal célula com o Range("A1").Select (A seleção não poderá ser usada pois serve como parâmetro no while ActiveCell.Value <> "" enquanto estiver varrendo os dados.

  12. Tenho uma dúvida em access; quando altero/crio um registro em formulário, ele será alterado/criado na tabela. No entanto, como criar a relação entre tabelas de modo que, alterando/criando o registro em uma tabela as alterações apareçam na outra?

    Por exemplo, se tenho uma tabela de nomes e uma que relaciona nomes a, por exemplo, endereços. Quando eu crio um novo nome na tabela "NOMES", ele aparecerá como opção na tabela de nomes e endereços. No entanto, preciso que, ao cadastrar um novo nome diretamente na tabela de nomes e endereços, ele apareça na listagem de nomes da tabela NOMES.

  13. Tentei fazer aqui um programa que pede números até que o utilizador introduza o número "-1", quando isso acontece, o computador calcula a média aritimética dos valores digitados (exceto o -1). Pois bem, para uma quantidade "n" pre-definida, no caso, coloquei "200", o programa roda. Mas, e se o usuário digitasse muito mais de duzentos valores? Como fazer um looping for "infitino" até que se digite -1?

    Meu programa:

    #include <stdio.h>
    #include <stdlib.h>
    
    int ask_numbers(int vet[]);
    
    int main (){
        int *p;
        p=malloc(200*sizeof(int));
        if(!p) {
               printf("falha na alocacao de memoria"); 
               exit(1);
               }       
        printf("A media aritimetica dos valores ditigados vale %d\n", ask_numbers(p));
        system("pause");
        free(p);
        return 0;
    }
    
    int ask_numbers(int vet[]){
        int i, soma=0, media=0;
        for (i=1;;i++){
            scanf("%d", &vet[i]); /*COMO FAZER PARA QUE O PROGRAMA FUNCIONE PARA n>200?*/
            soma+=vet[i];
            if (vet[i]==(-1)) {
            media=(soma+1)/i; 
            return media;
            } 
        }
    }

×
×
  • Criar Novo...