Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
画面の左上のセルの固定
投稿日時: 20/05/18 15:32:13
投稿者: はじめて

お世話になります。
画面の左上のセル(A25)を固定し保護をするようにしたいのです。シートは4シートです。
下記のプログラムを実行しますと、保護は出来ましたがセルの位置がA1に戻るのです。
よろしくお願いします。
 
Sub セルの設定()
    Dim ws As Worksheet
    Dim i As Integer
 
    For Each ws In Worksheets
        ws.Select
        Application.Goto Reference:=Range("A25"), Scroll:=True
          
        ActiveSheet.Protect Password:="74014"
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        ActiveSheet.EnableSelection = xlUnlockedCells
     
        i = i + 1
           If i >= 4 Then
 
              Sheets("sheet1").Select
              Exit Sub
         
           End If
    Next ws
 
End Sub

回答
投稿日時: 20/05/18 17:20:28
投稿者: WinArrow
投稿者のウェブサイトに移動

こちらでテストしてみました。
 
4シートとも、何も設定されていないシートで
掲示のコードを実行しましたは、どのシートもセル:A25が左上になりますが・・・・
 
まだ何か、説明していないことがあるのでは?

投稿日時: 20/05/18 17:39:33
投稿者: はじめて

WinArrow さん
早速のご教授、ありがとうございます。
 
 Application.Goto Reference:=Range("A25"), Scroll:=True
ここでセルはA25に設定されるのですが、
 ActiveSheet.Protect Password:="74014"
これを実行した段階でセルはA21に移動するのです。
WinArrow さんのテストでは問題ないとの事ですがなぜでしょうか。
 
 

投稿日時: 20/05/18 17:44:01
投稿者: はじめて

WinArrow さん
 
4シートだけは、セルがA25になっています。

回答
投稿日時: 20/05/18 18:05:53
投稿者: WinArrow
投稿者のウェブサイトに移動

はじめて さんの引用:
WinArrow さん
 
4シートだけは、セルがA25になっています。

 
シート1〜3とシート4との違いを検証してみましょう。
こちらでは、分かりません。
 
あてずっぽうで
セルのロックの設定あたりかな?
 
 

投稿日時: 20/05/18 18:06:02
投稿者: はじめて

WinArrow さん
 
起点となるA25セルよりも前のセル(1行目〜24行目)に入力可能のセルを設定するとそこが起点となるようです。26行目以降に入力セルを設定しても起点となるA25セルは選択できるようです。
何故かはわかりません。

回答
投稿日時: 20/05/18 19:09:37
投稿者: MMYS

  
ActiveSheet.EnableSelection = xlUnlockedCells
    
これは何のために入れてますか。
当然ながら、入力可能セルだけしか選択出来ません。
つまり、
    
A25のロックは外れてない。なので選択出来ない。
A1はロックが外れているのでセル選択できる。
    
なので、選択可能なA1がアクティブになる。
 

回答
投稿日時: 20/05/18 19:43:25
投稿者: WinArrow
投稿者のウェブサイトに移動

Application.Goto で
>起点
という話は聞いたことないが、
 
実際にそのようなふるまいになりますね・・・・・
 
なんでしょうね?
 
 

回答
投稿日時: 20/05/18 19:55:26
投稿者: WinArrow
投稿者のウェブサイトに移動

問題の現象は、次のような条件で発生するようです。
 
移動先セル(A25)のロックオンの時、それ以前のロックオフのセルの先頭に移動するようです。
 
セルA25のロックをオフにしてみてください。
 
 

投稿日時: 20/05/18 19:58:03
投稿者: はじめて

MMYS さん
ありがとうございます。
基本はシートはすべてロックしています。
入力するセルは26行以下に設定しています。1行から25行に画像を入れているためです。
 
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
         ActiveSheet.EnableSelection = xlUnlockedCells
この2行については、保護をかけているセルをクリックすると、エラーメッセージが出ます。このエラーメッセージを出さないようにして、選択できないようにしたものです。それで、「マクロの記録」で取り込んだステップです。

回答
投稿日時: 20/05/18 20:37:56
投稿者: MMYS

下記のように変更したら、どんな動きですか。
 
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        ActiveSheet.EnableSelection = xlNoRestrictions
      
 
また、エラーメッセージとは、具体的にどんなメッセージですか。
 
 

回答
投稿日時: 20/05/18 20:44:45
投稿者: MMYS

WinArrow さんの引用:

>起点
という話は聞いたことないが、
 
実際にそのようなふるまいになりますね・・・・・

正確には左上に表示するようスクロールを調整する。
だと思います。
 
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.goto
 

回答
投稿日時: 20/05/18 20:48:12
投稿者: WinArrow
投稿者のウェブサイトに移動

問題のコード:2行
>ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
>ActiveSheet.EnableSelection = xlUnlockedCells
で、
1行目のコードは、
このコード実行前にパスワードで保護しているから
あってもなくてもよいコードです。(無害です)
 
問題は2行目のコードです。
2行目のコードは、ロックされているセルは選択させない設定です。
Gotoメソッドは、結果的にセルを選択するコードです。
しかし、セルA25は、ロックされています。
シートの全部のセルがロック設定されている場合は、問題ないが、
ルックされていないセルがあると、ロック設定していないセルを選択してしまいます。
2行目のコードの意味をキチンと理解すること。
>基本はシートはすべてロックしています。
だったら、2行目のコードは矛盾しています。
 
 
>起点
という話もないと思います。
間違った理解は、改めましょう。
 

投稿日時: 20/05/18 21:09:07
投稿者: はじめて

 MMYS さん
 
20:37:56に対しまして
ご提案のように修正しましても、25行までのセルに入力できるよう保護なしにしますと、そのセルがアクティブになります。A25のセルがアクティブになりません。結果として、25行まではロックをかけることになります。
それから、エラーメッセージは保護セルをクリックした場合にExcelの方からエラーメッセージが出ます。プリントスクリーンで取れませんでした。「変更しようとしているセルやグラフは保護されているシート上にあります。〜〜〜〜〜〜〜〜。[/quote]

投稿日時: 20/05/18 21:16:51
投稿者: はじめて

WinArrow さん
MMYS さん
ありがとうございました。いろいろ勉強になりました。
重ねてお礼申し上げます。