2017-08-07 9 views
0

2つのワークシートがあります。 1つは長期計画のカレンダーで、上部に日付が、左側にオブジェクトがあります。他のワークシートはデータシートです。各カレンダーエントリは独自の行で、他のシートのカレンダーエントリのセルアドレスを持つ列が1つあります。私はカレンダーワークシートにコメントを追加しようとしていますが、以下のコードでエラーが発生しています。私が間違ってやっていることに関する提案はありますか?ありがとう!VBAオフセットセル値に基づいてコメントを挿入する機能

Sub UpdateLTP() 

    Sheets("Long Term Plan").Select 
    Range("A1").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Selection.ClearComments 
    Range("A1").Select 

    Sheets("Data").Select 
    Dim rng As Range, cell As Range 
    Set rng = Range("AA2:AA" & Range("AA" & Rows.Count).End(xlUp).Row) 
    For Each cell In rng 
     If cell.Value <> "" Then 
      Sheets("Long Term Plan").Range(cell.Value).AddComment cell.Offset(0, -1).Value 
     End If 
    Next cell 

End Sub 
+0

エラーとは何ですか? – braX

+0

"セルが見つかる場所を指定するには" For Each cell in rng.Cells "にする必要はありませんか? – Cyril

+0

実際のコメントを挿入する行にエラーがあります。私はその行をMsgBoxポップアップに変更しようとしましたが、エラーは発生しませんので、そこに構文があるはずです。 – user3307654

答えて

0

これは、コメントを作成し、コメントにテキストを追加するために機能します。オフセットセルの値が何もない場合、コードはエラーになります。いくつかのエラーチェックを追加する

Sub UpdateLTP() 

Dim xlRange As Range 
Dim xlCell As Range 

    Sheets("Long Term Plan").Select 
    Set xlRange = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)) 
    xlRange.ClearComments 
    Sheets("Data").Select 
    Set xlRange = Range("AA2:AA" & Range("AA" & Rows.Count).End(xlUp).Row) 
    For Each xlCell In xlRange 
     If xlCell.Value <> "" Then 
      With Sheets("Long Term Plan").Range(xlCell.Value) 
       .AddComment 
       .Comment.Visible = False 
       .Comment.Text Text:=xlCell.Offset(0, -1).Value 
      End With 
     End If 
    Next xlCell 

End Sub 

このコードは起こってからそれを妨げることはオフセットセルは

Sub UpdateLTP() 

Dim xlRange As Range 
Dim xlCell As Range 

    Sheets("Long Term Plan").Select 
    Set xlRange = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)) 
    xlRange.ClearComments 
    Sheets("Data").Select 
    Set xlRange = Range("AA2:AA" & Range("AA" & Rows.Count).End(xlUp).Row) 
    For Each xlCell In xlRange 
     If xlCell.Value <> "" Then 
      If xlCell.Offset(0, -1).Value <> "" Then 
       With Sheets("Long Term Plan").Range(xlCell.Value) 
        .AddComment 
        .Comment.Visible = False 
        .Comment.Text Text:=xlCell.Offset(0, -1).Value 
       End With 
      End If 
     End If 
    Next xlCell 

End Sub 
+0

コードをもっときれいに書き直してくれてありがとう。残念ながら、(カレンダーにコメントが表示されないため)最初のループのようなものには同じエラーが表示されています。 – user3307654

+0

私は、行を作成しようとしました.Comment.Text Text:= xlCell.Value(テストする)と同じエラーが発生しています。 – user3307654

+0

'With Sheets'行を呼び出し、参照されたセルの値が空でないことを確認する前に' Msgbox xlcell.offset(0、-1).value'という行をコードに追加してください。 –

0

はこのコードを使用してください空でないことを確認してくださいがあります。私は、コードがかなりシンプルで、違いがどこにあるのかを見分けるのに役立つので、説明なしで得ることができれば幸いです。私は下のコードをテストして、うまくいきます。お役に立てれば。

Option Explicit 
Sub UpdateLTP() 
Dim xlCell, xlRange, SourceRange As Range 
Dim rowCount As Integer 
Set SourceRange = Sheets("Data").Range("AA2:AA" & Range("AA" & Rows.Count).End(xlUp).Row) 
    For Each xlCell In SourceRange 
     If xlCell.Value <> "" Then 
      If xlCell.Offset(0, -1).Value <> "" Then 
       With Sheets("Long Term Plan").Cells(xlCell.Row, xlCell.Column) 
        '' Clear Comments as needed from our source sheet. 
        .ClearComments 
        .AddComment (CStr(xlCell.Offset(0, -1).Value)) 
        '' Please change to false as needed. 
        .Comment.Visible = True 
       End With 
      End If 
     End If 
    Next xlCell 
End Sub 
関連する問題