Notifications
Clear all

Perdendo área de transferência ao executar Sub

7 Posts
3 Usuários
0 Reactions
1,895 Visualizações
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

A área de transferência se esvazia quando mudo de um Worksheet para outro dentro do mesmo Workbook, por exemplo, na Plan1 eu dou um Ctrl + C em alguma célula, vou para a Plan2 e dou um CTrl + V mas não cola nada, com o botão direito a opção "Colar" fica desabilitada.
Notei que esse problema ocorre quando o código abaixo é executado, esse código está dentro do Sheet e executa sempre que mudo de planilha.
Existe um jeito para não perder o conteúdo da área de transferência ao executar esse código?

Private Sub Worksheet_Activate()
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
End Sub

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 18/02/2015 6:21 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

na Plan1 eu dou um Ctrl + C em alguma célula, vou para a Plan2 e dou um CTrl + V mas não cola nada,

Você está dizendo que sem usar os recursos VBA e com o arquivo salvo no formato xls ou xlsx (considerando que não há macros que contribui para tal), não consegue colar o que está no clipboard?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/02/2015 6:55 am
(@gtsalikis)
Posts: 2373
Noble Member
 

A tua dúvida não ficou muito clara, mas faça o seguinte:

Private Sub Worksheet_Activate()

Dim copia As Range
Dim cola As Boolean

Application.ScreenUpdating = False
Application.EnableEvents = False
If Application.CutCopyMode = xlCopy Then
    Sheets("Plan1").Select
    Set copia = Selection
    Sheets("Plan2").Select
    cola = True
End If

ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

If cola Then copia.Copy

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Embora, este código eu fiz como exemplo, para as 2 planilhas que vc citou. Talvez vc precise adaptar para todas elas. Nesse caso, use uma lógica semelhante, mas com o evento Sheet_Activade de EstaPasta_de_Trabalho

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 18/02/2015 5:44 pm
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Bom dia!!

na Plan1 eu dou um Ctrl + C em alguma célula, vou para a Plan2 e dou um CTrl + V mas não cola nada,

Você está dizendo que sem usar os recursos VBA e com o arquivo salvo no formato xls ou xlsx (considerando que não há macros que contribui para tal), não consegue colar o que está no clipboard?

Att

Não consigo copiar o conteúdo de um Sheet para outro Sheet no mesmo Workbook, somente consigo se eu desativo o conteúdo de Worksheet_Activate(), mas eu preciso que o conteúdo do mesmo seja executado.

A tua dúvida não ficou muito clara, mas faça o seguinte:

Private Sub Worksheet_Activate()

Dim copia As Range
Dim cola As Boolean

Application.ScreenUpdating = False
Application.EnableEvents = False
If Application.CutCopyMode = xlCopy Then
    Sheets("Plan1").Select
    Set copia = Selection
    Sheets("Plan2").Select
    cola = True
End If

ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

If cola Then copia.Copy

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Embora, este código eu fiz como exemplo, para as 2 planilhas que vc citou. Talvez vc precise adaptar para todas elas. Nesse caso, use uma lógica semelhante, mas com o evento Sheet_Activade de EstaPasta_de_Trabalho

Mas não parece ser muito viável pois se eu tiver 10 Sheets em um Workbook, imagina quantas combinações de Select("Plan") terei que fazer, o problema é que essas quatro linhas

ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

em Worksheet_Activate() fazem perder o que foi copiado para a área de transferencia, assim não consigo colar o conteúdo de um sheet para outro sheet no mesmo workbook.

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 19/02/2015 12:38 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Explicando melhor, a resposta vem mais precisa:

Coloque este código em EstaPasta_de_trabalho

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Static ws_old   As String
Static ws_new   As String
Dim copia       As Range
Dim cola        As Boolean

Application.ScreenUpdating = False
Application.EnableEvents = False

If ws_new = vbNullString Then
    ws_new = ActiveSheet.Name
Else
    ws_old = ws_new
    ws_new = ActiveSheet.Name
End If
    
If Application.CutCopyMode = xlCopy Then
    Sheets(ws_old).Select
    Set copia = Selection
    Sheets(ws_new).Select
    cola = True
End If

ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = True
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

If cola Then copia.Copy

Application.EnableEvents = True
Application.ScreenUpdating = True

Msgbox "Se a resposta ajudou, por favor, clique na mãozinha como agradecimento."

End Sub

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 19/02/2015 4:06 pm
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Explicando melhor, a resposta vem mais precisa:

Coloque este código em EstaPasta_de_trabalho

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Static ws_old   As String
Static ws_new   As String
Dim copia       As Range
Dim cola        As Boolean

Application.ScreenUpdating = False
Application.EnableEvents = False

If ws_new = vbNullString Then
    ws_new = ActiveSheet.Name
Else
    ws_old = ws_new
    ws_new = ActiveSheet.Name
End If
    
If Application.CutCopyMode = xlCopy Then
    Sheets(ws_old).Select
    Set copia = Selection
    Sheets(ws_new).Select
    cola = True
End If

ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = True
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

If cola Then copia.Copy

Application.EnableEvents = True
Application.ScreenUpdating = True

Msgbox "Se a resposta ajudou, por favor, clique na mãozinha como agradecimento."

End Sub

Valeu pela força parceiro, mas não deu certo, o problema de não colar continua, eu estou copiando o conteúdo da planilha 1 que possui esse código:

Private Sub Worksheet_Activate()
If Not Application.DisplayFullScreen Then Application.DisplayFullScreen = True
If Not ActiveWindow.DisplayWorkbookTabs Then ActiveWindow.DisplayWorkbookTabs = True
If Not ActiveWindow.DisplayHorizontalScrollBar Then ActiveWindow.DisplayHorizontalScrollBar = True
If Not ActiveWindow.DisplayVerticalScrollBar Then ActiveWindow.DisplayVerticalScrollBar = True
If Application.DisplayFormulaBar Then Application.DisplayFormulaBar = False
If ActiveWindow.DisplayHeadings Then ActiveWindow.DisplayHeadings = False
If ActiveWindow.DisplayGridlines Then ActiveWindow.DisplayGridlines = False
End Sub

Para a planilha 2 que possui esse código:

Private Sub Worksheet_Activate()
If Not Application.DisplayFullScreen Then Application.DisplayFullScreen = True
If ActiveWindow.DisplayWorkbookTabs Then ActiveWindow.DisplayWorkbookTabs = False
If ActiveWindow.DisplayHorizontalScrollBar Then ActiveWindow.DisplayHorizontalScrollBar = False
If ActiveWindow.DisplayVerticalScrollBar Then ActiveWindow.DisplayVerticalScrollBar = False
If Application.DisplayFormulaBar Then Application.DisplayFormulaBar = False
If ActiveWindow.DisplayHeadings Then ActiveWindow.DisplayHeadings = False
If ActiveWindow.DisplayGridlines Then ActiveWindow.DisplayGridlines = False
If Not Sheets("Gráficos").Visible Then Sheets("Gráficos").Visible = True
End Sub

Mas não está colando, a área de transferência (Clipboard) é limpa quando passo para a planilha 2.

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 24/02/2015 6:36 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Eu testei várias vezes e funcionou.

Ou vc está colocando o código no lugar errado, ou tem alguma outra coisa na tua planilha.

Envie o modelo compactado.

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 24/02/2015 12:55 pm