プロが教える店舗&オフィスのセキュリティ対策術

以下のコードを実行しても、オブジェクト変数または、withブロック変数が設定されていませんとエラーが発生します。ネットで解決策を色々と試してみましたが、どうしても実行できません。
VBA初心者です。どなたか、助けて頂けないでしようか?

Option Explicit
Sub ガントチャート描画()
Dim al As Range
Dim org As Range
Dim dst As Range

For Each al In Range("al7:al29")
If al.Value <> "" Then
Call MyFind(al.Value, org)
Call MyFind(al.Offset(0, 3).Value, dst)


If al.Offset(0, 7).Value = "H" Then
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
al.Top + 10, dst.Left + 0, al.Top + 10).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(250, 8, 8)
.Weight = 3
End With

ElseIf al.Offset(0, 7).Value = "A" Then
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
al.Top + 10, dst.Left + 0, al.Top + 10).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(51, 255, 0)
.Weight = 3
End With

ElseIf al.Offset(0, 7).Value = "K" Then
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
al.Top + 10, dst.Left + 0, al.Top + 10).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(51, 255, 0)
.Weight = 3
End With

Else: With ActiveSheet.Shapes.AddLine(org.Left + _
0, al.Top + 10, dst.Left + 0, al.Top + 10).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(0, 0, 128)
.Weight = 3
End With

End If
End If

Next
End Sub
Private Sub MyFind(ByVal src As String, ByRef rng As Range)

Dim r As Range

Set rng = Nothing

For Each r In Range("at5:lu5")

If r.Value = src Then

Set rng = r

Exit Sub

End If

Next

End Sub

質問者からの補足コメント

  • Qchan1962さま
    昨日は、ありがとうごさいました。
    教えてもらったコードを入力し実行しました。
    エラーはなく実行されますが、ガンチャートが出力されません。
    セルの値や参照番地を確認しましたが問題はない様に思います。

      補足日時:2024/03/08 08:11

A 回答 (1件)

変数


Dim org As Range
Dim dst As Range

条件
For Each r In Range("at5:lu5")
If r.Value = src Then
で全てFalseの場合 Nohting となり Leftなどを取得・設定できないため
実行時エラー91が返っているものと思われます

上記条件に一致しない時の処理を考え対策する必要があります

例として
org、dst が設定できなかった時 何も処理をせず 次のalに進む
(For Each al In Range("al7:al29"))場合
If Not org Is Nothing And Not dst Is Nothing Thenをメイン条件分岐処理前に挿入します

Call MyFind(al.Offset(0, 3).Value, dst)
If Not org Is Nothing And Not dst Is Nothing Then
If al.Offset(0, 7).Value = "H" Then


対応の終端はNext前です

End If
End If ’分岐終端
Next
End Sub
Private Sub MyFind(ByVal src As String, ByRef rng As Range)

環境が無く未検証の為、違っていたらごめんなさい
    • good
    • 1
この回答へのお礼

Qchan1962さん

早々の回答、誠にありがとうごさいます。
助かります。

やってみます!!

お礼日時:2024/03/07 18:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A