エクセル テキスト追加マクロで”実行時エラー”発生

保護されたスケジュール表の上へ、マクロでテキストボックスを追加しようとしてます。
別マクロで行挿入マクロがありますが、これを実行した後にテキスト追加マクロを実行すると
実行時エラー'2147024809(80070057)':選択した図形はロックされています。
が表示されます。
これを解決する方法をご教授ください。
追加されたテキストボックスは、位置変更とテキスト編集ができるようにしたいと思います。


◇行挿入◇
Sub 行挿入()
With ActiveSheet
.Protect Password:="Pass", UserInterfaceonly:=True
'処理
End With
End Sub

◇テキストボックス追加◇
Sub テキスト追加()
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
Selection.Left + 3, Selection.Top + Selection.Height - 11, _
50#, 12#).Select
End Sub

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>行挿入マクロ実行後にセル保護ロックが解除されてしまいます。



ご質問の症状が,よく判りません。

いずれにせよ元のご質問の「編集可能なテキストボックスを追加するマクロ」とは,無関係なところで起きている問題のように見受けられます。
最新版のマクロと,いま困っている「具体的な症状(目に見えるエクセルの姿,どこ番地のセルに何をしたら,どの設定がどうなったといった)」について情報を添えて,新たなご相談として投稿し直してください。
    • good
    • 0
この回答へのお礼

症状を画像添付で再投稿させていただきます。
宜しくお願いいたします。

お礼日時:2010/05/29 22:57

アプローチは色々ありますが,


>追加されたテキストボックスは、位置変更とテキスト編集ができるようにしたいと思います。

という事ですから,シートの保護の設定から見直した方が良いのかもしれませんね。


変更前;
Sub 行挿入()
With ActiveSheet
.Protect Password:="Pass", UserInterfaceonly:=True
 :

変更後:
Sub 行挿入()
With ActiveSheet
.Protect Password:="Pass", DrawingObjects:=false, UserInterfaceonly:=True
 :

この回答への補足

keithinさん
ご回答、ありがとうございます。
テキストボックスの位置変更とテキスト編集ができるようになりましたが、
行挿入マクロ実行後にセル保護ロックが解除されてしまいます。
回避できないでしょうか?

補足日時:2010/05/29 19:55
    • good
    • 0

それはテキストボックスを配置した際、Selectするからエラーになるのです。


以下のようにしましょう。

Sub テキスト追加()
ActiveSheet.Shapes.AddTextbox msoTextOrientationHorizontal, _
Selection.Left + 3, Selection.Top + Selection.Height - 11, _
50#, 12#
End Sub

この回答への補足

Kyboさん
早速のご回答、ありがとうございます。
エラーにならずにテキスト追加されましたが、
行挿入マクロを実行させた後は、テキストの書き込みと移動が出来ない状態です。
出来るようにしたいのですが、ご存知でしょうか。

補足日時:2010/05/29 17:44
    • good
    • 0
この回答へのお礼

症状をお伝えし難いので画像添付で再投稿させていただきたく思います。
一方的で申し訳ございません。ありがとうございました。

お礼日時:2010/05/29 23:01

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル マクロ実行時エラー’1004’

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
    ReDim Preserve 氏名(行)
    社員CD(行) = Cells(行 + 1, 1).Value
    氏名(行) = Cells(行 + 1, 2).Value
    行 = 行 + 1
  Loop Until Cells(行, 1) = ""
  人数 = 行 - 2
  For 回数 = 1 To 人数
    Sheets(評価シート).Select
    Sheets(評価シート).Copy after:=Sheets(評価シート)
    ActiveSheet.Name = 氏名(回数)
    Cells(4, 5) = 氏名(回数)
    Cells(4, 3) = 社員CD(回数)
  Next 回数
End Sub
*****************************
よろしくお願いします

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
   ...続きを読む

Aベストアンサー

ひょっとしてこれに該当するのかな?

Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する
http://support.microsoft.com/kb/210684/ja

QExcel VBAマクロで実行時エラー'91'が出てしまいます。

実行時エラー'91'
オブジェクト変数またはWithブロック変数が設定されていません
というエラーが出ます

同じような質問をいくつか見つけました。
FindでTRUEが見つからなくなったときの処理が問題?だと思うんですが、それを解決するために、どうしていいか分かりません。
よろしくお願いします。


AL列にTRUEとある行を削除するマクロです。
処理が正常に終わり、最後にエラーが出ます。

Sub 行削除()
lastrow = Range("AL1").End(xlDown).Row
i = 1
Dim trow As String
Do While i < lastrow
trow = Range("AL:AL").Find(What:="TRUE").Row
Rows(trow).Delete
i = i + 1
Loop
End Sub

Aベストアンサー

こんにちは。

そのままのマクロでは、Error トラップを設けないと離脱できないはずです。そのマクロの場合は、エラーは避けられないです。
理由は、
trow = Range("AL:AL").Find(What:="TRUE").Row
で、見つからなかったときの判定が出来ないからです。Error トラップをしない方法では、

たぶん、以下のようにすれば良いと思います。
'------------------------------------------
Sub 行削除()
Dim trow As Range
  Do
    Set trow = Range("AL:AL").Find(What:="TRUE", LookIn:=xlValues)
    If trow Is Nothing Then Exit Sub
    Rows(trow.Row).Delete
  Loop
End Sub
'--------------------------------------

なお、このようなマクロは、オートフィルタを用い、SpecialCells で、可視行のみを選択して削除するのが一般的です。

こんにちは。

そのままのマクロでは、Error トラップを設けないと離脱できないはずです。そのマクロの場合は、エラーは避けられないです。
理由は、
trow = Range("AL:AL").Find(What:="TRUE").Row
で、見つからなかったときの判定が出来ないからです。Error トラップをしない方法では、

たぶん、以下のようにすれば良いと思います。
'------------------------------------------
Sub 行削除()
Dim trow As Range
  Do
    Set trow = Range("AL:AL").Find(What:="TRUE", LookIn:=xlValues)
...続きを読む

Q【Excel】◇再質問◇スケジュール表 進捗率入力で帯描写するマクロ

【Excel】◇再質問◇スケジュール表 進捗率入力で帯描写するマクロ
お世話になります。Excel2007使用です。
以前、質問番号:5949136で質問し、解決できました。ありがとうございました。
スケジュール表を使用する中で欲が出て、土日祝日を取り除いたカレンダーに
進捗率の数字を記入すると自動で帯を引くようにしたく思います。
どのようなマクロになるでしょうか
日数と6/15からのカレンダーは関数で出しています。

Aベストアンサー

帯である図形の左端位置,つまり開始列(開始セル)を開始の日付を元に求めること。
帯である図形の100%の全幅,つまり終了日である列(セル)の右隣のセル位置を終了の日付を元に求めること。

の2点を今お手元で出来ている内容不明のマクロに組み込めば,できます。

開始の日付と終了の日付が「絶対に土日にかからない」ようになっている保証があるのか,もし無いならどうしたいのかなど,具体的な状況が不明です。とりあえずご自分で少し努力してマクロに手を入れてみて,その上で「ここができない判らない」箇所を具体的にして改めてご相談を投稿なさってみたらどうでしょう。

Qエクセル/マクロ Exit Subが実行されない

エクセルマクロの質問です。エクセルのヴァージョンは2000です。
あるシートをコピーして新シートに任意の名前を付けるマクロを作っています。ユーザーフォームの中に一つのテキストボックス(新シートの名前入力用)と二つのコマンドボタンを設置し一つは実行ボタン、もう一つはキャンセルボタンとしました。
QNo.6367227でエラー処理に関する質問をさせていただきましたが、こちらは見事に解決していただきました。

今回の質問はExit Subに関する質問です。
If構文で、条件文1が真であればシートをコピーして名前を変更、フォームを閉じるという処理を目指しています。
If 条件 Then ~ 処理 Exit Sub
という形を作って試してみたのですが、処理後にExit Subが実行されません。Exit Subの前にメッセージボックスを挿むとメッセージは表示されましたが、やはりExit Subにはたどり着けませんでした。

すごく初歩的な事で恥ずかしいのですが、Exit Subが実行されない理由と解決法をご教示いただけると助かります。よろしくお願いします。

Private Sub CommandButton1_Click()

Dim NewSheetName As String
NewSheetName = TextBox1.Value

On Error Resume Next
Sheets("Summary").Name = NewSheetName
If Err.Number = 0 Then
Sheets(NewSheetName).Copy before:=Sheets(NewSheetName)
ActiveSheet.Name = "Summary"

MsgBox ("Task Completed!")
ExitSub

Else
MsgBox "Invalid name!"
End If
On Error GoTo 0

End Sub

エクセルマクロの質問です。エクセルのヴァージョンは2000です。
あるシートをコピーして新シートに任意の名前を付けるマクロを作っています。ユーザーフォームの中に一つのテキストボックス(新シートの名前入力用)と二つのコマンドボタンを設置し一つは実行ボタン、もう一つはキャンセルボタンとしました。
QNo.6367227でエラー処理に関する質問をさせていただきましたが、こちらは見事に解決していただきました。

今回の質問はExit Subに関する質問です。
If構文で、条件文1が真であればシートをコピーして...続きを読む

Aベストアンサー

こんな感じでどうでしょう。

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = Worksheets("Summary")
On Error GoTo ErrorMessage
Ws.Name = TextBox1.Value
On Error GoTo 0
Ws.Name = "Summary"
Ws.Copy After:=Ws
ActiveSheet.Name = TextBox1.Value
MsgBox "Task Completed!"
Exit Sub

ErrorMessage:
MsgBox "Invalid name!"
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

CommandButton2はキャンセルボタンというより終了ボタンになります。
「Unload Me」でユーザーフォームを終了します。
CommandButton1でユーザーフォームを終了させてもよいのですが、シートを複数回コピーする場合を考えると、終了ボタンで終了させた方がよいと思います。

こんな感じでどうでしょう。

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = Worksheets("Summary")
On Error GoTo ErrorMessage
Ws.Name = TextBox1.Value
On Error GoTo 0
Ws.Name = "Summary"
Ws.Copy After:=Ws
ActiveSheet.Name = TextBox1.Value
MsgBox "Task Completed!"
Exit Sub

ErrorMessage:
MsgBox "Invalid name!"
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

CommandButton2はキャンセルボタ...続きを読む

QExcelの列'A' 'B' 'C'...や、行'1' '2' '3'...の文字の大きさや種類

Excel2002を使っていますが、Excelの上にある列'A' 'B' 'C'...や、左にある行'1' '2' '3'...の文字の大きさや種類は変えることはできるのでしょうか?もし、変えれるのでしたらどうやって変えるのですか?

Aベストアンサー

「書式」「スタイル」「標準」の状態で「変更」を押して「フォント」の内容を変更してください。
列と行の文字フォントとサイズが変更されます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報