variable valor una ultima sirve seleccionar rango que para macro hoja hasta espaƱol desde datos con columna celda buscar asignar activesheet activa excel-vba comments

excel-vba - valor - seleccionar hoja excel vba



AddComment en varias hojas vba Excel (5)

De la documentación de Excel

Puede agregar notas a celdas individuales mediante el uso de comentarios

Puede ver en la pestaña ''Revisar'' de Excel que, cuando selecciona varias hojas, no puede crear un comentario. Supongo que esto tiene que ver con las partes internas de Excel que determinan qué celda debe tener un comentario asignado.

Aquí hay una función a la que puede llamar para asignar un comentario a una celda determinada, incluso si tiene varias hojas seleccionadas.

Este submarino también elimina la necesidad de probar si ya existe un comentario , simplemente pasa un nuevo comentario a una celda que ya tiene uno.

Sub UpdateComment(Rng As Range, Cmnt As String) Application.ScreenUpdating = False '' Get currently selected sheets Dim mySheets As Sheets: Set mySheets = ThisWorkbook.Windows(1).SelectedSheets '' Set current selection to just one sheet: this is where error is avoided ThisWorkbook.Sheets(1).Select '' Set Comment, new if doesn''t exist or changed if it does If Rng.Comment Is Nothing Then Rng.AddComment Cmnt Else Rng.Comment.Text Cmnt End If '' Tidy up: re-select sheets & enable screen updating mySheets.Select Application.ScreenUpdating = True End Sub

Úselo así en su código:

'' ... your previous code Set rng = selectedSheet.Cells(1, columnIndex) UpdateComment rng, "In standard report this crash starts to deploy from ..."

Para recorrer todas las hojas seleccionadas

Dim sh As Worksheet For Each sh In ThisWorkbook.Windows(1).SelectedSheets Set rng = sh.Cells(1, columnIndex) UpdateComment rng, "In standard report this crash starts to deploy from ..." Next sh

La sintaxis AddComment funciona en la primera hoja seleccionada en el libro de trabajo, pero para la siguiente me da este error: Error 1004 "Error definido por la aplicación o definido por el objeto". No sé por qué se bloquea si se seleccionaron varias hojas y funciona solo para la primera seleccionada. ¿Alguien tiene alguna idea?

If selectedSheet.Cells(7, columnIndex).value <> 100 Then selectedSheet.Cells(7, columnIndex).Interior.ColorIndex = 3 If standardReportFilePath <> "" Then ''not using the Standard Report Evalution algorithm If VerifyStandardReportFile(selectedSheet.Name, selectedSheet.Cells(1, columnIndex).value, wbk, amplitude, missingCrashes) = True Then selectedSheet.Cells(1, columnIndex).Interior.ColorIndex = 36 '' color the crash cell with yellow Set rng = selectedSheet.Cells(1, columnIndex) If rng.Comment Is Nothing Then **rng.AddComment "In Standard Report this crash starts to deploy from " & CStr(amplitude) & " amplitude"** Else rng.Comment.Text "In Standard Report this crash starts to deploy from " & CStr(amplitude) & " amplitude" End If End If End If End If End If

Un conjunto alternativo de código que muestra el problema. (Ejecuta esto con tres hojas de trabajo en blanco en un nuevo libro de trabajo):

Sub test() Dim ws As Worksheet Dim Rng As Range ''Running code with a single sheet selected Worksheets("Sheet1").Select ''Code that shows issue - this will work Set ws = Worksheets("Sheet2") Set Rng = ws.Cells(1, 1) If Rng.Comment Is Nothing Then Rng.AddComment "xxx" End If ''Get rid of comment again Rng.Comment.Delete ''Running code with multiple sheets selected Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Select ''Code that shows issue - will crash on the "AddComment" Set ws = Worksheets("Sheet2") Set Rng = ws.Cells(1, 1) If Rng.Comment Is Nothing Then Rng.AddComment "xxx" End If End Sub


Encontré una solución, pero todavía no sé por qué ocurre este problema. Por alguna razón, el error ocurre cuando tiene más de una hoja de trabajo seleccionada. La solución es ... Seleccionar una hoja antes de agregar comentarios con someSheet.Select . Al final de la macro, puede intentar seleccionar todas las hojas seleccionadas previamente de ser necesario.


Lo que sí entiendo, gracias al comentario de Yoweks, es: estás recorriendo todas las hojas seleccionadas, verificando algo, estableciendo comentarios (lo que te da los problemas, porque no funciona con más de una hoja seleccionada) y quieres la opción previamente seleccionada hojas que se seleccionarán después.

Puede guardar la hoja previamente seleccionada en una variable, seleccionar una de ellas, ejecutar su código y luego seleccionar de nuevo todas las hojas seleccionadas previamente. Por favor, intente con el siguiente código:

Sub Comments() Dim WsArr As Sheets, WS As Worksheet, ColIdx As Long ColIdx = 7 Set WsArr = ActiveWorkbook.Windows(1).SelectedSheets WsArr(1).Select For Each WS In WsArr ''*** your logic Set Rng = WS.Cells(1, ColIdx) If Rng.Comment Is Nothing Then Rng.AddComment "In Standard Report this crash starts to deploy from " & CStr(amplitude) & " amplitude" Else Rng.Comment.Text "Changed T" End If Next WS WsArr.Select End Sub


Recuerdo caso generalmente similar (no pude hacer algo con el código), tratando de resolverlo y finalmente descubrí que ...

Tenga en cuenta que si tiene varias hojas seleccionadas, el botón "Nuevo comentario" en la cinta está inactivo , por lo que no puede hacerlo desde el código si no puede hacerlo manualmente.
¿Por qué? - No me preguntes. Veo una buena solución anterior, que parece ser la única forma de lograr lo que necesita.


Tuve el mismo problema al intentar hacer funcionar una función de comentarios, así que en lugar de tratar de resolverlo por escenario, decidí hacer una general; llamar según sea necesario.

Sub General_Functions_Comments(InCell As Range, TxtComment As String, Optional IsMergedAnalyzed As Boolean) Dim IsComment As Comment Dim RangeFixedMerged As Range If InCell.MergeCells = False Or IsMergedAnalyzed = True Then '' 3. If InCell.MergeCells = False With InCell Set IsComment = .Comment If IsComment Is Nothing Then '' 1. If Iscomment Is Nothing .AddComment.Text Text:=TxtComment .Comment.Shape.TextFrame.AutoSize = True .Comment.Visible = False Else '' 1. If Iscomment Is Nothing If InStr(.Comment.Text, TxtComment) Then '' 2. If InStr(.Comment.Text, TxtComment) Else '' 2. If InStr(.Comment.Text, TxtComment) .Comment.Text .Comment.Text & Chr(10) & TxtComment .Comment.Shape.TextFrame.AutoSize = True .Comment.Visible = False End If '' 2. If InStr(.Comment.Text, TxtComment) End If '' 1. If Iscomment Is Nothing End With Else '' 3. If InCell.MergeCells = False Set RangeFixedMerged = InCell.Cells(1, 1) Call General_Functions_Comments(RangeFixedMerged, TxtComment, True) Set RangeFixedMerged = Nothing End If '' 3. If InCell.MergeCells = False End Sub

En tu código

If standardReportFilePath <> "" Then ''not using the Standard Report Evalution algorithm If VerifyStandardReportFile(selectedSheet.Name, selectedSheet.Cells(1, columnIndex).Value, wbk, amplitude, missingCrashes) = True Then selectedSheet.Cells(1, columnIndex).Interior.ColorIndex = 36 '' color the crash cell with yellow Set Rng = selectedSheet.Cells(1, columnIndex) If Rng.Comment Is Nothing Then Call General_Functions_Comments(Rng, "In Standard Report this crash starts to deploy from " & CStr(amplitude) & " amplitude", True) Else: Call General_Functions_Comments(Rng, "In Standard Report this crash starts to deploy from " & CStr(amplitude) & " amplitude", True) End If End If End If End If End If

* Aparte de la pregunta, ¿por qué establecer una declaración if, else si ambas harán lo mismo?