Jump to content
_FOCUS_

Copiar para Celula Variavel

Recommended Posts

_FOCUS_

Viva Pessoal,

Tenho um UserForm contendo uma Textbox destinado a Notas e considerações, o que pretendo é que quando grave, o conteúdo dessa textbox seja copiado para a Coluna Notas que se encontra numa tabela, mas primeiro é necessário procurar a linha onde se encontra o cliente e depois copiar para a célula destinada as notas. é possivel faze-lo??? de que forma??

Obrigado

Share this post


Link to post
Share on other sites
HIT_Braga

Boas

Procuras pelo cliente através de um ciclo FOR...NEXT por exemplo (incrementas as linhas e a coluna não), ou seja está a evoluir no sentido vertical da folha.

Quando o encontras sabes que está na linha x. Depois só tens de escrever na coluna Y linha X.

Sds,

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
_FOCUS_

Obrigado HIT, mas percebo pouco de VBA, não podes colocar um exemplo para que seja mais fácil compreender?

Share this post


Link to post
Share on other sites
HIT_Braga

Boas,

Podes tentar algo do género:

For i = 1 To 5
If Worksheets("Folha1").Cells(i, 1).Value = "Paulo" Then
Worksheets("Folha1").Cells(i, 3).Value = 1
ElseIf Worksheets("Folha1").Cells(i, 1).Value = "Pedro" Then
Worksheets("Folha1").Cells(i, 3).Value = 3
End If
Next i

O limite(5) do ciclo for deve ser o número de clientes que tens inseridos, para isto não andar à procura sem nada.

Depois FOLHA1 é o nome da folha em Excel que queres aceder(no meu caso está em Tuga logo Folha1)

Cells(row,coll), ou seja irá aceder à celula que fica na linha x  e coluna y, no caso linha i (incrementada pelo ciclo FOR) e coluna fixa 1.

Para contares quantos clientes tens podes fazer um ciclo While

Dim Conta_Clientes As Integer
Dim i As Integer
contador = 0
i = 1
While Worksheets("Folha1").Cells(i, 1).Value <> ""
Conta_Clientes = Conta_Clientes + 1
i = i + 1
Wend
MsgBox ("Clientes encontrados:" & Conta_Clientes)

Enquanto a celula não for vazia, incrementa o contador e vai iterando linha a linha sempre na mesma coluna.

Sds,

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
_FOCUS_

Ok pessoal estou mais esclarecido, a ver se vou conseguir obrigadissimo  ;) ;)

Share this post


Link to post
Share on other sites
_FOCUS_

Viva pessoal,

Podem ajudar-me por favor, estou a usar o seguinte codigo para fazer o que pedi a cima:

Private Sub CommandButton1_Click()
For i = 1 To 6000
If Worksheets("BaseDados").Cells(i, 1).Value = Range("O1") Then
Worksheets("BaseDados").Cells(i, 11).Value = TextBox9.Value
Worksheets("BaseDados").Cells(i, 12).Value = TextBox10.Value
Worksheets("BaseDados").Cells(i, 13).Value = TextBox11.Value
Worksheets("BaseDados").Cells(i, 14).Value = TextBox12.Value
End If
Next i
End Sub

o Certo é que quando faço testar atravês do VBA o macro corre correctamente, e faz o que é suposto, quando tento fazer no excel, quando faço gravar com o botão destinado para o efeito, ele não faz a copia para as celulas, esta algo errado no codigo??

Share this post


Link to post
Share on other sites
HIT_Braga

Boas

Acho ,penso de que, o teu problema está nesta linha

If Worksheets("BaseDados").Cells(i, 1).Value = Range("O1") Then

estás a comparar com não sei o que "=range("01") "...

Deves colocar algo como

If Worksheets("BaseDados").Cells(i, 1).Value = 20 Then"

ou no teu caso tens mesmo que ter uma célula no excel que se chame "O1".

E atenção é o que tens é O1 e não zero1

sds,

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
_FOCUS_

bem eu tenho o seguinte UserFom

http://img823.imageshack.us/img823/1870/formui.jpg

Os numeros de clientes estão listados na ComboBox, e  Quando selecciono o numero cliente esse valor vai para a célula O1 da folha base de dados.

o que queria escrever com o esse código era: Percorrer a coluna 1 da folha base de dados e quando encontrar o valor igual ao da O1 (que é o valor seleccionado na combobox), então copia os valores das TextBox para o locais correctos.

Terá alguma relação com o facto do UserForm abrir numa folha diferente da Folha Base dados????, isto faz-me um confusão tremenda, porque se o codigo estivesse totalmente errado, então quando testasse no VBA daria erro, mas o facto é que faz o que é devido

Share this post


Link to post
Share on other sites
_FOCUS_

Caríssimos,

Estou a ficar fulo com isto  😡 ,

bom modifiquei o codigo neste linha:

If Worksheets("BaseDados").Cells(i, 1).Value = Range("O1") Then

não sei se faz algum sentido mas alterei para

If Worksheets("BaseDados").Cells(i, 1).Value = Range("BaseDados!O1") Then

o Certo é que no meu pc ficou tudo a funcionar como é suposto  :cheesygrin:

Agora o problema que me deixou furioso, fui testar no pc da minha colega que tem Excel 2007, e eis a minha surpresa que num do botões que supostamente deveria esconder e ir para um folha que tem este pequeno codigo.

UserForm2.Hide
Worksheets("Tab").Activate

Aparece a mensagem que o Excel encontrou um problema e será encerrado. mas que raio se passa ??????

Helppppppppppppppppppppp!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Share this post


Link to post
Share on other sites
HIT_Braga

Boas.

Não sei o que se poderá passar ao certo, mas VBA em Excel2003 e VBA Excel2007, tem destas coisa. Algumas coisas foram alteradas pelo que o código num funciona e em outro encontra problemas.

Se vais ter várias versões de Excel a funcionar com essa folha de calculo, sugiro que passes mesmo a pente fino o código.

Mas melhor do que eu algum Guru deverá esclarecer.

A mim já me aconteçeu o mesmo algumas vezes. Por exemplo uma das coisas diferentes de um para outro é o tratamento visual da página(border,shades,color.etc). Também existem funções que já não dão em 2007 :happybday:

Sds,

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
_FOCUS_

Antes de mais obrigado pela respota HIT, mas o problema é ainda mais grave pois nas 3 maquinas que testei todas tem o excel 2007  :nono1:, contudo ja detectei um problema, pois tinha no UserForm um objecto multipage(não sei o nome ;))  e num separador tinha um Grafico feito através Microsoft Chart xx (penso que é assim que se chama). pois bem, eliminei o grafico e no outro pc ja abre sem problemas. agora continuo com problemas no 3º pc (Uff!!!!! isto esta a dar trabalho  :cheesygrin:), nesse pc diz-me que as macros estão danificadas e que foram desligadas, activei o separador do programador nesse pc e uma coisa que achei muito estranho foi o facto do botão das macros estarem inactivos não sendo possivel activar  🤔, vou proceder a reinstalação do office para ver no que da.

 

Share this post


Link to post
Share on other sites
_FOCUS_

Actualização: depois de reinstalar o office no PC o erro acontece ja consigo gravar macros, só que me da o erro ao executar o codigo:

Private Sub CommandButton1_Click()
For i = 1 To 6000
If Worksheets("BaseDados").Cells(i, 1).Value = Range("BaseDados!O1") Then
Worksheets("BaseDados").Cells(i, 11).Value = TextBox9.Value
Worksheets("BaseDados").Cells(i, 12).Value = TextBox10.Value
Worksheets("BaseDados").Cells(i, 13).Value = TextBox11.Value
Worksheets("BaseDados").Cells(i, 14).Value = TextBox12.Value
End If
Next i
End Sub

As vezes da-me uma vontade de  :wallbash:, como é possivel este codigo estar a funcionar nos outros PC e neste com a mesma versão do Office não????? Meu Deus AJUDEEEEEEEEEEEEEEEEEEE-MMMMMMMMMMMEEEEEEEEE

Share this post


Link to post
Share on other sites
HIT_Braga

Boas não desesperes.

Olha as macro desactivadas possivelmente tem a ver com estar activadas ou não no Excel Options, mas esse problema tá resolvido.

Testei o teu código e bomba fixe em Office 2007 PT. Para te poder ajudar tenho de ver o erro.

Sabes fazer debug com breaks ao código certo? Aquela cena de colocar uma bolinha vermelha ao lado da linha?

De que zona do pais és?

Coloca uma mensagem com o erro que te dá, e se possivel em que linha ele breka.

Sds,

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
jpaulino

Mas que erro está a dar?

A versão do Excel é igual? O sistema operativos e igual?

Já activaste as macros para todos os ficheiros(macro security) ?

Share this post


Link to post
Share on other sites
_FOCUS_

Viva segue o printscreen do Erro:

http://imageshack.us/photo/my-images/703/erro1al.jpg

e aqui vai o ficheiro praticamente concluído apenas retirei os clientes por razões óbvias, assim que pedia que pudessem testar a ver se vos da algum erro.

http://www.filefactory.com/file/cc550b0/n/DividaClientesExemplo.xlsm

jpaulino como disse todos os PC usam o Office 2007, e todos usam Windows Xp e tambem ja activei macros para todos os ficheiros no security.

Share this post


Link to post
Share on other sites
jpaulino

Em primeiro lugar a forma "mais correcta" de referenciar uma worksheet é Worksheets("BaseDados").Range("O1") e não Range("BaseDados!O1"), mas o problema não deve ser esse.

Além disso, e como já te tinha dito antes, não deves percorrer um número de posições fixas (neste caso 6000) mas sim o número de posições que tens em lista. Neste caso seria algo como:

Dim lastRow As Long
lastRow = Worksheets("BaseDados").Cells(Cells.Rows.Count, "A").End(xlUp).Row

For i = 1 To lastRow
    ' código
Next

Que irá fazer um ciclo em 5600 posições e não 6000.

Mas ainda assim não precisas de fazer um ciclo em 5600 linhas para procurar um valor, podes sempre usar o método find:

With Worksheets("BaseDados")
        
    Dim rg As Range
    Set rg = Range("a:a").Find(What:=Range("O1"))

    If Not rg Is Nothing Then
         rg.Columns("c").Value = "aaa"
         rg.Columns("e").Value = "bbb"
    End If
   
End With

Para terminar, sempre que se fazem alterações visuais ao utilizador (apagar, escrever, etc), deves sempre iniciar o código por:

Application.ScreenUpdating = False 

e terminar com:

Application.ScreenUpdating = True 

Lê este artigo do meu blog: Excel: Dicas de VBA - Performance

Share this post


Link to post
Share on other sites
_FOCUS_

Parece que este código é a melhor solução para o meu caso,

With Worksheets("BaseDados")
        
    Dim rg As Range
    Set rg = Range("a:a").Find(What:=Range("O1"))

    If Not rg Is Nothing Then
         rg.Columns("c").Value = "aaa"
         rg.Columns("e").Value = "bbb"
    End If
   
End With

Só uma pequena questão, devo alterar os valores "aaa" e "bbb" pelo valores das textboxes que tenho no Form certo?. Não ha nada como saber do que se  fala  😳

Share this post


Link to post
Share on other sites

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.