Добавьте комментарии к ячейке из другой ячейки, если исходная ячейка пуста или равна нулю, пропустите ячейку и go к следующей - PullRequest
0 голосов
/ 29 марта 2020

У меня есть простая электронная таблица, я хочу скопировать комментарии из исходного столбца (C3: C10) в целевой столбец (A3: A10) для каждой ячейки. Пример: комментарии из ячейки C3 должны быть комментариями к A3, C4 для A4, C5 для A5 ​​... но не комментировать ячейку A6, потому что C6 пустое или нулевое, затем C7 для A7 и т. Д.

Ниже приведен код, который я получил, и я всегда получал сообщение об ошибке (.Text Text: = Target (i) .Value), потому что ячейки C6 и C10 пустые.

Пожалуйста, помогите переписать код ниже, пропустить пустую ячейку и go к следующей ... Спасибо

Sub Comments()

    Range("A3:A10").Select
    Selection.ClearComments


    Dim Target As Range, Source As Range
    Dim rng As Range
    Dim cm As Comment, i As Integer
    Set Source = Range("a3:a10")
    Set Target = Range("c3:c10")

    For Each rng In Source
        i = i + 1
        If Not rng.Comment Is Nothing Then
            rng.Comment.Delete
        End If
        Set cm = rng.AddComment
        With cm
            .Visible = False
            .Text Text:=Target(i).Value  '<===== got an error on this**
        End With
    Next rng

enter image description here

Ответы [ 4 ]

1 голос
/ 29 марта 2020

вы можете использовать:

SpecialCells() метод для фильтрации ячеек только со значениями

Offset(rowOffset, colOffset) метод для переключения между вашими "параллельными" диапазонами

Option Explicit

Sub Comments()
    Dim rng As Range

    With Range("A3:A10")
        .ClearComments
        For Each rng In .Offset(, 2).SpecialCells(xlCellTypeConstants).Offset(, -2)
            With rng.AddComment
                .Visible = False
                .Text Text:=rng.Offset(, 2).Value
            End With
        Next
    End With
End Sub
1 голос
/ 29 марта 2020

Пожалуйста, попробуйте этот код. Вместо того, чтобы проходить по каждой ячейке, он просто копирует комментарии из одного диапазона в другой, а затем удаляет комментарии в источнике.

Sub Comments()

    Dim Target As Range, Source As Range
    Dim Tmp As Variant

    Set Source = Range("c3:c10")
    Set Target = Range("a3:a10")

    Tmp = Target.Value
    Source.Copy
    Target.Cells(1).PasteSpecial Paste:=xlPasteComments, _
                                 Operation:=xlNone, _
                                 SkipBlanks:=False, _
                                 Transpose:=False
    Application.CutCopyMode = False
    Source.ClearComments
    Source.Select
End Sub
0 голосов
/ 29 марта 2020

Здесь я рекомендую вам лучший способ, вам не нужно учитывать пустые ячейки. Он будет автоматически игнорироваться. Наслаждайся этим. Я думаю, что это именно то, что вам нужно.

Sub addcomment()
    Application.ScreenUpdating = False
    For i = 3 To Cells(Rows.Count, 1).End(3).Row
        Cells(i, 1).NoteText Cells(i, 3)
    Next
    Application.ScreenUpdating = True
End Sub

Чтобы было понятно, здесь я добавляю картинку. enter image description here

0 голосов
/ 29 марта 2020

Это работает для меня. Вы не проверяете, является ли ячейка пустой.

Sub Comments()

Dim Target As Range, Source As Range
Dim rng As Range
Dim cm As Comment, i As Integer

Set Source = Range("a3:a10")
Set Target = Range("c3:c10")

Source.ClearComments

For Each rng In Source
    i = i + 1
    If Target(i).Value <> vbNullString Then
        Set cm = rng.AddComment
        With cm
            .Text Target(i).Value
            .Visible = False
        End With
    End If
Next rng

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...