No. | 質問・回答 | おれい |
|
[88706] シート保護パスワード解除について |
|
|
OS: Windows XP
ソフトウェア名/バージョン:Excel2003
ハード機種名/型番:
エラーメッセージなど:
その他:
サーバーにあるエクセルのブックに、3枚シートがあって
そのうち1シートを他人に触って欲しくないので、シート保護をかけました。(パスワードあり)
しかし、頻繁に編集するのでパスワードを毎回解除するのは面倒です。ユーザーでブックの属性をわけたりすることはできますでしょうかぁ!?
マクロでできるなら、コードを教えてください!!
お願いします!
つるまる (未登録) 2006年11月13日23:18
|
|
|
|
[88716] |
こんな感じかな
Sub 保護()
ActiveSheet.Protect Password:="123"
End Sub
Sub 解除()
ActiveSheet.Unprotect Password:="123"
End Sub
VBAを見ることができるのでパスワードばれちゃいますけど
mit56 (340) 2006年11月14日09:06
|
|
|
|
[88717] |
自動化するならこんな感じかなと。
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal Buffer As String, Size As Long) As Long
Sub AutoOpen()
GetUserName()でログインユーザ名を取得
「つるまる」ならパスワード解除
End Sub
Sub AutoClose()
パスワード保護
End If
VBAのプロジェクトにも、プロパティでパスワードをかけられます。
こっちはシートを開くたびに見るということはないですよね。
mio (107) 2006年11月14日09:30
|
|
|
|
[88730] |
mit56(10)さん mio(65)さん ありがとうございます。
mio(65)さんの方法で作ってみたのですが、できませんでした・・・・
失礼です、もうひとつ教えて頂きたいです!
◎[Sheet1][Sheet2][Sheet3]
◎パスワード[abc]
◎書き込みを許可したいウィンドウズアカウント[tsurumaru]
◎書き込みを禁止したいウィンドウズアカウント[warumaru]
上記の条件で、具体的なコードを教えていただきたいです。
それと、サーバーがLINUX等でもコードは有効ですかぁ!?
つるまる (未登録) 2006年11月14日20:15
|
|
|
|
[88744] |
>ですかぁ!?
というような聞き方を繰り返しされて、答える気になる人はあんまりいません。
mio (107) 2006年11月15日10:02
|
|
|
|
[88788] |
質問に答えて頂いているのに失礼な質問の仕方を繰り返して申し訳ないです。
つるまる (未登録) 2006年11月16日01:06
|
|
|
|
[88789] |
本日もコードを作成したのですが、思い通りできませんでした・・・・
失礼と承知しているのですが、ご教授お願いいたします。
つるまる (未登録) 2006年11月16日01:10
|
|
|
|
[88798] |
>思い通りできませんでした・・・・
どういう調べものをして、どういうものを作って、どんなエラーが出たんですか?
質問するにしても、まず自分の作ったものを載せてみて、どこがまずいのかを考えるべきです。
人のコードのコピペではなんの力にもなりません。
mio (107) 2006年11月16日13:46
|
|
|
|
[88813] |
度重なる失礼すいません。
下記にソースを記載いたします。おかしい場所を教えて頂きたいです。[88730]と同じ条件で実行しました。
下記のソースで実行すると、どのアカウントで入ってもパスワードがかかってしまいます。おそらく
==============Sheet1 ソース==============
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal Buffer As String, Size As Long) As Long
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim UserName As String
Dim ReturnAPI As Long
UserName = Space(20)
ReturnAPI = GetUserName(UserName, Len(UserName))
If UserName = "tsurumaru" Then
Sheet1.Unprotect Password:="abc"
Else
Sheet1.Protect Password:="abc"
End If
End Sub
====================================
==============ThisWorkBooソース==============
Private Sub Workbook_Open()
ActiveSheet.Protect Password:="abc"
End Sub
====================================
つるまる (未登録) 2006年11月16日21:06
|
|
|
|
[88822] |
これは、Win32API(C言語で使われることを想定)の文字列とVBの文字列との違いによるものです。
VBでのGetUserNameの使い方を検索してみると分かりますが、戻ってきたUserNameをそのまま使うことはできません。
あと一歩(1行追加)です。頑張ってください。
mio (107) 2006年11月17日10:34
|
|
|
|
[88827] |
mio(65)さん、ありがとうございます。
バンザーイ!
お蔭様でNULLを消すコード一行で完成いたしました。
お世話になりました。
つるまる (未登録) 2006年11月17日19:10
|
|
|
|
[88834] |
良かったです。
自分で調べて完成させると、気持ちが違いませんか?
コードをまるまる教えてもらっていたら、そういう気持ちにはなれなかったと思いますよ。
mio (107) 2006年11月17日21:05
|
|
|
|
( 参照数:2425 日平均:0.4 ) |
|
〜 回答の受付を終了しました 〜 |