Jump to content

Recommended Posts

Posted

AMIGOS:

Tenho uma página excel com a coluna "A", preenchida com nºs sequenciais, incrementados de 1.

A linha 2, contêm o nº 1, ... e a linha 301, contêm o nº 300.

Preciso que ao clicar no botão "gravar", o excell me grave na folha, na coluna "A", o nº imediatamente a seguir ao último numero existente, na coluna "B", o texto inserido na textbox2, na coluna "C" o texto da textbox3 e na coluna "D" o texto da textbox4. Todos estes valores ficam na mesma linha.

Julgo que consigo fazer passar os valores das textbox para a página de excell, mas não estou a conseguir inserir o valor da coluna "A".

Tentei códigos que me levem à última linha preenchida, mas não consigo transpôr de forma automática, o valor incrementado de 1, na célula imediatamente a seguir.

A ajuda possível será muito bem vinda.

Cumprimentos

Manuel António

Posted (edited)

boas

aqui vai um toturial do nosso amigo jpaulino a exemplificar:

http://pontonetpt.org/blogs/jpaulino/archive/2009/10/13/excel-dicas-de-vba-ciclos.aspx

e cod

Dim lastRow As Long

lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row

Cells(lastRow + 1, "A").Value = (Cells(Cells.Rows.Count, "A").End(xlUp).Value) + 1

Cells(lastRow + 1, "B").Value = TextBox1.Text

cumps

acao

Edited by acao
Posted

Dim lastRow As Long

lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row

Cells(lastRow + 1, "A").Value = (Cells(Cells.Rows.Count, "A").End(xlUp).Value) + 1

Cells(lastRow + 1, "B").Value = TextBox1.Text

Um excelente dia para ti, ACAO.

Andava de volta desta rotina e não entendia, porque não funcionava.

Com a tua dica, tudo ficou claro. A minha inexperiência, não me deixou ver que faltava o argumento "VALUE".

Tudo bate certinho, tal como eu desejava.

Obrigado pela tua disponibilidade.

Mas sem querer abusar, podes facultar-me uma dica de como formatar as células onde inserir estes valores com o traço grosso à esquerda e direita e com traço descontínuo em cima e em baixo?

É que, quando clico em gravar, faço o programa seguir para uma macro de formatação, mas formata-me sempre a mesma célula que não tem nada a ver com a célula onde são inseridos os valores.

Entendi que quando existe a instrução "selection", o computador fosse buscar a última selecção, mas isso não está a acontecer.

Antecipadamente grato.

Manuel António

Posted

ACAO,

Desculpa, mas não entendi.

Este é o código que estou a tentar uzar.

Private Sub CommandButton4_GRAVAR_Click()
Sheets("VIDEOTECA").Unprotect
Sheets("VIDEOTECA").Select

Dim lastRow As Long
lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
Cells(lastRow + 1, "A").Value = (Cells(Cells.Rows.Count, "A").End(xlUp).Value) + 1
	Call FORMATAR_VIDEO_A
Cells(lastRow + 1, "B").Value = TextBox2_TITULO.Text
	Call FORMATAR_VIDEO_B
Cells(lastRow + 1, "C").Value = TextBox3_GENERO.Text
	Call FORMATAR_VIDEO_C
Cells(lastRow + 1, "D").Value = TextBox4_LOCALIZ.Text
	Call FORMATAR_VIDEO_D

MsgBox " ----- REGISTO GRAVADO COM SUCESSO! -----"
TextBox2_TITULO = vbNullString
TextBox3_GENERO = vbNullString
TextBox4_LOCALIZ = vbNullString
End Sub

As macros "FORMATAR_VIDEO" foram gravadas no excell, definindo os limites e o tipo de letra.

Ao chamá-las na sub em cima, deveria definir-me os limites das células, bem como a cor da letra, só que isso não acontece.

Apenas me formata o tipo de letra.

Dás uma ajuda na correcção do erro?

Posted

Andava de volta desta rotina e não entendia, porque não funcionava.

Com a tua dica, tudo ficou claro. A minha inexperiência, não me deixou ver que faltava o argumento "VALUE".

Tudo bate certinho, tal como eu desejava.

Por defeito é devolvido a propriedade Value pelo que usar ou não é indiferente. No entanto eu recomendo e uso sempre essa indicação, como uma boa prática de programação, mas o erro não pode vir daí.

Não entendo no entanto porque utilizas Cells(Cells.Rows.Count, "A").End(xlUp).Value ainda já tens a indicação da última linha … isto deverá ser suficiente e mais eficiente:

Cells(lastRow + 1, "A").Value = Cells(lastRow, "A"). Value + 1

Ou seja, incrementa o valor na próxima linha.

Mas sem querer abusar, podes facultar-me uma dica de como formatar as células onde inserir estes valores com o traço grosso à esquerda e direita e com traço descontínuo em cima e em baixo?

É que, quando clico em gravar, faço o programa seguir para uma macro de formatação, mas formata-me sempre a mesma célula que não tem nada a ver com a célula onde são inseridos os valores.

A macro formata para as células em que foram gravadas e por isso é preciso adaptar.

Tenta assim:

Dim rng As Range
Set rng = Range(Cells(lastRow + 1, "a"), Cells(lastRow + 1, "b"))

With rng.Borders(xlEdgeLeft)
	.LineStyle = xlContinuous
	.Weight = xlMedium
End With
With rng.Borders(xlEdgeTop)
	.LineStyle = xlContinuous
	.Weight = xlHairline
End With
With rng.Borders(xlEdgeBottom)
	.LineStyle = xlContinuous
	.Weight = xlHairline
End With
With rng.Borders(xlEdgeRight)
	.LineStyle = xlContinuous
	.Weight = xlMedium
End With
Posted

PAULINO.

Mais uma vêz, muito obrigado pela ajuda.

As tuas dicas funcionam na perfeição.

Mas na formatação, com algumas adaptações, tenho as duas colunas "b" e "c" a funcionar tal qual pretendo, depois de lhe inserir a formatação para o tipo de letra.

Mas na coluna "a" e "c", a declaração da variavel "rng", apenas me aceita duas colunas. Posso fazer a declaração da variável com outro nome que não "rng" para as outras colunas, utilizando a mesma estrutura? É que se utilizar de novo "rng", diz-me que a variável já está declarada e dá-me erro. Com outros nomes, não consegui que funcionasse.

Obrigado.

Cumprimentos

Manuel António

Posted (edited)

Não entendo no entanto porque utilizas Cells(Cells.Rows.Count, "A").End(xlUp).Value ainda já tens a indicação da última linha … isto deverá ser suficiente e mais eficiente:

Cells(lastRow + 1, "A").Value = Cells(lastRow, "A"). Value + 1

Ou seja, incrementa o valor na próxima linha.

[/code]

jPaulino não leves a mal este post, pois os teus conhecimentos são imensos,de grande valor e grande entreajuda que é de louvar pois não é facil encontrar alguém assim, mas estas-te a contra-dizer provavelmente deverás corrigir o que estiver menos bem.

http://pontonetpt.org/blogs/jpaulino/archive/2009/10/13/excel-dicas-de-vba-ciclos.aspx

cumps

acao

Edited by acao
Posted

PAULINO.

Segue o que tenho feito, incluindo a formatação das colunas "B" e "C". Não consigo que me aceite a formatação para a coluna "A" e "D", com letra igual mas em formato bold.

Private Sub CommandButton4_GRAVAR_Click()

Sheets("VIDEOTECA").Unprotect

Sheets("VIDEOTECA").Select

Dim lastRow As Long

lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row

Cells(lastRow + 1, "A").Value = Cells(lastRow, "A").Value + 1

Dim rng As Range

Set rng = Range(Cells(lastRow + 1, "B"), Cells(lastRow + 1, "C"))

With rng.Font

.Name = "Calibri"

.FontStyle = "Normal"

.Size = 11

.ThemeFont = xlThemeFontMinor

End With

With rng.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.Weight = xlThick

End With

With rng.Borders(xlEdgeTop)

.LineStyle = xlDot

.Weight = xlThin

End With

With rng.Borders(xlEdgeBottom)

.LineStyle = xlDot

.Weight = xlThin

End With

With rng.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.Weight = xlThick

End With

With rng.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.ColorIndex = xlAutomatic

.Weight = xlThick

End With

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Cells(lastRow + 1, "B").Value = TextBox2_TITULO.Text

Cells(lastRow + 1, "C").Value = TextBox3_GENERO.Text

Cells(lastRow + 1, "D").Value = TextBox4_LOCALIZ.Text

MsgBox " ----- REGISTO GRAVADO COM SUCESSO! -----"

TextBox2_TITULO = vbNullString

TextBox3_GENERO = vbNullString

TextBox4_LOCALIZ = vbNullString

End Sub

Este código inclui as alterações que falei.

Se incluir o código que posto a seguir com cor azul, formata-me toda a linha com letra negrito, mas eu preciso do negrito, apenas na coluna "A" e "D".

Dim fmlin As Range

Set fmlin = Range(Cells(lastRow + 1, "A"), Cells(lastRow + 1, "D"))

With fmlin.Font

.Name = "Calibri"

.FontStyle = "Negrito"

.Size = 11

.ThemeFont = xlThemeFontMinor

End With

With fmlin.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.Weight = xlThick

End With

With fmlin.Borders(xlEdgeTop)

.LineStyle = xlDot

.Weight = xlThin

End With

With fmlin.Borders(xlEdgeBottom)

.LineStyle = xlDot

.Weight = xlThin

End With

With fmlin.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.Weight = xlThick

End With

With fmlin.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.ColorIndex = xlAutomatic

.Weight = xlThick

End With

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Cumprimentos

Manuel António

Posted

Paulino.

Já resolvi a formatação conforme desejava. Bastou colocar as rotinas de formatação na ordem inversa, aquela que te enviei.

Não percebo bem porquê, mas funciona.

Se no entanto puderes dar um toque de perfeição nessa quantidade enorme de linhas, agradeço.

Muito obrigado, pela ajuda.

Posted

jPaulino não leves a mal este post, pois os teus conhecimentos são imensos,de grande valor e grande entreajuda que é de louvar pois não é facil encontrar alguém assim, mas estas-te a contra-dizer provavelmente deverás corrigir o que estiver menos bem.

http://pontonetpt.org/blogs/jpaulino/archive/2009/10/13/excel-dicas-de-vba-ciclos.aspx

(Cells(Cells.Rows.Count, "A").End(xlUp).Value) + 1

Eu li mal pois tinhas uma parênteses que não são necessários:

Cells(Cells.Rows.Count, "A").End(xlUp).Value + 1

Retirando os parênteses exteriores (que não servem para nada) fica igual 🙂

O resto parece-me estar correcto.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.