マンガでよめる痔のこと・薬のこと

ThisWorkbook内に以下のコードを記述し、Sheet1に保護をかけています。

Worksheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
Worksheets("Sheet1").EnableSelection = xlUnlockedCells

マクロで、
1.保護しているSheet1をコピーし、シートを新たに作成。
2.そのシートを「Sheet2」にリネーム。
3.Sheet2を保護。
という操作をしています。
Sheet2への保護に使っている記述は上に挙げたコードと同じです。

このマクロを実行すると、
作成したSheet2においてセルに載るカーソル(黒枠)が見えなくなっていまいます。
クリック後にキー入力をすると文字は入るので見えなくなっているだけのようです。
同じ記述で保護しているSheet1は普通にカーソルは見えています。

マクロの「3.Sheet2を保護」をコメントアウトすると、普通にカーソルが見えるようになります。

何故カーソルが見えなくなってしまうのでしょうか。

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

A 回答 (1件)

EnableSelection = xlUnlockedCells でロックを外したセル以外の選択が不可になっています。


カーソルが見えないとするとSheet2にはロックを外したセルがないのでは?(UserInterfaceOnly:=Trueにしてるのでマクロでの入力は可能ですが)

この回答への補足

回答ありがとうございます。

Sheet1で必要なセルのロックを外し、
それをコピーしてSheet2を作成しているのでロックは外れています。
実際に、メニューから「保護の解除」を実行し、セルの書式設定を確認してみましたが、ちゃんと外れていました。
カーソルが見えない状態でもキーボードからセルへの入力はできますし(ロックを外してあるセルに関しては)。

カーソルが消えた状態で「保護の解除」をするとカーソルは復帰しました。
その後再びメニューから「保護する」を実行すると、今度は消えませんでした。

補足日時:2007/07/26 11:01
    • good
    • 0

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

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

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

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

Qエクセルで、セルに入力カーソルが表示されません。。

OS:WinXP
PC:デスクトップ
の環境でExcel2003使用しています。
PCが得意ではない方から、セルに直接入力ができないとの質問を電話でうけたのですが、正直こんな現象見たことがなく困りはてています。。
現象は、以下の通りです。
1.セルに入力カーソルが表示されない。
(ダブルクリックしてもF2押下をしてもセルに入力カーソル表示がなしです。)
2.セルを選択した上で、数式バーをアクティブにすると入力カーソルが表示される。

とくに、入力するときに入力禁止メッセージ等が表示されるわけではないようです。

このような現象の改善方法をご存じの方がおられましたら回答お願いいたします。
また、この現象が起こる直前にNUMLOCKの解除を行っています。
その時も、「数字を入れたいのに選択してるのが動く!」とか言って、めちゃめちゃな操作をした可能性はあります。。。

Aベストアンサー

エクセル の ツール→オプション→編集→セル内で編集するのチェックが外れているとか?

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

QVBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。

マクロを含むエクセル(EXCEL2000)をHTMLのページからハイパーリンクで呼び出しています。そのエクセルでボタン操作に従い罫線やセルの着色を行っています。しかし、着色結果が更新されません。スクロールバー等で画面を移動すると正しく着色されています。このエクセルを通常に起動した場合は、問題なく動作するのですが、シート全体を更新する方法を教えて下さい。
各関数では、以下のスクリーンアップデータの処理を入れています。
Application.ScreenUpdating = False
    (処理)
Application.ScreenUpdating = False

Aベストアンサー

たぶん、EXCEL独特の問題だと思うのですが、HTML の場合、すでに色の部分を表面上で使用しているので、それでメモリが占有させているのではないかと私は思っています。

他にも、

 ActiveWorkbook.HTMLProject.RefreshDocument True

というのがありますね。
ホスト アプリケーション内のブックに含まれる HTML プロジェクトを更新する、というのがありますね。

QVBAでシート書式の自動変換を作動させない方法

エクセル2002使用です。

VBAで、表などの転記をしていると、転記された数字がエクセルの書式の自動変換によって想定しない書式の表示になります。

例えば、

10 → 1000%
(%への表示変換が一番多いです)

これをとめる方法はありますか?
または、VBAで書式を設定する必要があるのでしょうか?

よろしくお願いします。

Aベストアンサー

こんにちは。

#1さんのところの補足で書いたのは、「値の代入」です。転記するなら、Copy メソッドを使うか、NumberFormatLocalで、書式を設定するかコピーしてください。

>先程の補足は例ではなく、実際のコードです。

>ActiveSheet.Range("AA3").Value = 1
>ActiveSheet.Range("AA4").Value = 2
>ActiveSheet.Range("AA5").Value = 3
>ActiveSheet.Range("AA6").Value = 4
>ActiveSheet.Range("AA7").Value = 5
    ↓

Sub TestSample1()
Dim LastRow As Long
Dim i As Long

With ActiveSheet
LastRow = 5
For i = 1 To LastRow
  .Range("AA3").Offset(i - 1).Value = i
Next i
  .Range("AA3").Resize(LastRow).NumberFormat = "General" '英語表記

End With
End Sub

'(NumberFormatは、NumberFormatLocalよりもむつかしいので注意してください)

P.S 書式の自動変換など、型の変換を、「自動キャスト」と呼びます。例えば、日付のテキスト値の一部は、ワークシートのセルの書式にもっとも合うものに変換されますが、この場合は、元の書式を変えているわけではありません。

こんにちは。

#1さんのところの補足で書いたのは、「値の代入」です。転記するなら、Copy メソッドを使うか、NumberFormatLocalで、書式を設定するかコピーしてください。

>先程の補足は例ではなく、実際のコードです。

>ActiveSheet.Range("AA3").Value = 1
>ActiveSheet.Range("AA4").Value = 2
>ActiveSheet.Range("AA5").Value = 3
>ActiveSheet.Range("AA6").Value = 4
>ActiveSheet.Range("AA7").Value = 5
    ↓

Sub TestSample1()
Dim LastRow As Long
Dim i As Long

Wit...続きを読む

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcel VBAでのWorksheet_Changeが動作しない原因

VBA初心者です。
エクセル上で特定のセル(A1~C3の6セル)が変更された際に、マクロが自動で動作するようにしたいと考えています。

既に単独では動作確認済のtest()マクロを作り、
さらに以下のイベントプロシージャを記述したのですが、セルの変更に対して反応が起きません。
どの部分に問題があるかご教示願えますでしょうか。

※test()マクロに関してはA1~C3のセルは参照するものの、
これらのセルを書き換える事はない為、ループは起きない可能性もありますが、
念の為Application.EnableEvents = Falseを入れてあります。

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C3")) Is Nothing Then
Exit Sub
Else
Application.EnableEvents = False
Call test
Application.EnableEvents = True
End If
End Sub

VBA初心者です。
エクセル上で特定のセル(A1~C3の6セル)が変更された際に、マクロが自動で動作するようにしたいと考えています。

既に単独では動作確認済のtest()マクロを作り、
さらに以下のイベントプロシージャを記述したのですが、セルの変更に対して反応が起きません。
どの部分に問題があるかご教示願えますでしょうか。

※test()マクロに関してはA1~C3のセルは参照するものの、
これらのセルを書き換える事はない為、ループは起きない可能性もありますが、
念の為Application.EnableEvents = ...続きを読む

Aベストアンサー

こんにちは。

>どの部分に問題があるかご教示願えますでしょうか。

サブルーチンに肝心な部分を書いておいて、動きませんといっても、それは誰も分からないと思います。

それよりも、むしろ、ご自分で出来るように、デバッグの方法を身につけることですね。
イベント・ドリブン型の最初の部分に[ブレークポイント]を置き、
次に、「Test」というプロシージャが、どこかに置かれていたら、そこに、[ブレークポイント]を置きます。

イベントを発生させたら、[F8]で、ステップモードでひとつずつ動かします。そしてマクロが、正しく動いているかチェックします。そして、そのマクロが、再び、戻ってくるかどうか、様子をみます。
ただし、今回のマクロは途中で止めると、Application.EnableEvents = True に戻っていないことがありますから、イミディエイトウィンドウあたりで、設定を戻したほうがよいです。

また、初心者ならでは失敗は、Test プロシージャが、標準モジュールか、そのシートモジュールのどちらかに置いていないのが原因だったりします。

こんにちは。

>どの部分に問題があるかご教示願えますでしょうか。

サブルーチンに肝心な部分を書いておいて、動きませんといっても、それは誰も分からないと思います。

それよりも、むしろ、ご自分で出来るように、デバッグの方法を身につけることですね。
イベント・ドリブン型の最初の部分に[ブレークポイント]を置き、
次に、「Test」というプロシージャが、どこかに置かれていたら、そこに、[ブレークポイント]を置きます。

イベントを発生させたら、[F8]で、ステップモードでひとつずつ動かし...続きを読む


人気Q&Aランキング

おすすめ情報