Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por atcgfc
Posts
#71548
Bom dia,

Antes de mais, referir que tenho aprendido muito neste fórum.

Montei uma estrutura de decisão para apagar conteúdo de uma tabela, no entanto tem dado o erro 13, ou seja o que eu quero é o seguinte se o conteúdo naquela linha for vazio acabou a estrutura de decisão, mas caso não seja vazio selecionar a linha e as linhas abaixo e apagar o conteúdo.
Código: Selecionar todos
'Apagar conteúdo da folha c/Estrutura de decisão
If Sheets("Folha1").Range("A12:G12").Value = "" Then
MsgBox "Sem conteúdo para apagar"
GoTo Acabou

Else: Sheets("Folha1").Range("A12:G12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
MsgBox "Apagado conteúdo"

Acabou:
End If
Cumprimentos,

Álvaro Gonçalves
Por osvaldomp
#71549
Experimente:
Código: Selecionar todos
If Application.CountA(Range("A12:G12")) <> 0 Then Range("A12:G" & Cells(Rows.Count, 1).End(3).Row).Value = ""
Por atcgfc
Posts
#71551
Como sempre, funcionou às mil maravilhas.

Muito obrigado, no entanto consegue explicar-me porquê que nenhum do códigos que inseri não funcionaram ?

Tentei com estes dois
Código: Selecionar todos
If Sheets("Folha1").Range("A12:G12").Value <> "" Then
Sheets("Folha1").Range("A12:G12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
MsgBox "Apagado conteúdo"

Else: GoTo Acabou

Acabou:
End If
Código: Selecionar todos
If Sheets("Folha1").Range("A12:G12").Value = "" Then
MsgBox "Sem conteúdo para apagar"
GoTo Acabou

Else: Sheets("Folha1").Range("A12:G12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
MsgBox "Apagado conteúdo"

Acabou:
End If
Cumprimentos,

Álvaro Gonçalves
Por osvaldomp
#71555
Olá, Álvaro.

If ActiveSheet.Range("A12:G12").Value = "" Then
Utilizada na forma acima, a Propriedade Value só pode se referir a uma única célula, e não a um intervalo com múltiplas células, por isso retorna erro.

Para verificar o preenchimento de um intervalo há opções como as funções de planilha =CONT.SE(), =CONT.NÚM(), =CONTAR.VAZIO() e =CONT.VALORES().

E foi a função em VBA que corresponde a CONT.VALORES que utilizei no código que eu sugeri ~~~> Application.CountA(Range("A12:G12"))
Por atcgfc
Posts
#71556
Muito obrigado Osvaldo.

Optei pelo Código que sugeriste com o end if na linha posterior.

No entanto, os códigos que tinha com uma pequena alteração também resultaram.
Código: Selecionar todos
If Sheets("Folha1").Range("A12").Value = "" Then
MsgBox "Sem conteúdo para apagar"
GoTo Acabou

Else: Sheets("Folha1").Range("A12:G12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
MsgBox "Apagado conteúdo"

Acabou:
End If
Código: Selecionar todos
If Application.CountA(Range("A12:G12")) <> 0 Then
Range("A12:G" & Cells(Rows.Count, 1).End(3).Row).Value = ""
End If

If Sheets("Folha1").Range("A12").Value <> "" Then
Sheets("Folha1").Range("A12:G12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
MsgBox "Apagado conteúdo"

Else: GoTo Acabou

Acabou:
End If
Cumprimentos,

Álvaro Gonçalves
Por osvaldomp
#71558
Os comandos GoTo Acabou ... Acabou: e Else: GoTo Acabou ... Acabou: são desnecessários, pois a instrução If ...Then ... Else é mais esperta e inteligente do que você supõe.

Exclua esses comandos que citei, execute os seus códigos no modo Depurar (via F8) e observe.
Por atcgfc
Posts
#72141
Olá Osvaldo,

Pode ajudar-me ? Tou com um problema na Macro que desenvolvi com este código.

O código está nas linhas infra.

O problema é o seguinte, se executar linha a linha, através do F8, ele executa a estrutura de decisão.

Se for através do botão ele nem sempre apaga a linha, as vezes coloca a partir das linhas seguintes.
Código: Selecionar todos
Sub SAP_EC_Ficheiro1()

'Definição de variáveis
Dim caminho As Variant
Dim ficheiro_sap As Workbook, ficheiro_excel As Workbook
Dim contarlinhas As Long

Application.ScreenUpdating = False

'Estrutura de decisão (if/Then) para apagar o conteúdo da folha
If Sheets("Folha1").Application.CountA(Range("A12:G12")) <> 0 Then
Sheets("folha1").Range("A12:G" & Cells(Rows.Count, 1).End(3).Row).Value = ""
End If

' Abrir Shell da localização do ficheiro
caminho = Application.GetOpenFilename

'Estrutura de decisão
If caminho = False Then Exit Sub
Workbooks.Open caminho, , True

'Definição dos ficheiros
Set ficheiro_excel = ThisWorkbook
Set ficheiro_sap = ActiveWorkbook

'Apagar linhas e colunas do ficheiro_sap
ficheiro_sap.Sheets(1).Columns(4).Delete
ficheiro_sap.Sheets(1).Columns(2).Delete
ficheiro_sap.Sheets(1).Columns(1).Delete
ficheiro_sap.Sheets(1).Rows("1:13").Delete

'Copiar erros do sap para ficheiro excel
ficheiro_sap.Sheets(1).Range("A1").CurrentRegion.Copy ficheiro_excel.Sheets("Folha1").Range("A12")

'Contar linhas exportadas do ficheiro SAP
contarlinhas = ficheiro_sap.Sheets(1).Range("a1").CurrentRegion.Rows.Count

'Mensagem a aparecer com o número de linhas na folha
MsgBox "Extraídas " & contarlinhas & " linhas de erro do SAP", vb0k0nly, "EMMA" & Now()

Application.CutCopyMode = False

'Fechar ficheiro sap
ficheiro_sap.Close savechanges:=False

End Sub

Cumprimentos,

Álvaro
Por osvaldomp
#72145
Olá, Álvaro.

O erro que você relatou ocorre porque este comando ~~~> Cells(Rows.Count, 1).End(3).Row busca a última linha com conteúdo na coluna A da planilha ativa ao executar a macro, que se não for a Folha1 então poderá apresentar resultado não desejado.

Para buscar a última linha da Folha1, mesmo que ela não seja a planilha ativa, é preciso referenciá-la, conforme em vermelho abaixo.
Sheets("Folha1").Range("A12:G" & Sheets("Folha1").Cells(Rows.Count, 1).End(3).Row).Value = ""
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord