About Me

A minha foto
JRod - PORTUGAL
Microsoft [MVP] - Excel (10º ano consecutivo)
Ver o meu perfil completo
Com tecnologia do Blogger.

Seguidores

Estatisticas

Free Blog Counter

eXTReMe Tracker
2006-07-29
Se pretendermos colorir as células que contenham um determinado nome que se encontre numa lista (Range), podemos clicar na célula de outra lista que contém o nome requerido, como no exemplo:








Podemos utilizar o seguinte Código:


Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

    Dim tabela As Range
    Dim nomeLista As Range
    Dim cell As Range

    Set tabela = Range("B1:B20")
    Set nomeLista = Range("D10:H10")

    tabela.Interior.ColorIndex = 0
    If Target.Count = 1 Then
        If Not Intersect(Target, nomeLista) Is Nothing Then
            For Each cell In tabela
                If cell.Value = Target.Value Then
                    cell.Interior.ColorIndex = 5
                End If
            Next cell
        End If
    End If

End Sub


Nota: O Código deve ser inserido no próprio módulo da Sheet activa.


  • Tópicos relacionados:


  •  Cell Colors

     Color Palette & ColorIndex
    2006-07-25
    Se pretenderemos que o que digitarmos, por exemplo numa InputBox, apareça em maiúsculas e o respectivo conteúdo apareça numa determinada célula também com a mesma condição, podemos utilizar, via VBA, funções API do Windows.

    O Código:

    Declare Function GetKeyboardState Lib "user32" _
                                      (pbKeyState As Byte) As Long
    Declare Function SetKeyboardState Lib "user32" _
                                      (lppbKeyState As Byte) As Long

    Sub Abrir()
        Dim User As String
        Dim Res As Long
        Dim KBState(0 To 255) As Byte


        Res = GetKeyboardState(KBState(0))
        KBState(&H14) = 1  ' 1 para "on", 0 para "off"; &H14 (CapsLock) &H90 (NumLock)



        Sheets("Progressivo").Select

        Do While User = ""
            User = InputBox(Prompt:="Digite o seu nome e Enter para continuar", Title:="Nome")
        Loop

        Range("O34").Select
        ActiveCell.FormulaR1C1 = User
        
        KBState(&H14) = 0  ' 1 para "on", 0 para "off"

        Res = SetKeyboardState(KBState(0))

    End Sub



  • Tópicos relacionados:


  •   Num Lock, Caps Lock e Scroll Lock Toogle

      Windows API Functions
    2006-07-20
    Por vezes, podemos ter necessidade de saber qual foi o utilizador que acedeu e quando acedeu a uma determinada worksheet, nomeadamente quando se trabalha em rede.

    O Código:

    Private iNextRow As Long
    Const HIDDEN_SHEET As String = "Sheet3"    ' ou outro nome


    Private Sub Workbook_Open()
         With Worksheets(HIDDEN_SHEET)
             .Range("A1").Value = Environ("UserName")
             .Range("B1").Value = Format(Date + Time, _
                             "dd mmm yyyy hh:mm:ss")
         End With
         iNextRow = 2


    End Sub

    Private Sub Workbook_SheetChange(ByVal Sh As Object, _
                                     ByVal Target As Range)
         On Error GoTo wb_exit
         Application.EnableEvents = False
         If Sh.Name <> HIDDEN_SHEET Then
             With Worksheets(HIDDEN_SHEET)
                 .Range("A" & iNextRow).Value = Environ("UserName")
                 .Range("B" & iNextRow).Value = Format(Date + Time, _
                                         "dd mmm yyyy hh:mm:ss")
             End With
         End If


    wb_exit:
         Application.EnableEvents = True
    End Sub


    NOTA: Este código deve ser colocado no próprio workbook, porque é um evento dele. Para tal, clicar no ícone que está à esquerda do comando chamado "File", no Toolbar , com a tecla direita do rato e escolher a opção "View Code". Copiar o código para o editor de VBE. Depois, sair e gravar o ficheiro. Quando se abrir novamente, ver-se-á, na Sheet3 (ou naquela que determinámos no código), o nome do utilizador, a data e hora do último acesso.

  • Tópicos relacionados:


  •  Environ Function - Microsoft Visual Basic Help (com o editor de VBE activo)

     Environ Function (MSDN Library)

     Environ Function Example




    2006-07-03

    Pergunta efectuada por mail:

    Tenho uma lista de nomes de pessoas e por baixo a sua pontuação...

    O que pretendo é que por baixo da pontuação apareça a posição, do genero...



    Uma possível solução, será a seguinte fórmula em A3, com cópia até D3:

    =RANK(A2;$A$2:$D$2;0)& "º"

    E se se pretender que não haja o salto da terceira posição? Neste caso, poderá utilizar-se a seguinte fórmula, como Array, em A4, copiando até D4:

    {=RANK(A2;$A$2:$D$2)-(COUNTIF($A$2:$D$2;">"&A2)-SUM((1/COUNTIF($A$2:$D$2;$A$2:$D$2))*($A$2:$D$2>A2))) & "º"}


    Nota: Não esquecer que as chavetas são conseguidas através das teclas CTRL + SHIFT + ENTER na fórmula activa, porque se trata de um Array.

  • Tópicos relacionados:


  •   1 - Função RANK()

      2 - Função RANK()

      1 - Função COUNTIF()

      2 - Função COUNTIF()

      Array