#excel #vba #comments
#excel #vba #Комментарии
Вопрос:
даже не уверен, как задать этот вопрос. у меня есть график обслуживания Excel (лист 1). настройка с оборудованием в столбце A (заморожена) и датами в строке 1. когда я включаю действия по обслуживанию в расписание, мне часто нужно добавлять комментарии.
на втором листе действия по обслуживанию возрастают. вот несколько столбцов: дата, основное действие и количество работников. некоторые столбцы на листе 2 содержат информацию, которую я вручную ввожу на листе 1 (расписание) в качестве комментариев, количество работников — это то, что я всегда добавляю в комментарий. это значительно сэкономило бы время, если бы мне не нужно было вводить все это. что я хотел бы создать: на листе 2 указана дата, когда будет выполнено основное действие, на листе 1 даты указаны сверху. я хотел бы, чтобы макрос находил столбец даты на листе 1, который соответствует дате на листе 2, затем находил строку на листе 1, которая соответствует идентификатору оборудования в листе 2 для этого основного действия. затем комментарий может быть просто скомпилирован как строка из этой информации о строках в sheet2 и записан как комментарий на sheet1.
примерно так. нажмите кнопку на листе 2. он находит ячейку на листе 1, которая совпадает со столбцом даты и строкой equipmentID. компилирует комментарий из ячеек листа 2 b3, b4, b5. вставляет комментарий в найденную ячейку на листе 1. затем выполняется цикл для каждого действия maint на листе 2. вероятно, следует очистить все комментарии к найденным ячейкам перед вставкой новой.
у кого-нибудь есть какие-либо идеи по этому поводу? или, может быть, указать мне правильное направление? спасибо за любую помощь.
Комментарии:
1. Какая именно часть этого вызывает у вас проблемы? Перебираете строки в sheet2? Как найти ячейку на листе 1? Вы можете попробовать использовать
Find()
илиMatch()
для определения местоположения. Опубликуйте свой код, если у вас возникнут проблемы.2. Этот вопрос, похоже, не по теме, поскольку он не включает конкретную проблему и не содержит никакого кода для устранения неполадок.
3. у меня нет никакого кода. я надеялся на некоторую помощь в этом. и да, мне нужна помощь в коде для выполнения цикла и поиска ячейки.
Ответ №1:
спасибо за всю помощь!!! нашел несколько ответов в другом месте. если кому-то интересно, вот что я придумал.
Sub setComment4Tour()
On Error GoTo hell
Dim wrow As Range
Dim id, AC As String
Dim SearchRange As Range
Dim wcol As Range
Dim fdate As Date
Dim fcell As Range
If Not Intersect(ActiveCell, Range("aa:aa")) Is Nothing Then 'check for current sheet activecell value in other sheet range
If Range("A" amp; ActiveCell.row) <> "" And Range("C" amp; ActiveCell.row) <> "" Then 'check for values in current sheet col A amp; C
id = ActiveCell.Value
fdate = Range("C" amp; ActiveCell.row).Value
'Find row ref
Set wrow = Worksheets("WEEKLY").Range("a4:a13").Find(id, lookat:=xlPart)
If Not wrow Is Nothing Then
End If
'Find column ref
Set SearchRange = Worksheets("WEEKLY").Range("3:3")
Set wcol = SearchRange.Find(fdate, LookIn:=xlValues, lookat:=xlWhole)
Set fcell = Worksheets("WEEKLY").Cells(wrow.row, wcol.Column) 'combine row and column to get target cell
If Not InStr(UCase(fcell), "TOUR") <> 0 Then
mb1 = MsgBox("The WEEKLY does not have a tour scheduled for " amp; id amp; "." amp; Chr(10) amp; "Would you like to create the info comment for " amp; id amp; " anyway?", vbYesNo, " Tour Not Found!")
If mb1 = vbYes Then
GoTo updateComment 'Resume Next
Else
GoTo hell
End If
End If
'MsgBox "cell " amp; fcell.Address
updateComment:
'new comment based on current sheet info in the activecell row
newcmnt = Range("A" amp; ActiveCell.row).Value amp; Chr(10) amp; Range("D" amp; ActiveCell.row).Value amp; "-" amp; Range("E" amp; ActiveCell.row).Value amp; Chr(10) amp; "Adults " amp; Range("F" amp; ActiveCell.row).Value amp; Chr(10) amp; "Children " amp; Range("G" amp; ActiveCell.row).Value
If fcell.Comment Is Nothing Then
'Set ctext = Worksheets("WEEKLY").Cells(wrow.row, wcol.Column).Comment
'fcell.Comment.Text Text:=atext
fcell.AddComment Text:=newcmnt
fcell.Comment.Shape.TextFrame.AutoSize = True
MsgBox "comment added"
ElseIf InStr(fcell.Comment.Text, Range("A" amp; ActiveCell.row).Value) <> 0 Then 'check if comment title already exists
MsgBox "Tour " amp; Range("A" amp; ActiveCell.row).Value amp; "'s info comment already exists on the WEEKLY."
Else 'ammend current comment with additional comment
cmnt = fcell.Comment.Text
newcmnt = cmnt amp; Chr(10) amp; Chr(10) amp; Range("A" amp; ActiveCell.row).Value amp; Chr(10) amp; Range("D" amp; ActiveCell.row).Value amp; "-" amp; Range("E" amp; ActiveCell.row).Value amp; Chr(10) amp; "Adults " amp; Range("F" amp; ActiveCell.row).Value amp; Chr(10) amp; "Children " amp; Range("G" amp; ActiveCell.row).Value
fcell.Comment.Text Text:=newcmnt
fcell.Comment.Shape.TextFrame.AutoSize = True
MsgBox "comment added"
End If
Else
MsgBox "There is not a Tour or Date on this Row."
GoTo hell
End If
Else
MsgBox "Select the cell with the Aircraft that you would like to create a Comment for, and try again."
End If
Exit Sub
hell:
'MsgBox "No Comment"
End Sub
таким образом, в основном на листе 2 есть информация для комментария, который необходимо добавить в лист1. ячейка, для которой требуется комментарий на листе 1, неизвестна, ее необходимо найти. итак, я нахожу столбец на листе 1, который соответствует дате из листа 2, и то же самое для строки, которая соответствует идентификатору. итак, теперь, когда строка и столбец пересекаются, у меня есть ячейка на листе 1, к которой требуется добавить комментарий. затем я компилирую комментарий из активной строки на листе 2 и выполняю несколько проверок, чтобы убедиться, что комментарий еще не существует. надеюсь, это кому-то поможет.
если у кого-нибудь есть какие-либо данные о настройке моего кода или любых улучшениях, которые я могу внести, я был бы признателен за обратную связь. Спасибо.