De entrada sigue los consejos que te recomienda
Elektro...
...para continuar, la utilidad práctica de utilizar dos bucles es no requerir un condicional... esto es, al disponer de dos bucles en vez de solo uno, ya queda debidamente condicionado.
...luego me has leído solo parcialmente:
...necesitas 2 bucles, en el externo se escriben/generan los unos, antes del bucle interno siempre escribe un 1 y a la salida del interno otro 1, y en el bucle interno los ceros.
...si bien el bucle interno comienza (por asi decirlo), un carácter '1' antes del bucle y acaba un carácter '1' después del bucle...
Es mas, con el tiempo y a medida que entiendas mejor la programación, verías que el bucle interno puede ser substituído por una línea con un método de string... pero para el principiante, el uso de bucles es necesario para que aprenda la lógica subyacente.
El código entonces, quedaría algo así como:
triangulo = "1" & vbNewLine ' la cadena debe empezar ya con la primera línea, pues es la única que no lleva d '1s', que es lo que dibuja cada bucle externo.
' por eso el bucle empieza ya con 2... y si 'filas = 1' no entra pués en el bucle.
For n = 2 To filas-1 ' <---- ojo: -1, pues la ultima linea no lleva '0s', se debe generar aparte.
triangulo.append("1")
For i = 1 To n -2 ' <----- ojo: -2, pues esa es la cuenta de '0s' en cada linea, los dos '1s' no se escriben aqui.
triangulo.append("0")
Next
triangulo.append("1" & vbNewLine)
Next
' la ultima linea se compone de solo '1s'.
triangulo.append(string("1", filas)) ' en este punto n=filas
messagebox.show(triangulo)
Como señalaba Elektro, mucho mejor si se coloca dentro de una función y esta recibe 1 o mas parámetros...
Private Function TrianguloTexto(byval Filas as byte, otrosparametros, optional byref Separador as string = VBNewLine) as string
dim Triangulo as string = "1" & separador
dim n as byte, i as byte
' básicamente copiar el código anterior aquí y remplazar los nombres d elas variables a como aquí se denominen
return Triangulo
End function
Luego basta invocar la función con el dato introducido por el usuario, algo así como:
dim filas as integer
do
filas = inputbox... ' OJO: No hace falta un msgbox previo, inputbox, también puede mostrar un mensaje de texto...
loop while filas...
messagebox.Show(TriangularTexto( (filas))
..y para terminar, tal como señala
Elektro, no tenemos una precisa descripción del problema. Por ejemplo pudiera ser que la imagen completa requiera espacios, esto es, que todas las líneas dispongan de la misma cantidad de caracteres, para que visualmente el resultado se vea como un rombo... a falta de una descripción exacta, no puede proporcionarse más solución que la dada.
p.d.: Editado, donde puse 'rombo' (párrafo anterior) en realidad debe poner 'triángulo isósceles'.