Ir para conteúdo
Fórum Script Brasil

MarlonS

Membros
  • Total de itens

    20
  • Registro em

  • Última visita

Tudo que MarlonS postou

  1. Boa pergunta. Também procuro pela resposta e, deixo aqui este comentário visando atualizar a discussão. O VB - não o VBA, isto é, fora do excel/access - permite a criação de executáveis e a importação de dados do access (deve valer para excel), mas não sei trabalhar com ele.
  2. Cria-se um array que guarda o nome das planilhas em um for até .count: vetor(i) = sheets(i).name depois comparamos o vetor procurado com o array: if procurado = vetor (i) then sheets(i).select
  3. 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.
  4. 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: 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.
  5. Olá, Imagine que, em uma macro, eu faça Sub late() Dim uorde As Object 'uorde pois se trata de um documento do word Set uorde = CreateObject("Word.Application") With uorde .Visible = True .Workbooks.Add End With End Sub Se, posteriormente, quero voltar a trabalhar com esse objeto, como faço?
  6. 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? 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.
  7. Olá, Lobismano e obrigado, funcionou. Também tentei ActiveSheet.PageSetup.PrintArea = Cells e parece ter funcionado.
  8. 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
  9. Continuando em meus tutoriais, o seguinte também não funcionou: Sub area_imp() ActiveSheet.PageSetup.printArea = "A1:B5" 'seleciona A1:B5 como área de impressão ActiveSheet.Names ( "Print_Area" ).delete 'não funciona 'activesheet.printarea.delete também não funciona End Sub
  10. 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.
  11. 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.
  12. 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?
  13. 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.
  14. 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?
  15. 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?
  16. 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:
  17. 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.
  18. 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.
  19. 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...