|
▼β さん:
ありがとうございます!
迅速にご対応いただいたのに
確認が遅くなって非常に申し訳ありませんでした。
見事に成功しました!
シートに書かれているコードで、標準モジュールではなかったので
苦心していたところでした。
セル領域にシート修飾(ピリオド)をつけるという技に感動しました。
本当にありがとうございます。
そしてわかりやすい解説も付けていただき、感激しました。
まだまだ勉強が足りないな、と心から思いました。
今後とも何かあればご教示いただけますと幸甚です!
ありがとうございました。
>▼HIRO さん:
>
>少しお先走ることになるかもしれませんが。
>
>もし、このコードが Sheets(ShName) ではないシートのシートモジュールに書かれていた場合は
>Range(Cells(gyou, 59),Cells(gyou,60)).Select
>このコードで、1004エラー RangeクラスのSelectメソッドが失敗しましたよいうエラーになります。
>
>Sheets(ShName).Activate
>
>これで、確実に Sheets(ShName) がアクティブシートになります。
>
>gyou = ActiveCell.Row
>
>ActiveCell はブックに1つしかありません。今アクティブになっているシートのアクティブになっているセルです。
>ですから、このコードも、確実に Sheets(ShName) のアクティブセルを参照します。
>
>問題はそのあと。
>
>Range(Cells(gyou, 59),Cells(gyou,60)).Select
>
>セル領域に どのシートなのかという情報を明示しない場合、
>・標準モジュールなら、今、アクティブになっているシート とみなされます。
> で、このコードは問題なくOKになるはずです。
>・シートモジュールの場合は、そのコードが書かれたシートということになります。
> そのコードが書かれたシートが Sheets(ShName) ではなかった場合、
> Range(Cells(gyou, 59),Cells(gyou,60)) という領域は、今アクティブになっていないシートの領域になります。
> アクティブではないシートの領域は Select できません。なので、Select仕様とすると、
> それはエクセルのルールに反している!! と叱られます。
>
>対応策は2つ。
>
>1.このコードを標準モジュールに書く。
>2.シートモジュールであれば
>
> With Sheets(ShName)
> .Activate 'これはActiveCell取得のためやむなし
> gyou = ActiveCell.Row
> 'セル領域にシート修飾(ピリオド)をつける
> .Range(.Cells(gyou, 59), .Cells(gyou, 60)).Interior.ColorIndex = 10
> End With
|
|