TEXTBOX - CARREGAMENTO COM COMBINACAO DE ARRAYS

THIAGOM 22/04/2010 01:45:37
#339893
Como fazer um array que retorne em 80 textboxes o conteúdo respectivo de 80 células ( A1, A2, ..., A80) e virse-versa?:

normalmente faço assim, sem array :

[txt-color=#0000f0]Range([Ô]A1[Ô]) = Me.TextBox1 Me.TextBox1 = Range([Ô]A1[Ô])
Range([Ô]A2[Ô]) = Me.TextBox2 Me.TextBox2 = Range([Ô]A2[Ô])
... ...
Range([Ô]A80[Ô]) = Me.TextBox80 Me.TextBox80= Range([Ô]A80[Ô]) [/txt-color]
(esse é para [Ô]GRAVAR[Ô] após Click em botão) (esse é para [Ô]CARREGAR[Ô] no início do form)


a solução seria um array dentro de outro?, e como seria?
EDERMIR 22/04/2010 08:15:03
#339900
Gravar:
for Wx = 1 to 80
Range([Ô]A[Ô] & Wx) = Me.Textbox1(Wx).text
next Wx

Carregar:
for Wx = 1 to 80
Me.Textbox1(Wx).text = Range([Ô]A[Ô] & Wx)
next Wx
ASHKATCHUP 22/04/2010 08:23:20
#339902
Resposta escolhida
A solução vai funcionar se você tiver um array de controles... senão, acho que não vai dar certo.
WILLVIDAL 22/04/2010 09:33:16
#339906
Public Function carregar(Form As Form)
Dim txt As Control
DIM I as integer
dim a() as string

i=0
For Each txt In Form.Controls
If TypeOf txt Is TextBox Then a(i) = txt.text
I=I+1
Next chk

End Function

no click de um botão(por exemplo) chame essa função assim:

carregar (form1) => nome do formulário que vc esta trabalhando, desse modo funciona mesmo q os textos não estejam em modo array


THIAGOM 23/04/2010 08:28:13
#340010
EDEMIR eu já pensei e testei isso, mas é uma espécie de comando misto. Procesar todas as txtbox de uma vez com 1 tipo de [Ô]retorno[Ô], com uma array de controle dá pra fazer.

WILLVIDAL, eu entendi, mas como vincular o [Ô]carregamento[Ô] às respectivas células?

Então tem que ser um array de controle (como disse o ASHKETCUP) e um array de células, sendo que a de controle [Ô]carrega[Ô] pelo conteúdo das respectivas células, que têm conteúdos diferentes:

[txt-color=#0000f0]Sub Form_INITIALIZE[/txt-color]( )
[txt-color=#0000f0]TextBox1 = Range([Ô]A1[Ô])
.
.
TextBox80 = Range([Ô]A80[Ô])

End Sub[/txt-color]
(isso no INITIALIZE)

e

[txt-color=#0000f0]Sub Command1_CLICK( )

Range([Ô]A1[Ô]) = TextBox1
.
.
Range([Ô]A80[Ô]) = TextBox80

End Sub[/txt-color]

(isso depois de um Click em Botão)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Então são dois códigos: 1 para o evento INITIALIZE. e outro para o evento CLICK de um botão, estes eu sei como colocar, o negócio é a linha decomando.
EDERMIR 23/04/2010 10:13:41
#340017
THIAGOM.

Se você já testou a forma sugerida, qual foi o problema que você encontrou?

Sua dificuldade é carregar TEXTBOXes com valores de células e vice-versa. Onde está o problema visto que você já resolveu? O tempo de carregamento está alto?
THIAGOM 23/04/2010 11:25:34
#340024
Valeu a idéia é essa mesmo, mas dessa forma que vc sugeriu só funciona a range pode ser com Cells também, mas os textboxes só com array de controle, como o WILLVIDAL sugeriu e como o ASHKETCUP falou . O que não estou conseguindo fazer é uma relação entre as células e os texboxes. A maneira que vc sugeriu já testei, mas os textboxes desta forma não vai..., lembre-se o nome das texboxes são TextBox1,TextBox2..., TextBox80.

Ainda não dá pra avaliar o tempo de carregamento, pois não consegui funcionar ainda., mas creio que não vou ter problemas com isto.

Você consegue fazer um array de controle de textboxes dentro da sua idéia?...
ASHKATCHUP 23/04/2010 11:33:54
#340025
A solução abaixo ficaria lenta, mas funcionaria


Private Sub Form_Load()
Dim iContador As Integer
[ô]
For iContador = 1 To 80
Range([Ô]A[Ô] & iContador) = func_Retorna_Valor_Textbox(iContador)
Next
[ô]
End Sub

Private Function func_Retorna_Valor_Textbox(iNumero As Integer) As String
Dim sNomeTextBox As String
Dim objControle As Control
[ô]
sNomeTextBox = [Ô]Textbox[Ô] & iNumero
func_Retorna_Valor_Textbox = [Ô][Ô]
[ô]
For Each objControle In Me.Controls
[ô]
If UCase(objControle.Name) = UCase(sNomeTextBox) Then
func_Retorna_Valor_Textbox = objControle.Text
Exit For
End If
[ô]
Next
[ô]
End Function
THIAGOM 23/04/2010 14:11:39
#340042
Tentei, mas os dados das células se apagam, e os dados das txbox não passam para as células. Fiz um teste com 10 textboxes e um botão:

no evento LOAD: as células são apagadas e as txbox ficam intactas
no evento CLICK: TBM

Os nomes estão corretos, e coloquei o loop de 1 a 10, mas aconteceu o que eu disse acima.

Ao inicializar(load) as txboxes tem que retornar o valor da respectiva célula. e ao apertar um botão, os dados, novos ou não, das textboxes tem que passar para as respectivas células...
O resultado tem que ser como na intenção do EDEMIR num post anterior. Não tem problema utilizar uma function, mas o resultado tem que ser este que falei. Basicamente são dois códigos, um para o carregamneto outro para gravação nas células..., e quantas functions forem necessárias...blz

Tá esquentando...
ASHKATCHUP 23/04/2010 14:14:45
#340043
Não tem como você postar esse projeto que você fez com 10 textboxes?
THIAGOM 23/04/2010 14:25:51
#340045
[txt-color=#0000f0]Private Sub UserForm_Initialize()
Dim iContador As Integer
[ô]
For iContador = 1 To 10
Range([Ô]A[Ô] & iContador) = func_Retorna_Valor_Textbox(iContador)
Next

[ô]
End Sub

Private Function func_Retorna_Valor_Textbox(iNumero As Integer) As String
Dim sNomeTextBox As String
Dim objControle As Control
[ô]
sNomeTextBox = [Ô]Textbbox[Ô] & iNumero
func_Retorna_Valor_Textbox = [Ô][Ô]
[ô]
For Each objControle In Me.Controls
[ô]
If UCase(objControle.Name) = UCase(sNomeTextBox) Then
func_Retorna_Valor_Textbox = objControle.Text
Exit For
End If
[ô]
Next
End Function[/txt-color]
Página 1 de 3 [24 registro(s)]
Tópico encerrado , respostas não são mais permitidas