こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAにてプログラムされているシートに別のシートからマクロのモジュールにて貼り付けるとエラーになります。

エクセルVBAにてプログラムされているシートに別のシートからマクロのモジュールにて普通のデータを貼り付けるとエラーになります。
何卒エラーの解除方法を教えて下さい。
また、合わせて下記プログラムは四角形等のオートシェイプの書式に対応していますが、
同じシート上に写真等の図の書式があるとエラーになります。
お手数ですが、解決方法を教えて下さい。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim C As Variant
Dim i As Integer
Dim Rng As Range
For Each Rng In Target
If Not Intersect(Range("e36:i40"), Rng) Is Nothing Then
Select Case Rng.Row
Case 36
C = Split("3 0 0 0 0")
Case 37
C = Split("0 3 0 0 0")
Case 38
C = Split("0 0 3 0 0")
Case 39
C = Split("0 0 0 3 0")
Case 40
C = Split("0 0 0 0 3")
End Select
Else
C = Split("0 0 0 0 0")
End If
For i = 0 To 4
ActiveSheet.Shapes(i + 1).Select
Selection.Font.ColorIndex = C(i)
Next i
Next Rng
Target.Select
End Sub

投稿日時 - 2009-11-24 09:57:29

QNo.5471780

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

続きの質問の場合は、関係する質問のリンクを貼った方が良いと思います
他の回答者さんが分らないと思うので

エクセルの指定セルにある時だけ、指定オブジェクトの色が変化する方法を教えて下さい。
http://okwave.jp/qa5312762.html

エクセルVBAにて指定範囲以外処理時複数セルの場合エラーになる。
http://okwave.jp/qa5444196.html

>別のシートからマクロのモジュールにて普通のデータを貼り付けるとエラーになります。
どのようなマクロを使用しているのか分らないと
回答が出来ません
マクロを提示していただくか
エラーの内容を補足してください

>同じシート上に写真等の図の書式があるとエラーになります。
これは、最初の質問
http://okwave.jp/qa5312762.html
の#3の最後の方にも書きましたが
シートへのオブジェクト(前回はtextboxとしていましたが、他にも
図やボタン、グラフなどセル以外のものすべてと考えてもよいと思います)
の配置(挿入)の順番しか見ていないので、先に図などのオブジェクトを配置してしまうとエラーとなります

簡単な例を示しますと
例 シートに下記の条件で各シートのセルA1に数字を入力したい
条件 Sheet1=1、Sheet2=2、Sheet3=3としたい
新しいファイルを用意して下記のマクロを実行してみてください
'-------------------------------------
Sub test1()
Dim i As Integer
For i = 1 To 3
Sheets(i).Range("a1").Value = i
Next i
End Sub
'-------------------------------------
うまく行ったと思います
次にシートの順番を入れ替えたり、新しいシートを挿入してから実行してみてください
さらに、グラフやマクロなどのシートも挿入して実行してみてください
シートの並び方によってはエラーまで出るようになったと思います
これが、質問者さんの今の状態に近いのではと思います

解決策はキッチリシートの名前を指定して処理を実行する
先ほどのファイルでこちらのマクロを実行してみてください
'-------------------------------------
Sub test2()
Dim i As Integer
Dim シート名 As Variant
'変数シート名に配列でシート名と処理の順番を設定しています
シート名 = Array("Sheet1", "Sheet2", "Sheet3")
For i = 1 To 3
Worksheets(シート名(i - 1)).Range("a1").Value = i
Next i
End Sub
'-------------------------------------
イメージは掴んでいただけたでしょうか?

この様に今の処理はsub test1のような処理になっていますので
シートでは左から順に、オブジェクトはシートに配置(挿入)した順に
処理されるようになっています
したがって、オブジェクトを一度すべて削除して
処理に必要なオブジェクトとから配置しなおすか
sub test2を参考にマクロを変更するしかないと思います

以上参考まで

投稿日時 - 2009-11-26 12:19:25

あなたにオススメの質問