Hola, Buen Año a todos!!!
tengo una pregunta con respecto a Visual Basic.
estoy tratando de eliminar un elemento de un array ejem:
Dim arrdat(4)
arrdat(0) = "carlos"
arrdat(1) = "fernando"
arrdat(2) = "laura"
arrdat(3) = "manuel"
arrdat(4) = "marina"
para luego eleminar el elemento del array arrdat(1) pero que ahora el array quede con un elemento menos y no del mismo tamaño como era originalmente. entonces quedaría asi:
Dim arrdat(3)
arrdat(0) = "carlos"
arrdat(1) = "laura"
arrdat(2) = "manuel"
arrdat(3) = "marina"
tiene alguna idea de como hacero?
haz un bucle que te mire los objetos del array uno a uno y si coincide con el nombre que quieres borar que sobreescriba en ese espacio el siguiente nombre y asi consecutivamente....algo como...
Dim i, j as integer 'Contadores
Dim Nombre As String
For i = 1 To "cantidad de objetos en el array"
if array(i) = Nombre Then
for j = 1 to "objetos array - i"
If not (i+1) > cantidad de objetos en el array then array(i) = array(i+1) else: array(i) = ""
next j
end if
next i
asi lo que harías sería encontrar el nombre, y sobreescribir el hueco de ese nombre con el que esta en el siguiente hueco, uno a uno hasta llegar al final... claro que al hacer eso te quedará el último hueco vacío....
espero que te sirva ;D
Mofificado.
PD: Lo de [If not (i+1) > cantidad de objetos en el array] es para que no te de error porque sino al llegar al último sería array(4) = array(5) cuando array(5) no existe.... además si el nombre se repite en la lista te los va borrar todos, ya que después de salir del bucle de "j" sigue el de "i"....para evitarlo podrias poner "exit sub" después del next j.... intenta comprender el código y modifícalo a tu gusto ;D
te doy la idea, y tu lo codeas, es facil...
en principio hay una funcion para cambiarle el numero de elementos del array, recuerdo que hace unos años lo intente y no funciono...
bueno; pero lo que puedes hacer es: como conoces la posicion que quieres eliminar; pues, empiezas a copiar de una posicion adelante de donde vas a empezar a cortar... y con una bifurcacion (if-then), puedes controlar que no haga nada cuando llege a la posicion final, y en ella sobreescriba con "" (cadena vacia..)
de ese modo podrias "correr" los elemntos conociendo la posicion desde donde quieres cortar... claro que no estamos alterando en nada el numero de elementos del array, solo le colocamos al ultimo una cadena vacia...
es mas que facil...son 4 lineas de codigo...
hola te pongo un ejemplo, tenes que redimencionar el array , vos encargate de entenderlo
Option Explicit
Dim MyArray() As String
Private Sub Command1_Click()
If DeleteItem(5) Then
ImprimirArray
MsgBox "El Array tiene " & UBound(MyArray) & " Items"
Else
MsgBox "El indice esta fuera del intervalo"
End If
End Sub
Private Sub Form_Load()
Dim i As Long
ReDim MyArray(0)
For i = 0 To 9
AddItem "Item" & i
Next
ImprimirArray
MsgBox "El Array tiene " & UBound(MyArray) & " Items"
End Sub
Private Sub AddItem(Text As String)
Dim Count As Long
Count = UBound(MyArray)
MyArray(Count) = Text
ReDim Preserve MyArray(Count + 1)
End Sub
Private Function DeleteItem(ByVal Index As Long) As Boolean
Dim i As Long
Dim Count As Long
Count = UBound(MyArray)
If Index <= Count And Index >= LBound(MyArray) Then
For i = Index To Count - 1
MyArray(i) = MyArray(i + 1)
Next
ReDim Preserve MyArray(Count - 1)
DeleteItem = True
End If
End Function
Private Sub ImprimirArray()
Dim i As Long
Dim Count As Long
Count = UBound(MyArray)
For i = 0 To Count
Debug.Print MyArray(i)
Next
End Sub
Saludos