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
2007-11-15
209: VBA - Application.InputBox()
Num newsgroup, colocaram a seguinte questão:
"Numa macro, o comando:
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select, selecciona todas as células com informação.
Esta informação pode depois ser copiada com o comando:
Selection.Copy
O que pretendia era usar o primeiro comando, mas de forma que ele só me seleccionasse os dados contidos numa coluna especifica.

Por Exemplo, a coluna "C" tanto pode ter 10 linhas com dados como 20 e só pretendo a selecção desses dados, todos os outros são secundários para o efeito.

Será que é possível?"


Através do seguinte exemplo, podemos equacionar a questão e ver o resultado:










O Código do exemplo:

'---------------------------------------------------------------------------------------
' Procedure : Copia_Range_Variavel
' DateTime  : 15-11-2007 19:04
' Author    : JRod
' Purpose   : Copiar um Range Variável
'---------------------------------------------------------------------------------------
'
Sub Copia_Range_Variavel()

    Dim myCel1, myCel2, myCel3 As Range
    Dim Str1, Str2, Str3 As String

    On Error Resume Next
    Set myCel1 = Application.InputBox _
                 (prompt:="Confirme a célula activa, ou seleccione outra célula" _
                  & Chr(10) & "Cancel: Sai !", _
                  Title:=" Copia Range", _
                  Default:=ActiveCell.Address, Type:=8)
    On Error GoTo 0

    If myCel1 Is Nothing Then
        MsgBox "Desistiu"
        Exit Sub
    End If

    Set myCel2 = Application.InputBox _
                 (prompt:="Confirme a célula activa, ou seleccione outra célula" _
                  & Chr(10) & "Cancel: Sai !", _
                  Title:=" Copia Range", _
                  Default:=ActiveCell.Address, Type:=8)
    On Error GoTo 0

    If myCel2 Is Nothing Then
        MsgBox "Desistiu"
        Exit Sub
    End If

    Str1 = myCel1.Address
    Str2 = myCel2.Address

    Range(Str1 & ":" & Str2).Select
    Selection.Copy
    Range("F1").PasteSpecial (xlPasteValues)
    Application.CutCopyMode = False

End Sub


Para colocar o código, acede-se ao editor do VB do Excel, com ALT + F11, cria-se um módulo e copia-se o código para lá. Depois, para o executar, podemos utilizar ALT + F8.


A imagem do que se pretende:



Tópicos relacionados: