[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート切り替え』(YNo)
教えてください、、、
シート見出しをクリクしてシートを替えるとき元のシートの選択セル?を「a1」にしてからクリックしたシートに変えることをしたいのですが、、、そのようなきとができますか、、、
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
シートを切り替えたときに切り替えた「先」のシートのA1にカーソルを移動、ではだめですか? シートのActivateイベントなどでは「元」のシートの情報は拾えないです。 どこかに記録しておけば別ですが。 (カリーニン) 2014/10/28(火) 20:13
>シートのActivateイベントなどでは「元」のシートの情報は拾えないです。
Workbook_SheetDeactivateイベントで取得できましたね。 失礼しました。 (カリーニン) 2014/10/28(火) 20:18
実験してみました。
'シートがアクティブになったときに切替「先」のA1セルに飛ぶ Private Sub Workbook_SheetActivate(ByVal Sh As Object) Application.Goto Sh.Range("A1"), True End Sub
特に問題なし
'シートが非アクティブになったときに切替「元」のA1セルに飛ぶ Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Application.EnableEvents = False Application.Goto Sh.Range("A1"), True Application.EnableEvents = True End Sub
「元」のシートのセルに飛ぶため実質シートの切替出来ず。 (カリーニン) 2014/10/28(火) 20:37
返事が遅れてしまいました、お詫びします。
前回は割り込み失礼しました、今回もありがとうございます。
難しいんですね。
> 'シートがアクティブになったときに切替「先」のA1セルに飛ぶ
元のシートのセルを「a1」ではなく、これを利用させていただき何とかできないかトライしてみます。
ありがとうございました。
今後ともよろしく尾根がします。
(YNo) 2014/10/29(水) 16:49
教えていただいた、、、
> 'シートが非アクティブになったときに、、、、、
>Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
これを使用して、
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Range("A1").Activate
End Sub
としてみましたら、シートは切り替わり、元のシートの「a1」にカーソルが行っている、アクティブになっているようですが、
この様な使い方はNGなのでしょうか?
お教えください、よろしくお願いします。
(YNo) 2014/10/30(木) 13:31
ちょっとテスト中なのですが、それでいいのかまだ判断がつきません。 ↓を試してみてください。
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Range("A1").Activate MsgBox ActiveCell.Address & vbCrLf & ActiveCell.Parent.Name & vbCrLf & Sh.Name (カリーニン) 2014/10/30(木) 19:06
そもそも、何故こういうことが必要か、を提示されたら全く別のアプロ−チがあるかもしれません。 (カリーニン) 2014/10/30(木) 19:33
単純に↓で試しました。
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
MsgBox ActiveSheet.Name & vbCrLf & Sh.Name End Sub
Sheet3からSheet4に切り替えたとき、
Sheet4 Sheet3
と表示されました。
ですので、
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Range("A1").Activate
End Sub
だと、切り替えた後のアクティブシートのA1セルがアクティブになると思います。 (カリーニン) 2014/10/30(木) 19:38
ごめんなさい。よく理解できません。
Sheet1→Sheet2で、、、Msgは $a$1、Sheet2、Sheet1とでます、、、
これは、Sheet1もSheet2もActiveセルは「a1」になっているという理解でいいのでしょうか?
元のシートの「a1」セルにカーソルが行っている?アクティブになって入ればそれでOKなのですが、、、
今のところ問題なく動くようなのですが、もう少しトライしてみます。
ありがとうございました。
ごめんんささい、、、これで送信?しましたら衝突?しました?でダメでした。。。。
やりたいことは前回お教えいただいた選択行に色を付けるで、シートを替えるときシートを保護しているとエラーになってしまうので、エラーを無視して、、、元のシートの選択行に色を付けたまま、シートを替えてしまい強引に元のシートの色のついた行を「a1」に、、、行1にもっていき逃げようと思ったのです。
元のシートのカーソルも「a1」に行っているみたいですが、、、、
もう少しトライしてみます
ありがとうございました。。。
(YNo) 2014/10/30(木) 20:18
↓ですね。
[[20141011233727]] 『選択行全体に色をつけたいのですが教えて下さい』(taronippon)
>シートを替えるときシートを保護しているとエラーになってしまうので、
何のエラーでしょう? マクロのエラー?それともエクセルが発するエラー? 何かエラーメッセージが出てるのでしょうか? (カリーニン) 2014/10/30(木) 20:42
>Sheet1→Sheet2で、、、Msgは $a$1、Sheet2、Sheet1とでます、、、 >これは、Sheet1もSheet2もActiveセルは「a1」になっているという理解でいいのでしょうか?
Sheet2のみがA1セルがアクティブになります。 (カリーニン) 2014/10/30(木) 20:59
ありがとうございます。
Sheet2のみですか、、、アクティブと言う言い方はまずいのかな、、、よく理解できていません。
カーソルはSheet1もセル「a1」に行っているみたいですが、、、、
混乱してきました、エラーメッセージ等は整理してから載せます。少し時間を下さい。。。
ありがとうございました。
(YNo) 2014/10/30(木) 21:12
>カーソルはSheet1もセル「a1」に行っているみたいですが、、、、
これはどのように確認しましたでしょうか? Sheet1をアクティブにしたらSheet1のA1がアクティブになりますので これで確認することはできません。
Sheet1のB3をアクティブにした状態でSheet2に切り替え、上書き保存して閉じる。 Shiftキーを押しながらブックを起動するとマクロ無効で開けます。 マクロ無効で開いた状態でSheet1のアクティブセルがどこかを確認してみてください。 (カリーニン) 2014/10/30(木) 21:22
> Sheet1をアクティブにしたらSheet1のA1がアクティブになりますので、、、、、
アクティブにしたらアクティブにしたシートのA1がアクティブになるのでしょうか?
> Sheet1のB3をアクティブにした状態でSheet2に切り替え、上書き保存して閉じる。
>Shiftキーを押しながらブックを起動するとマクロ無効で開けます。 >マクロ無効で開いた状態でSheet1のアクティブセルがどこかを確認してみてください。
残念ながらB3のままでした。。。。。
エラーは前回お教えいただいた選択行に色を、、、、で、下記を実行しシートを替えると、
'**の点でエラーになります。実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。 。。とでます。
エラー時デバッグではなく終了を選ぶと次からはエラーにならず継続出来るのですが、この時は
元の選択行に色がついたままですのでこれを防ぎたかったのです。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Not R Is Nothing Then ActiveSheet.Unprotect ' On Error Resume Next R.Interior.ColorIndex = xlNone '** ここでエラーに、、
End If ActiveSheet.Unprotect Sh.Range(Sh.Cells(Target.Row, "b"), Sh.Cells(Target.Row, "m")).Interior.ColorIndex = 34 '35 Set R = Sh.Range(Sh.Cells(Target.Row, "b"), Sh.Cells(Target.Row, "m")) Calculate ActiveSheet.Protect End Sub
何回もすみません。
よろしくお願いします。
(YNo) 2014/10/31(金) 08:48
> Sheet1をアクティブにしたらSheet1のA1がアクティブになりますので、、、、、 アクティブにしたらアクティブにしたシートのA1がアクティブになるのでしょうか?
コードに解説を付けると↓のようになります。
'シートがDeactivate(非アクティブ)になったとき
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'アクティブシートのA1セルをアクティブにする Range("A1").Activate 'アクティブセルのアドレス、アクティブセルの親オブジェクト名(今回はシート名)、変数Shの名前 MsgBox ActiveCell.Address & vbCrLf & ActiveCell.Parent.Name & vbCrLf & Sh.Name End Sub
↓のコードで変数Rが使われてますが、変数Rの宣言はどちらで行われているのでしょう?
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Not R Is Nothing Then ActiveSheet.Unprotect ' On Error Resume Next R.Interior.ColorIndex = xlNone '** ここでエラーに、、
End If ActiveSheet.Unprotect Sh.Range(Sh.Cells(Target.Row, "b"), Sh.Cells(Target.Row, "m")).Interior.ColorIndex = 34 '35 Set R = Sh.Range(Sh.Cells(Target.Row, "b"), Sh.Cells(Target.Row, "m")) Calculate ActiveSheet.Protect End Sub (カリーニン) 2014/10/31(金) 10:43
こんな感じでいかがでしょう?
Dim flg As Boolean
Dim R As Range
Private Sub Workbook_Open()
ActiveSheet.Unprotect Set R = ActiveSheet.Range(ActiveSheet.Cells(ActiveCell.Row, "b"), ActiveSheet.Cells(ActiveCell.Row, "m")) R.Interior.ColorIndex = xlNone R.Interior.ColorIndex = 34 ActiveSheet.Protect flg = True End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
flg = False If Not R Is Nothing Then R.Parent.Unprotect R.Interior.ColorIndex = xlNone R.Parent.Protect End If ActiveCell.Activate Call Workbook_SheetSelectionChange(ActiveSheet, ActiveCell) DoEvents End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not R Is Nothing Then ActiveSheet.Unprotect If flg = True Then R.Interior.ColorIndex = xlNone End If ActiveSheet.Unprotect Sh.Range(Sh.Cells(Target.Row, "b"), Sh.Cells(Target.Row, "m")).Interior.ColorIndex = 34 '35 Set R = Sh.Range(Sh.Cells(Target.Row, "b"), Sh.Cells(Target.Row, "m")) Calculate ActiveSheet.Protect flg = True End Sub (カリーニン) 2014/10/31(金) 11:52
ありがとうございます。
変数Rは、、
Option Explicit
Dim R As Range でしています。書き忘れですね、失礼しました。
今外出から帰りました、お教えいただいたコードはこれからトライします。
(YNo) 2014/10/31(金) 12:44
お教えいたコードでやってみました。
Dim flg As Boolean
Dim R As Range
Private Sub Workbook_Open()
、、、、、、、
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
、、、、、、、、、
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
、、、、、、、、、、、、、、、、、、、、、
End Sub
上記を(上記のみを)ThisWorkbookに書いていいのですね。
これですと、シート1で3行目に色を付けて、シート2に移りその後シート1に戻ると3行目に色がついたまま?になるようですが?
これを防ぎたい、(シート1に戻ったら戻った時点で1行目に色がつくようにしたい)のですが、、、、
何度もすみません、よろしくお願いします。
(YNo) 2014/10/31(金) 16:10
>これですと、シート1で3行目に色を付けて、シート2に移りその後シート1に戻ると3行目に色がついたまま?になるようですが? >これを防ぎたい、(シート1に戻ったら戻った時点で1行目に色がつくようにしたい)のですが、、、、
??
シート1に戻ったら3行目がアクティブになっているはずですので3行目に色が付いていて当たり前ですよね?? どうしたいのかが分かりません。
A1セルをアクティブにするのはエラー防止のためだったのですよね? 私のコードではエラーにならないのでA1セルをアクティブにする必要はないですよね? (カリーニン) 2014/10/31(金) 19:09
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
flg = False If Not R Is Nothing Then R.Parent.Unprotect R.Interior.ColorIndex = xlNone R.Parent.Protect End If ActiveCell.Activate Call Workbook_SheetSelectionChange(ActiveSheet, ActiveCell) DoEvents Range("A1").Activate '追加 End Sub
上の位置に Range("A1").Activate を追加することで上手くいきました。
下手な説明にもかかわらずおつきあい下さいましてありがとうございました。
今後ともよろしくお願いします。
ありがとうございました。
(YNo) 2014/10/31(金) 20:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.