Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3505 / 13644 ツリー ←次へ | 前へ→

【61759】「入力規則 リストから選ぶ」のセルを作成したらVBAがエラーになった もも 09/6/2(火) 10:09 質問[未読]
【61760】Re:「入力規則 リストから選ぶ」のセルを... Abebobo 09/6/2(火) 10:55 発言[未読]
【61761】Re:「入力規則 リストから選ぶ」のセルを... もも 09/6/2(火) 11:40 発言[未読]
【61762】Re:「入力規則 リストから選ぶ」のセルを... Abebobo 09/6/2(火) 12:06 発言[未読]
【61763】Re:「入力規則 リストから選ぶ」のセルを... Abebobo 09/6/2(火) 12:19 発言[未読]
【61764】Re:「入力規則 リストから選ぶ」のセルを... もも 09/6/2(火) 12:34 お礼[未読]
【61782】Re:「入力規則 リストから選ぶ」のセルを... n 09/6/3(水) 20:03 発言[未読]

【61759】「入力規則 リストから選ぶ」のセルを作...
質問  もも  - 09/6/2(火) 10:09 -

引用なし
パスワード
   OS:WindowsXP Office:2003
お願いします。

固定選択範囲に右上がりの線を作成&削除させるマクロをオートシェイプに登録し、問題なく動いていました。ところが同じSheet内にある、入力規則(リストから選択する)セルをアクティブにするとマクロがエラーになることを最近気づきました。

「MySp.TopLeftCell.Column =< アプリケーション定義またはオブジェクト定義のエラーです」
If MySp.TopLeftCell.Row = RR.Row And _     
        MySp.TopLeftCell.Column = RR.Column Then 
このように表示されます。

色々と調べてみましたが全く見当がつきません。
よろしくお願いいたします。


Sub 固定範囲内斜線()
'
' Macro1 Macro

Application.ScreenUpdating = False
Application.DisplayAlerts = False

  Dim RR As Range, MySp As Shape, Ch As Boolean
  
  ActiveSheet.Unprotect
  Ch = True
  Set RR = Range("B13:F17")
  For Each MySp In ActiveSheet.Shapes
    If MySp.TopLeftCell.Row = RR.Row And _      'エラーはここです
        MySp.TopLeftCell.Column = RR.Column Then 'エラーはここです
      MySp.Delete
      Ch = False
      Exit For
    End If
  Next MySp

  If Ch Then
  With ActiveSheet.Shapes.AddLine(Range("B13").Left, Range("B13").Top, _
               Range("F17").Left + Range("F17").Width, _
               Range("F17").Top + Range("F17").Height)
          .Flip msoFlipHorizontal
  End With  
  End If

  Set RR = Nothing

End Sub

【61760】Re:「入力規則 リストから選ぶ」のセル...
発言  Abebobo  - 09/6/2(火) 10:55 -

引用なし
パスワード
   識者からの回答までのつなぎで・・・

Sub 固定範囲内斜線()
'
' Macro1 Macro

Application.ScreenUpdating = False
Application.DisplayAlerts = False

  Dim RR As Range,
  Dim MySp As Object    ’変更
  Dim Ch As Boolean 
  Dim MySh As Worksheet  ’ついか
 
  ActiveSheet.Unprotect
  Ch = True
  Set RR = Range("B13:F17")
  Set MySh = ActiveSheet    ’ついか
  
  For Each MySp In MySh.OLEObjects ’変更
    If MySp.TopLeftCell.Row = RR.Row And _
        MySp.TopLeftCell.Column = RR.Column Then

エラーの理由は、入力規制の▽も Shape です。

Ps.ももさんというかたが、すでにここで活躍されています。

【61761】Re:「入力規則 リストから選ぶ」のセル...
発言  もも  - 09/6/2(火) 11:40 -

引用なし
パスワード
   Abebobo さん ありがとうございます!

エラーは出なくなりました。動きます。
ただ、線が消えなくなりました。

後はどこを修正すればよいか教えて下さい。

>Ps.ももさんというかたが、すでにここで活躍されています。
そうでしたか、すみません次回気をつけます。

【61762】Re:「入力規則 リストから選ぶ」のセル...
発言  Abebobo  - 09/6/2(火) 12:06 -

引用なし
パスワード
   もも さん
すみません!!!!!
あれ〜すぐに見直します <m(__)m>

【61763】Re:「入力規則 リストから選ぶ」のセル...
発言  Abebobo  - 09/6/2(火) 12:19 -

引用なし
パスワード
   Sub 固定範囲内斜線()
'
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim RR As Range, MySp As Shape, Ch As Boolean
  ActiveSheet.Unprotect
  Ch = True
  Set RR = Range("B13:F17")
  For Each MySp In ActiveSheet.Shapes
   If Not MySp.Type = msoFormControl Then   ’分岐点追加
    If MySp.TopLeftCell.Row = RR.Row And _
        MySp.TopLeftCell.Column = RR.Column Then 'エラーはここです
      MySp.Delete
      Ch = False
      Exit For
    End If
   End If
  Next MySp

  If Ch Then
   With ActiveSheet.Shapes.AddLine(Range("B13").Left, Range("B13").Top, _
               Range("F17").Left + Range("F17").Width, _
               Range("F17").Top + Range("F17").Height)
          .Flip msoFlipHorizontal
   End With
  End If
  Set RR = Nothing
End Sub

こんな案しか思い浮かびません  

【61764】Re:「入力規則 リストから選ぶ」のセル...
お礼  もも  - 09/6/2(火) 12:34 -

引用なし
パスワード
   Abebobo さん

おみごとです!!

本当に助かりました。
ありがとうございました。

【61782】Re:「入力規則 リストから選ぶ」のセル...
発言  n  - 09/6/3(水) 20:03 -

引用なし
パスワード
   参考です。
Sub test()
  Dim L As Line

  With ActiveSheet
    On Error Resume Next
    Set L = .Lines("B13F17")
    On Error GoTo 0
    If L Is Nothing Then
      .Unprotect
      With .Range("B13:F17")
        .Worksheet.Lines.Add(.Left, .Top + .Height, _
                   .Left + .Width, .Top).Name = "B13F17"
      End With
      .Protect
    Else
      L.Visible = Not L.Visible
      Set L = Nothing
    End If
  End With
End Sub

固定範囲内に斜線を作成&削除の繰り返し...ではなく
固有の名前をつけた斜線の表示/非表示、という考え方で良ければ。

3505 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free