criação objetos use...
 
Notifications
Clear all

criação objetos useform com um nome pré definido

16 Posts
3 Usuários
0 Reactions
3,299 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

tem como na hora de adicionar novos objetos em um UseForm ele já vim com uma nomeação pré definida?
tipo quando se adiciona um novo combobox ele é criado como ComboBox1, ComboBox2...

então facilitaria se pudesse definir um pré nome
e em vez de ComboBox1,2,3
ContasSetor1,2,3

ou pelo menos será que existe uma maneira de se renomear um conjunto de objetos todos ao mesmo tempo ?

é bastante chato ficar renomeando um por um quando se tem muitos

att

 
Postado : 03/09/2014 6:00 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Edcronos,

Bom Dia!

Bem... até aonde vai o meu conhecimento (que não é muito), acredito que isso não é possível. Sei que é possível, por exemplo, você ler a propriedade NAME de todos os objetos de um formulário de uma única vez em um laço FOR EACH.

 
Postado : 04/09/2014 6:47 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Conheço um pouco de VBA e tb acho chato nomear tantos controles... mas ... desconheço outro meio. Eu diria que não há como fazer isso de renomeá-los todos ao mesmo tempo, ou criar um nome padrão diferenciado ...

Boa sorte !

FF

 
Postado : 04/09/2014 7:44 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

é, então continuar com renomear de 1 a 1.

ola Wagner, sobre o laço eu sei, eu até já fiz uma macro que grava e le os valores dos objetos de um formulário em uma única célula sem ter que ficar me preocupando com os nomes deles.

coloca chato nisso fernando, eu estou "estava" querendo montar um form com mais de 200 objetos.
ainda tenho que aprender mais de vba.

eu tinha visto e recebi uma dica sobre controle do vba com opção de criação e edição das macros a parti de outra macro,
mas na época eu sabia muito pouco, e achei um bocado complicado, depois contornei oq queria fazer com outras opções
não me lembro bem como era, mas talvez com isso se possa criar e renomear os objetos tbm.

 
Postado : 04/09/2014 8:35 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Parece que há meios de criar esses controles em tempo de execução... mas daí já é mais avançado do que eu !
Tipo, eles não existem. e são criados e posicionados eqto o código roda...

Alguém aqui deve saber...

FF

 
Postado : 04/09/2014 8:50 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

exatamente isso fernando,
tinham me passado uns tutoriais bem detalhados,
mas tinha que adicionar algo no vba para funcionar e eu era bem iniciante mesmo

agora não sei nem pelo que procurar para achar o mesmo conteudo

 
Postado : 04/09/2014 9:44 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

é... infeliz mente ainda é muito complexo para mim...

http://www.cpearson.com/excel/vbe.aspx

 
Postado : 04/09/2014 10:03 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

...fui dar uma olhada para ver se dava para alterar os nomes no formulário exportado
e de certa forma é meio complicado

a estrutura do arquivo ".frx " é bem especifica, onde até o tamanho das palavras definem o codigo,
não é impossível, mas apenas para alguém que já lida com linguagem de programação mais avançada

bem, podem trancar o topico, esse ficou sem solução...

 
Postado : 04/09/2014 10:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No fórum tem um tópico com esse tema, uma pena, mas o arquivos anexos não abrem.
http://www.planilhando.com.br/forum/viewtopic.php?f=10&t=2858

Anexo Atualizado em 06/09/2014
Os que encontrei eu atualizei
Mauro Coutinho

 
Postado : 04/09/2014 10:59 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

realmente uma pena seria uma amostra já pronta do que se fazer

mas a parti dessa pagina informada deve dar para ter uma ideia de como proceder

http://www.tek-tips.com/faqs.cfm?fid=5757

o trecho do codigo abaixo é bem explicito em relação ao funcionamento

For X = 0 To 9
        Set NewTextBox = TempForm.designer.Controls.Add("Forms.textbox.1")
        With NewTextBox
            .Name = "MyTextBox" & X + 1
            .Top = 20 + (12 * X)
            .Left = 100
            .Width = 150
            .Height = 12
            .Font.Size = 7
            .Font.Name = "Tahoma"
            .BorderStyle = fmBorderStyleSingle
            .SpecialEffect = fmSpecialEffectFlat
        End With
    Next

nesse caso parece que alinha um em baixo do outro
com algum estudo deve dar para criar um codigo que a partir do primeiro objeto criado, tipo tamanho e posição se escolha quanto quer que se vai ficar em baixo ou um do lado do outro.

agora, se tiver uma maneira de pegar as características dos objetos automaticamente,
se pode criar o primeiro com tamanho, nome e posição inicial desejado, e a macro de criação pergunta a quantidade e alinhamento e cria os outros.

 
Postado : 04/09/2014 12:13 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Apenas complementando minha informação: O próprio Help do VBA no Excel, quando se busca ajuda da propriedade NAME dos objetos, diz que essa é uma propriedade somente de leitura em tempo de execução, quando se cria os objetos em tempo de design. Entretanto, ele também diz que você pode criar os objetos em tempo de execução e que, nesse caso, você pode dar o nome que quiser a propriedade NAME desses objetos criados em tempo de execução. Ou seja: Seria objetos virtuais, criados em tempo de execução, obviamente disparados por alguma rotina automática dentro do seu código.

O que vejo de chato nesse tipo de criação de objetos (em tempo de execução) é que aí você precisa não có controlar a propriedade name do mesmo e sim também as outras propriedades de aparência e forma do objeto criado dinamicamente. Também, me parece que para a criação de objetos dinamicamente em tempo de execução, é mais fácil com a utilização de Módulos de Classe, o que já é um assunto de maior complexidade e com pouquíssima literatura sobre o mesmo, muito embora também seja possível criar sem elas.

Abaixo, envio dois arquivos: 1 tutorial que peguei na internet e que, infelizmente, não sei o nome do autor para lhe conceder aqui os devidos créditos, e uma exemplo de criação de controles em tempo de execução em run time.

 
Postado : 04/09/2014 12:14 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

hum, quer dizer então que os objetos criados não tem uma estrutura que de para reutilizar fora do programa que o criou

a minha intenção era principalmente os nomes,
sobre as propriedades dos objetos "estava" com uma ideia de uma macro apenas para criação e alinhamento sequencial
algo que seria usado apenas para grandes quantidades de um mesmo padrão

tipo esse que eu tenho e quero reestruturar e adicionar mais opções, mas se não dá né, fazer oq

 
Postado : 04/09/2014 12:47 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Wagner, fiz um teste agora e dá sim para reutilizar os objetos não são virtuais o useform dá até para ser exportado
esse codigo daquela pagina que estava no post idicado pelo jose cria objetos que permanecem na planilha e nomeados de acordo

Sub MakeUserForm()
    Dim TempForm As Object
    Dim NewButton As MSForms.CommandButton
    Dim NewLabel As MSForms.Label
    Dim NewTextBox As MSForms.TextBox
    Dim NewOptionButton As MSForms.OptionButton
    Dim NewCheckBox As MSForms.CheckBox
    Dim X As Integer
    Dim Line As Integer
    Dim MyScript(4) As String

    'This is to stop screen flashing while creating form
    Application.VBE.MainWindow.Visible = False

    Set TempForm = ThisWorkbook.VBProject.VBComponents.Add(3)

    'Create the User Form
    With TempForm
        .Properties("Caption") = "My User Form"
        .Properties("Width") = 450
        .Properties("Height") = 300
    End With

    'Create 10 Labels
    For X = 0 To 9
        Set NewLabel = TempForm.designer.Controls.Add("Forms.label.1")
        With NewLabel
            .Name = "FieldLabel" & X + 1
            .Caption = "My Label " & X + 1
            .Top = 20 + (12 * X)
            .Left = 6
            .Width = 90
            .Height = 12
            .Font.Size = 7
            .Font.Name = "Tahoma"
            .BackColor = &H80FFFF
        End With
    Next

    'Create 10 Text Boxes
    For X = 0 To 9
        Set NewTextBox = TempForm.designer.Controls.Add("Forms.textbox.1")
        With NewTextBox
            .Name = "MyTextBox" & X + 1
            .Top = 20 + (12 * X)
            .Left = 100
            .Width = 150
            .Height = 12
            .Font.Size = 7
            .Font.Name = "Tahoma"
            .BorderStyle = fmBorderStyleSingle
            .SpecialEffect = fmSpecialEffectFlat
        End With
    Next

    'Create 10 Check Boxes
    For X = 0 To 9
        Set NewCheckBox = TempForm.designer.Controls.Add("Forms.checkbox.1")
        With NewCheckBox
            .Name = "MyCheck" & X + 1
            .Caption = ""
            .Top = 20 + (12 * X)
            .Left = 260
            .Width = 12
            .Height = 12
            .Font.Size = 7
            .Font.Name = "Tahoma"
            .BackColor = &HFF00&
        End With
    Next

    'Create 10 Labels -> result of Check Box
    For X = 0 To 9
        Set NewLabel = TempForm.designer.Controls.Add("Forms.label.1")
        With NewLabel
            .Name = "Result_Text" & X + 1
            .Caption = ""
            .Top = 20 + (12 * X)
            .Left = 280
            .Width = 150
            .Height = 12
            .Font.Size = 7
            .Font.Name = "Tahoma"
            .BackColor = &H80FFFF
        End With
    Next

    'Create Event Handler Code For Each Check Box
    '(True -> Upper Case of Text Box Value;False -> Lower Case of Text Box Value)
    For X = 0 To 9
        With TempForm.codemodule
            Line = .countoflines
            MyScript(0) = "Sub MyCheck" & X + 1 & "_Click()"
            MyScript(1) = "If .MyCheck" & X + 1 & " = true then"
            MyScript(2) = ".result_Text" & X + 1 & ".caption = ucase(.mytextbox" & X + 1 & ".value)"
            MyScript(3) = ".result_Text" & X + 1 & ".caption = lcase(.mytextbox" & X + 1 & ".value)"
            .insertlines Line + 3, MyScript(0)
            .insertlines Line + 2, "With Me"
            .insertlines Line + 3, MyScript(1)
            .insertlines Line + 4, MyScript(2)
            .insertlines Line + 5, "Else"
            .insertlines Line + 6, MyScript(3)
            .insertlines Line + 7, "End if"
            .insertlines Line + 8, "End With"
            .insertlines Line + 9, "End Sub"
        End With
    Next

    'Show the form
    VBA.UserForms.Add(TempForm.Name).Show

    'Delete the form (Optional)
    'ThisWorkbook.VBProject.VBComponents.Remove TempForm

End Sub

com algum trabalho deve dar para fazer uma macro de criação de estrutura já com os nomes escolhidos e alinhados uniformemente sem ter que ficar copiando e colando, nomeando e ajustando manualmente

Alguem sabe como capturar todas a propriedades de um objeto já existente
vou usar essas propiedade para a macro definir o padão

 
Postado : 04/09/2014 1:05 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

será que alguem pode me ajudar ?

ainda não sei oq é possível,
se for possível capturar as propriedade de um objeto já existente
e fazer a criação a partir dele já no formulário que se está trabalhando, vai ser muito mais viável e cômodo.

algo como uma userform de criação que se importa para o projeto inicial, e no final se exclui

mas creio que somente seria pratico para criação de objetos de propriedades repetidas e com quantidades elevadas.

se alguém tiver alguma ideia

 
Postado : 04/09/2014 6:56 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ninguém vai ajudar cm isso mesmo vou fazer do meu jeito

té mais

 
Postado : 06/09/2014 6:40 am
Página 1 / 2