Rescatar comentarios ordenados por columna

24/02/2009 - 03:50 por Francesca Brasso | Informe spam
Hola estoy usando un código que me permite rescatar los comentarios de todas
las hojas de un libro pero los busca por fila. Quisiera poder buscarlos por
columna. Supongo que es posible.
¿Se entiende? Si no se entiende me dicen y trataré de ser más clara. El
código es básicamente este:

Dim Celda As Comment
Dim i As Long
i = 3
For J = 1 To ActiveWorkbook.Sheets.Count
Sheets(J).Select
For Each Celda In Worksheets(J).Comments
Worksheets(ActiveWorkbook.Sheets.Count).Range("A" & i) =
Replace(ActiveSheet.Name, vbLf, "")
Worksheets(ActiveWorkbook.Sheets.Count).Range("B" & i) =
Replace(Celda.Parent, vbLf, "")
Worksheets(ActiveWorkbook.Sheets.Count).Range("C" & i) =
Replace(Celda.Text, vbLf, " ")
i = i + 1
Next Celda
Next J

Gracias
Fran
 

Leer las respuestas

#1 Francesca Brasso
24/02/2009 - 16:46 | Informe spam
Gracias Héctor, pero tu código me supera. No tengo tantos conocimientos en
VBA como para estar preparada para hacer una adaptación con ese código. Creí
que era más sencillo cambiar el escaneo de filas a columnas.
Me parece que lo voy a dejar como está.
Saludos
Fran

"Héctor Miguel" escribió en el mensaje de
noticias news:upGM%
hola, Francesca !

(hasta donde se) "por filas" es el orden "natural" como excel "arregla" la
informacion de un "rango de datos" (es decir)
siempre usa las hojas (incluso para los (re)calculos) desde la esquina
superior izquierda hacia la esquina inferior derecha

si usas una instruccion como la siguiente: msgbox
activesheet.cells.specialcells(xlcelltypecomments).address
notaras que en primer lugar aparecera la fila "menor" (independientemente
de en cual columna este el primer comentario)

el siguiente ejemplo, integra una matriz de dos dimensiones (columna y
fila) por cada celda con comentarios
despues, hace un "sorteo-burbuja" para ubicar las columnas de menor a
mayor (ajustando tambien la segunda dimension)
y finalmente, devuelve una matriz "ordenada" por columnas, aunque algunas
filas "pierden su orden natural" :-((

por lo pronto, devuelve el resultado de cada celda en la ventana de
inmediato (alt + G desde el editor de vba)
asi que la instruccion: debug.print... (etc. etc. etc.) es la parte del
bucle final que deberas adaptar para tu rutina original
(ademas de incluir un bucle (mas) externo para el recorrido por cada una
de las hojas (el ejemplo solo trabaja la hoja activa)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

copia lo siguiente en un modulo de codigo estandar...

Option Base 1
Sub MatrizDeComentariosPorColumna()
Dim Celda As Range, n As Integer, Men(32) As Integer, May(32) As Integer,
_
Pri As Integer, Ult As Integer, n1 As Integer, n2 As Integer, _
x1 As Integer, x2 As Integer, Prov As Integer
With ActiveSheet.Comments: ReDim Mat(.Count, .Count): End With
For Each Celda In ActiveSheet.Cells.SpecialCells(xlCellTypeComments)
n = n + 1: Mat(n, 1) = Celda.Column: Mat(n, 2) = Celda.Row: Next
Pri = LBound(Mat): Ult = UBound(Mat): n = 1: Men(n) = Pri: May(n) = Ult
Do
If Ult > Pri Then
Prov = Mat(Ult, 1): n1 = Pri - 1: n2 = Ult
Do
Do: n1 = n1 + 1: Loop Until Mat(n1, 1) >= Prov
Do: n2 = n2 - 1: Loop Until n2 = Pri Or Mat(n2, 1) <= Prov
x1 = Mat(n1, 1): Mat(n1, 1) = Mat(n2, 1): Mat(n2, 1) = x1
x2 = Mat(n1, 2): Mat(n1, 2) = Mat(n2, 2): Mat(n2, 2) = x2
Loop Until n2 <= n1
x1 = Mat(n2, 1): Mat(n2, 1) = Mat(n1, 1): Mat(n1, 1) = Mat(Ult, 1):
Mat(Ult, 1) = x1
x2 = Mat(n2, 2): Mat(n2, 2) = Mat(n1, 2): Mat(n1, 2) = Mat(Ult, 2):
Mat(Ult, 2) = x2: n = n + 1
If (n1 - Pri) > (Ult - n1) Then
Men(n) = Pri: May(n) = n1 - 1: Pri = n1 + 1
Else: Men(n) = n1 + 1: May(n) = Ult: Ult = n1 - 1
End If
Else: Pri = Men(n): Ult = May(n): n = n - 1: If n = 0 Then Exit Do
End If
Loop
For n = 1 To UBound(Mat)
Debug.Print Cells(Mat(n, 2), Mat(n, 1)).Address
Next
End Sub

__ OP __
... estoy usando un codigo que me permite rescatar los comentarios de
todas las hojas de un libro
pero los busca por fila. Quisiera poder buscarlos por columna. Supongo
que es posible. Se entiende?
Si no se entiende me dicen y tratare de ser mas clara. El codigo es
basicamente este:
Dim Celda As Comment
Dim i As Long
i = 3
For J = 1 To ActiveWorkbook.Sheets.Count
Sheets(J).Select
For Each Celda In Worksheets(J).Comments
Worksheets(ActiveWorkbook.Sheets.Count).Range("A" & i) >> Replace(ActiveSheet.Name, vbLf, "")
Worksheets(ActiveWorkbook.Sheets.Count).Range("B" & i) >> Replace(Celda.Parent, vbLf, "")
Worksheets(ActiveWorkbook.Sheets.Count).Range("C" & i) >> Replace(Celda.Text, vbLf, " ")
i = i + 1
Next Celda
Next J




Preguntas similares