[[20200927110836]] 『VBAで別シートのソート』(はーちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで別シートのソート』(はーちゃん)

VBA初心者のため、教えて頂けないでしょうか?

DataInputシート上に設置するボタンで、DataInput シート上のソート実行と別シート(TKSG_Input)上データのソート実行を一度に行いたいのですが、下記コードですとアクティブでない(TKSG_Input)が上手く実行できません。
どのようなコードを追加する必要があるでしょうか?

Sub sortshelf()

    Worksheets("DataInput").Range("A3:U42").Sort Key1:=Range("A3"), Order1:=xlAscending
    Worksheets("TKSG_Input").Range("A3:L42").Sort Key1:=Range("A3"), Order1:=xlAscending

End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


>上手く実行できません。
どう上手くいかないのか提示がないのでわかりませんが、おそらくエラーメッセージのとおり、シートの指定を省略している箇所があるので、ActiveSheetを指定したことになって、並べ替える範囲とキーに指定したセルのシートが別になってませんか?

    Sub sortshelf()
        Worksheets("DataInput").Range("A3:U42").Sort Key1:=Worksheets("DataInput").Range("A3"), Order1:=xlAscending
        Worksheets("TKSG_Input").Range("A3:L42").Sort Key1:=Worksheets("TKSG_Input").Range("A3"), Order1:=xlAscending
    End Sub

(もこな2 ) 2020/09/27(日) 11:28


↑の一部訂正。

よく見たら↓のように書いてありました。失礼しました。
>アクティブでない(TKSG_Input)が上手く実行できません。

原因と改善方法は提示したとおりです。

(もこな2 ) 2020/09/27(日) 13:06


教えて頂いたとおり、ActiveSheetの指定追加でできるようになりました。
ありがとうございました!!大変助かりました。
(はーちゃん) 2020/09/27(日) 23:27

何度も申し訳ありません。
別シートのソートを実行する際にシート保護がかかっていた場合エラーがでますが、VBAで保護設定を無視すること可能でしょうか?よろしくお願いします。
(はーちゃん) 2020/09/28(月) 00:39

 VBA に対して、処理の許可を与える必要があります。
http://officetanaka.net/excel/vba/sheet/sheet07.htm

 処理の前に、
 If Worksheets("TKSG_Input").ProtectContents = True Then
      Worksheets("TKSG_Input").Protect  UserInterfaceOnly:=True
 End If

のように追加してみてどうでしょうか。
(QS) 2020/09/28(月) 01:05


ありがとうございました!!
教えて頂いた内容で無事できました。
(はーちゃん) 2020/09/28(月) 10:40

本当に何度も申し訳ございません。
パスワード設定をしたシートの場合のコードをご教示頂けないでしょうか?
下記の場合、シート保護にパスワードを設定しなければ問題なく、実行できますが、パスワードを設定した場合にパスワードを求められて実行ができません。
Unprotectコードを追加する必要があるのかと思ったのですが、どのようにすれば良いでしょうか?
すみませんが宜しくお願いします。

Sub sorttool()

  If Worksheets("DataInput").ProtectContents = True Then
      Worksheets("DataInput").Protect UserInterfaceOnly:=True
     Worksheets("DataInput").Range("A3:U42").Sort        
   Key1:=Worksheets("DataInput").Range("B3"), Order1:=xlAscending
  End If
End Sub

(はーちゃん) 2020/09/28(月) 11:22


 「UserInterfaceOnly パスワード」といった検索で出てくるかと思いますが、下記のサンプルを参照ください。
https://www.moug.net/tech/exvba/0040054.html

 必ず保護がかかっているなら If で判定する必要はなく、
   Worksheets("DataInput").Protect Password:="my password",  UserInterfaceOnly:=True
   Worksheets("DataInput").Range("A3:U42").Sort Key1:=Worksheets("DataInput").Range("B3"), Order1:=xlAscending
 だけでよいのではないでしょうか。

(QS) 2020/09/28(月) 11:33


ありがとうございます。
IF判定なくしてアドバイス頂いたやり方で出来るようになりました。
大変助かりました。
(はーちゃん) 2020/09/28(月) 23:04

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.