パスワードでシート保護したExcelへの画像貼り付けについて

このQ&Aのポイント
  • Excel2000でロックしていないセルに画像を貼り付けようと思います。パスワードでシート保護していますが、画像を貼り付けた後にパスワード解除になってしまいます。パスワード解除せずに画像を挿入する方法を教えてください。
  • さらに、挿入後の画像のサイズ変更についても教えていただけると助かります。当方はVBA初心者です。
  • 以下は画像を挿入するVBAのコードです。 With ActiveSheet .Unprotect Application.Dialogs(xlDialogInsertPicture).Show If TypeName(Selection) = "Picture" Then Selection.Locked = False End If .Protect DrawingObjects:=False, Contents:=True End With
回答を見る
  • ベストアンサー

パスワードでシート保護したExcelへの画像貼り付けについて

Excel2000でロックしていないセルに画像を貼り付けようと思います。 パスワードでシート保護しています。 VBAで次のように処理したら画像は貼り付けられました。 しかしパスワード入力を求められ、入力すると画像の挿入後シートは保護されたのですが、パスワードは解除になっています。 パスワード解除にならずに画像挿入できる方法をご教示ください。 さらに挿入後のサイズ変更のVBAも併せて教えて頂ければ助かります。 当方VBAについては全くの初心者です。 Sub 画像挿入()   With ActiveSheet     'シート保護解除     .Unprotect     '画像挿入ダイアログ表示-->画像を挿入     Application.Dialogs(xlDialogInsertPicture).Show     '画像が挿入されたら、保護のロック対象外に設定     If TypeName(Selection) = "Picture" Then       Selection.Locked = False     End If     'シート保護     .Protect DrawingObjects:=False, Contents:=True   End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

「1234」のパスワードの場合、 以下のようにしてみてください。 Sub 画像挿入() With ActiveSheet 'シート保護解除 .Protect Password:="1234", DrawingObjects:=False, Contents:=True, UserInterfaceOnly:=True '画像挿入ダイアログ表示-->画像を挿入 Application.Dialogs(xlDialogInsertPicture).Show '画像が挿入されたら、保護のロック対象外に設定 If TypeName(Selection) = "Picture" Then Selection.Locked = False End If 'シート保護 End With End Sub

big-sei
質問者

お礼

パスワードが解除にならずに画像が挿入できました。 ありがとうございます。 挿入後の画像サイズの変更はどうすれば良いのですか? VBAとは便利なものですね。 早速勉強を始めたいと思います。

その他の回答 (2)

回答No.3

パスワードで保護されたシートの保護を解除する方法 Sheets("シート名").Unprotect ("パスワード") パスワードでシートを保護する方法 Sheets("シート名").Protect ("パスワード") 画像のサイズを変更する方法の参考として、 複数の写真が貼付されたシートにおいて、写真データのサイズを軽減するためのマクロを記述します。 Sheets(1).Select A = Sheets(1).Pictures.Count If A > 0 Then B = 0 For Each ZZZ In Sheets(1).Shapes B = B + 1 If InStr(ZZZ.Name, "Picture") > 0 Then CC = ZZZ.TopLeftCell.Address CC = Right(CC, Len(CC) - 1) DD = Left(CC, InStr(CC, "$") - 1) EE = Right(CC, Len(CC) - InStr(CC, "$")) F = Asc(DD) - 64 G = Val(EE) ZT = ZZZ.Top ZL = ZZZ.Left ZH = ZZZ.Height ZW = ZZZ.Width ZZZ.Cut Cells(G, F).Select ActiveSheet.PasteSpecial Format:="図 (JPEG)" 'ActiveSheetが画像です。 Selection.ShapeRange.Top = ZT Selection.ShapeRange.Left = ZL Selection.ShapeRange.Height = ZH Selection.ShapeRange.Width = ZW Selection.ShapeRange.ZOrder msoSendToBack End If If B = A Then Exit For End If Next End If

big-sei
質問者

お礼

なにか難しいですね。 VBAをしっかり勉強してみます。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>ロックしていないセルに画像を貼り付けようと エクセルの場合、画像はセルに中身的に張り付くのではないと思う。 根本的に誤解が有ると思うが。シートは台紙で、画像はその上に浮いている感じ。レイヤーが違うと言うのかな。 住む家のたとえで言えば、画を飾らせていただくため、有る家の軒を使わせていただくが、その場所は(セル番地).Topなどで指定しますが、家の住人になったわけではないと思います。その軒先を借りることが、有る家を使用禁止・許容の中に含まれているか疑わしい。多分含まれてない。 図のファイルからの挿入は、まずアクチブセルが左上に来る形で挿入される。その選択アクチブセルが、画像貼り付け許可範囲かどうかを左右するかどうかも、はっきりわからない。実験してみてください。誰か反論してくれると、私も勉強になるが、色々な事項から 今のところ、そう結論付けている。普通の解説書にはこういう細かいところは書いてないようだ。 ==== >挿入後のサイズ変更のVBAも併せて教えて頂ければ助かります。 こんなのはマクロの記録をとってコードとにらめっこして考えればわかるでしょう。マクロの記録を活用した後に質問のこと。

big-sei
質問者

お礼

ありがとうございます。 おっしゃっている事がなんとなく解ったような解らないような。 図の挿入はアクチブセルの左上に挿入されました。 シート保護はしてありますが、ロックの掛かっているセルにも移動出来ますしサイズの変更も出来ました。

関連するQ&A

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • 一括保護のマクロにパスワードをかける方法

    エクセル作った表、20シートを一括保護・解除をマクロを使い(どなたかの回答をコピーして)作成しました。保護・解除はできたのですが、このマクロにパスワードをかけ、保護の解除が他の人に出来ないようにしたいのですが、どのようにすれば良いのでしょうか? つかったマクロは・・・ 『保護』 Sub シートの保護() 'Dim~として変数を宣言する Dim myWS As Worksheet 'myWSを「ワークシート」として宣言 'ブック中のシート全部を1枚ずつ以下の作業を繰り返す For Each myWS In Worksheets With myWS 'myWSで .EnableSelection = xlUnlockedCells 'ロックしていないセルを選択出来るように .Protect '保護する End With 'With myWSに対する締め Next myWS 'Forに対応するもの End Sub 『解除』 Sub シートの保護解除() Dim myWS As Worksheet Application.ScreenUpdating = False For Each myWS In Worksheets myWS.Unprotect Next myWS Application.ScreenUpdating = True MsgBox "シート保護解除しました。" End Sub 『Workbook』 Private Sub Workbook_Open() Dim myWS As Worksheet For Each myWS In Worksheets With myWS .EnableSelection = xlUnlockedCells .Protect End With Next myWS End Sub この3つです。VBA初心者で、わかりにくい説明ですが、よろしくお願いいたします。

  • シート保護したExcelへの画像貼り付けについて

    Excelでロックしていないセルに、画像を貼り付けることはできますか? 環境はWindows,Excel2003です。 編集させたいセル(ロックしていないセル)を下記手順で設定しております。 ●編集させたいセル 1.【セルの書式設定】-【保護】タブで、【ロック】のチェックをはずす 2.【ツール】-【保護】-【シートの保護】を設定する この時、指定のセルへのテキスト入力は出来ております。 シート保護がない場合は、下記の手順で画像を貼り付けていました。 ・【挿入】-【図】-【ファイルから】で画像ファイル選択 ただし、シート保護の状態では、上記メニューはグレーとなり使えませんでした。 ドラッグ&ドロップを試してみましたが、貼り付けることは出来ませんでした。 シート保護のまま、ロックしていないセルに画像を貼り付けることはできますでしょうか? 識者の方、ご教示よろしくお願い致します。

  • 保護されているシートでマクロ実行するとエラー

    Excel2010で勤務表を作っています。 A列にとある文字列(承認)と入力すると、その行が保護されるマクロを、下記URLからコピペして使わせて頂いてます。 http://questionbox.jp.msn.com/qa3277541.html 勤務表なので、土日祝日は網掛けになるよう条件付き書式を使っています。 休暇取得した場合は網掛けを付けて、休日出勤した場合には網掛けなしにしたり出来るようマクロをマクロの自動記録で作りました。 ところが、どこかの行が保護されている状態で、セルの網掛けを変更するマクロを実行すると 「実行時エラー'1004'アプリケーション定義またはオブジェクトの定義エラーです」と出てしまいます。 保護されている行ではなく、まだ保護はされていない行に実行しています。 エラーが出ているのは網掛けマクロから出ています。 以下、今エクセルファイルにあるマクロの構文になります。 網掛けマクロは全部で4つ作りました。 1)休日出勤した際に条件付き書式をクリアして網掛けなしにするマクロです。 Sub 休日出勤() ' 条件書式クリア Selection.FormatConditions.Delete End Sub ※エラーになっている部分です。 2)平日休んだ日に網掛けをするマクロです。 Sub 休日() ' 網掛け With Selection.Interior .ColorIndex = 0 .Pattern = xlGray16 .PatternColorIndex = xlAutomatic End With End Sub 3)2)のマクロで休日にしたけど、やっぱり出勤したという時に、1)だと網掛けなしにならなかったので、網掛けなしにするマクロを作りました。 Sub網掛けなし() ' 網掛けなし With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub 4)ごちゃごちゃいじってしまって最初の状態に戻したいと思ったので条件付き書式を再設定するマクロを作りました。が、2)の休日マクロを実行したセルは元に戻らないので仕方なく3)の網掛けなしマクロを実行しなければなりません。 Sub 書式クリア() ' 条件書式再設定 Range("A6:K36").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=WEEKDAY($B6,2)>=6" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlGray16 .PatternColorIndex = xlAutomatic .ColorIndex = xlAutomatic End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=OR(WEEKDAY($B6)=1,COUNTIF(祝日,$B6))" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlGray16 .PatternColorIndex = xlAutomatic .ColorIndex = xlAutomatic End With Selection.FormatConditions(1).StopIfTrue = False End Sub ※この中のSelection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=WEEKDAY($B6,2)>=6"の部分がエラーと出ています。 ※1)から3)は網掛けしたいところ、網掛けなしにしたいところを範囲選択してから実行しなければなりません。 その他、保護を解除する際にパスワード認証が欲しかったので、「保護解除」ボタンを押すためにパスワード認証させるマクロもあります。 これは特に問題なく動いています。 5)パスワード認証つき保護解除マクロ Sub password() Dim pw As Long pw = Application.InputBox( _ prompt:="パスワード入力", Type:=1) If pw <> "123" Then MsgBox "パスワードが違います" Exit Sub Else MsgBox "保護解除しました" ActiveSheet.Unprotect End If End Sub 6)行ごとに保護するマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, rng As Range Set rng = Intersect(Target, Columns(1)) If Not rng Is Nothing Then If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For Each r In rng If r.Value = "承認" Then r.EntireRow.Locked = True Else r.EntireRow.Locked = False End If Next r ActiveSheet.Protect DrawingObjects:=True, Contents:=True End If End Sub マクロに関してはド素人で、自動記録かWebで調べて見つけたマクロをちょっと加工して使う程度です。 どうか知恵をお貸しください。よろしくお願いします。

  • シート保護をすると実行エラーになります。

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:A2000")) Is Nothing Then Exit Sub With Selection.Interior If .ColorIndex = xlNone Then .ColorIndex = 4 Else .ColorIndex = xlNone End If End With Cancel = True End Sub A列任意のセルをダブルクリックすると色が変わるコードを組んでいます。しかしながら、 A列のみロックを解除したのち、シート保護をすると、上記の実行がエラーになります。 どのようにすればエラーを回避できるのかお知恵をかしていただければ幸いです。

  • Excel2007 VBAで画像挿入について

    Sub 図形挿入等倍() Dim FilePath As Variant FilePath = Application.GetOpenFilename(",*.png") If Not FilePath = False Then ActiveSheet.Pictures.Insert(FilePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = Selection.ShapeRange.Width * 1# Selection.ShapeRange.Left = ActiveCell.Left + 2.25 Selection.ShapeRange.Top = ActiveCell.Top + 2.25 End If With Selection.ShapeRange.Line .Weight = 2.25 '線の太さを2.25に .ForeColor.RGB = RGB(255, 0, 0) '赤枠に End With End Sub 上記のコードを書き、画像を挿入したときは問題ないのですが 画像を挿入せずにキャンセルすると 実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。とでてしまいます デバックをしてみると With Selection.ShapeRange.Lineの部分が黄色くなっているので ここを修正したらいいと思うのですが どのように修正したらいいのか分かりません お分かりの方いましたらご教授お願い致します

  • エクセルの画像貼り付けマクロについて

    Sub 画像挿入() ActiveSheet.Unprotect Password:="pass" Application.Dialogs(xlDialogInsertPicture).Show If Dialog1.Show Then With ActiveSheet.Pictures(1) .Top = Range("D31").Top .Left = Range("D31").Top Selection.ShapeRange.IncrementLeft -126# Selection.ShapeRange.IncrementTop 21.75 End With ActiveSheet.Protect Password:="pass", DrawingObjects:=True, _ contents:=True, UserInterfaceOnly:=True End Sub 現在、ダイアログ表示で画像を貼り付けられるように設定しています。 2点質問があり、お答えしていただければと思います。 まず、ダイアログ表示時にキャンセルを押した場合エラーメッセージが 出てきますので、キャンセルを押した場合にダイアログが閉じるように 設定する。 2点目が、間違えて貼り付けてしまった画像を削除する事。 保護をマクロの後にしますので、貼り付けてしまったらその画像を 選択して削除が出来ません。 削除ボタンで貼り付けた画像を削除したいのですがいい方法は ございますでしょうか? 緊急ですのでどなたかお答え頂けますでしょうか、よろしくお願い致します。

  • エクセルでの画像貼り付け時のサイズ変換

    エクセルについて教えてください。 ペイントソフトなどで画像修正したあと、そのままコピー(クリップボードに)し、エクセルに任意の大きさで貼り付けたいのですが、そんなマクロできるでしょうか。 方法としては、自分が貼り付けたい大きさに結合したセルを選択し、貼り付け(クリップボードなので、右クリック貼り付け)をすると、そのセルの大きさに自動で縮小・拡大するような仕組みです。 いろいろな掲示板を見て、クリップボードからではなく、挿入から画像を選んで任意のセルの大きさで貼り付けるというマクロは発見できました。 それをちょっといじるとできそうな気がするんですが、なにぶん詳しくないもので、、、 だれかわかる方教えてください。 ↓挿入からセルの大きさに合わせて貼り付けるマクロ Sub haritukeru() Dim c As Range, cm As Range Application.ScreenUpdating = False For Each c In Selection Set cm = c.MergeArea If c.Address = cm.Item(1).Address Then If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub With Selection .Left = cm.Left .Top = cm.Top .Height = cm.Height .Width = cm.Width End With End If Next Set cm = Nothing Application.ScreenUpdating = True End Sub

  • エクセル マクロ 保護解除とテキストボックス追加

    エクセル マクロ 保護解除とテキストボックス追加 作業工程表へ日付けを入力すると■でべた塗りされ、 ボタンで行挿入とテキストボックスが追加(追加後にテキスト入力と移動可能)仕様を作りたいです。 式保護のためD2~R7はロックさせてますが、次の手順で操作するとセルの保護が解除されてしまうため、解除されないようにしたいです。 (1)ファイルを開く、マクロ有効 (2)テキスト追加ボタンで選択したセルの位置へテキストボックス追加(入力、移動可能)  この時、保護解除されていない。 (3)行挿入ボタンで行挿入、D2~R8保護解除される。 Sub テキストボックス() ActiveSheet.Shapes.AddTextbox msoTextOrientationHorizontal, _ Selection.Left + 3, Selection.Top + Selection.Height - 11, _ 50#, 12# End Sub Sub 行挿入() With ActiveSheet .Protect Password:="123", DrawingObjects:=False, UserInterfaceonly:=True Range("A65536").End(xlUp).Offset(0).Select ActiveCell.Resize(1, 23).Select Selection.Copy Selection.Insert Shift:=xlDown Range("A65536").End(xlUp).Offset(0).Select ActiveCell.Resize(1, 3).Select Selection.ClearContents End With End Sub

  • エクセル シートを保護してる時のセル結合

    エクセル2010を使用しています。 仕事の成果を一定の様式に記入してもらいます。書式、関数などを変更してもらいたくないのでシートに保護をかけました。 記入してもらうところだけセルのロックをはずし入力OKに設定しました。 しかし、シートの保護をかけるとロックをはずしててもセルの結合はできないんですね。なので、過去の質問からシートの保護がかかっていてもマクロですべての操作をしようできるというマクロ↓を参考にしてみました。 Sub seru() ActiveSheet.Protect UserInterFaceOnly:=True End Sub これと、セルを結合するマクロ↓を考えたのですが、どのように2つをくっつけたらいいのかがわかりません。 If TypeName(Selection)="Range"and Selection.Cells.Count>1 Then Selection.Merge ActiveSheet.Protect,AllowFormattingCells:=True End If 何かぬけているのかマクロを実行しても全く働いてくれません。 どうかよろしくです。

専門家に質問してみよう