
エクセル2000です。
一つのブックに何枚かシートがあります。
各シートは保護されており、いくつかロックされていないセルがあります。
各シートの最初のロックされていないセル(シートにより異なります)にカーソルを飛ばしたいのですが、下記のようにやってもセルA1が選択されたままで飛んでくれません。
どこが悪いのでしょうか?
Sub TEST()
Dim sh As Worksheet
For Each sh In Worksheets
sh.Activate
sh.Cells(1, 1).Activate
SendKeys "{TAB}"
MsgBox ActiveCell.Address
Next
End Sub
なお、
sh.EnableSelection = xlUnlockedCells
を挿入すればSendKeys "{TAB}"がなくとも、カーソルが飛びますが、今回はEnableSelection = xlUnlockedCellsしたくないのです。
よろしくおねがいします。
No.3
- 回答日時:
こんにちは。
KenKen_SP です。SendKeys はアクティブウインドウに送られます。つまり、
・SendKeys 実行時に目的のウインドウがアクティブになっていなければ
ならない
--->ここでいうアクティブウインドウとは、Excel アプリケーション内
の Active ではなく、OS レベルで入力可能状態にあるウインドウ
を指します。
と言えます。したがって、VBE の画面からコードを実行した場合、VBE に対し
て SendKeys が送信されてしまうのですから、失敗しますね...
そこで、SendKeys を実行する直前に少なくとも目的のウインドウをアクティ
ブにするコードを入れてやります。それから、ループで回すなら、#1 ご回答
にありますように第2引数を True にする必要があります。
とは言え、SendKeys は 100% の動作保証が得られないため、Wendy02 さん
ご回答のように他ロジックで対応できるなら、使わない方が良いとは思います。
Sub TEST()
Dim sh As Worksheet
AppActivate (Application.Caption) ' ※ ココもポイント
For Each sh In Worksheets
sh.Activate
sh.Cells(1, 1).Activate
SendKeys "{TAB}", True ' ※ #1 ご回答のポイント
Next
End Sub
KenKen_SPさま、ありがとうございます。
>・SendKeys 実行時に目的のウインドウがアクティブになっていなければ
ならない
今回のはアクティブになっていましたが勉強になりました。
> 第2引数を True にする必要があります。
調べました。
(既定値) False/プロシージャの終了を待たずに次の行に制御を移します。
True/処理が終了するまで実行を一時中断します。
ということだったんですね。
ありがとうございます。
No.2
- 回答日時:
こんばんは。
上位バージョンですと、また違う方法もありますが、Excel2000 ですと、こんな方法があるのかなって思います。ただし、シートをぐるぐる回すのは、ちょっと取りやめました。
もしするなら、最初に、モジュールレベルで、変数をプロシージャの外に出して、シートごとの配列変数に、UnLocked Cells のAddressを溜めておくほうが便利かもしれません。
Sub FindUnLockedCells()
Dim arAddress() As String
Dim sh As Object 'As Worksheet
Dim c As Range
Dim i As Long
Dim j As Long
Set sh = ActiveSheet
For Each c In sh.UsedRange.Cells
If c.Locked = False Then
ReDim Preserve arAddress(i)
arAddress(i) = c.Address
i = i + 1
End If
Next c
'選択実行
For j = LBound(arAddress) To UBound(arAddress)
sh.Range(arAddress(j)).Activate
MsgBox arAddress(j)
Next j
End Sub
Wendy02さま、おはようございます。
これはロックされてないセルのAddress変数に入れて、それを選択しているのですね。
勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
【sendkeysメソッドが動かずに苦慮しております】
Visual Basic(VBA)
-
5
SendKeysの使い方について
Visual Basic(VBA)
-
6
VB6でSendKeyを利用したTab移動でキーボードが効かなくなる!
Visual Basic(VBA)
-
7
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
8
vba で illustrator に sendkey ^a" を送っても効かない"
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VLOOKUP FALSEのこと
-
【関数】【マクロ】売上X円以上...
-
エクセルシートの見出しの文字...
-
【マクロ 画像あり】Exact関数...
-
空白処理を空白に
-
同じ名前(重複)かつ 日本 ア...
-
excel
-
if関数の複数条件について
-
エクセルでフィルターした値を...
-
空白のはずがSUBTOTAL関数でカ...
-
【マクロ】エラー【#DIV/0!】が...
-
【マクロ】数式を入力したい。...
-
【関数】3つのセルの中で最新...
-
Excelで4択問題を作成したい
-
エクセルの文字数列関数と競馬...
-
オートフィルターの絞込みをし...
-
表計算ソフトでの様式の呼称
-
【画像あり】【関数】指定した...
-
エクセルに写真が貼れない(フ...
-
【関数】=EXACT(a1,b1) a1とb1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの差込印刷で可視セルだけ...
-
Excelマクロで空白セルを詰めて...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
Excel で行を指定回数だけコピ...
-
Excel VBA インデックスの境...
-
エクセルVBAで SendKeys "{TAB}"
-
Excel VBA :2回目以降実行で貼...
-
歯抜けの時間を埋めて行の挿入
-
VBA 貼付先範囲(行)がいっぱ...
-
エクセル:VBAで月変わりで、自...
-
VBAの指示の内容 昨日こちらで...
-
Excelマクロ データが上書きさ...
-
Excel VBA 複数条件にマッチし...
-
VBA別シートの最終行の下行へ貼...
-
VBA、条件に合致・貼り付けにつ...
-
VBA オートフィルター
-
エクセルVBAについて
-
【VBA】UserForm1の中で使うワ...
-
配列にキーを格納した際の出力...
おすすめ情報