manuel antonio Posted October 15, 2012 at 11:33 AM Report #479208 Posted October 15, 2012 at 11:33 AM 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
acao Posted October 15, 2012 at 08:02 PM Report #479251 Posted October 15, 2012 at 08:02 PM (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 October 15, 2012 at 08:34 PM by acao
manuel antonio Posted October 16, 2012 at 09:28 AM Author Report #479311 Posted October 16, 2012 at 09:28 AM 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
acao Posted October 16, 2012 at 10:57 AM Report #479318 Posted October 16, 2012 at 10:57 AM boas troca por : ActiveCell cumps acao
manuel antonio Posted October 16, 2012 at 11:23 PM Author Report #479433 Posted October 16, 2012 at 11:23 PM 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?
jpaulino Posted October 17, 2012 at 07:42 AM Report #479445 Posted October 17, 2012 at 07:42 AM 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
manuel antonio Posted October 17, 2012 at 11:54 AM Author Report #479472 Posted October 17, 2012 at 11:54 AM 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
jpaulino Posted October 17, 2012 at 12:28 PM Report #479478 Posted October 17, 2012 at 12:28 PM Mostra lá o que tens feito
acao Posted October 17, 2012 at 02:17 PM Report #479500 Posted October 17, 2012 at 02:17 PM (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 October 17, 2012 at 02:33 PM by acao
manuel antonio Posted October 17, 2012 at 03:23 PM Author Report #479523 Posted October 17, 2012 at 03:23 PM 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
manuel antonio Posted October 17, 2012 at 03:57 PM Author Report #479531 Posted October 17, 2012 at 03:57 PM 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.
jpaulino Posted October 17, 2012 at 04:03 PM Report #479534 Posted October 17, 2012 at 04:03 PM 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.
manuel antonio Posted October 17, 2012 at 09:52 PM Author Report #479559 Posted October 17, 2012 at 09:52 PM Boa noite, ACAO E JPAULINO. Os meus agradecimentos a ambos pelos ensinamentos aqui facultados. Vocês, à semelhança de outros membros do PAP são fantásticos. Muito obrigado
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now