
エクセル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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) vba アクティブシートのA1セルの値を基準に複数のシートコピー&シート名を 6 2023/04/12 18:36
- その他(Microsoft Office) エクセル VBAについて 2 2022/09/21 22:21
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
【sendkeysメソッドが動かずに苦慮しております】
Visual Basic(VBA)
-
-
4
VB6でSendKeyを利用したTab移動でキーボードが効かなくなる!
Visual Basic(VBA)
-
5
SendKeysの使い方について
Visual Basic(VBA)
-
6
VBA ポップアップが表示されたら常に「はい」を選択したい
Access(アクセス)
-
7
vba で illustrator に sendkey ^a" を送っても効かない"
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Officer360?Officer365?の...
-
勤怠表について ABS、TEXT関数...
-
Excelで4択問題を作成したい
-
エクセル
-
エクセルの関数について
-
エクセルの表で作業してます。 ...
-
グループごとの個数をカウント...
-
エクセルの複雑なシフト表から...
-
エクセルについて
-
エクセルシートの見出しの文字...
-
エクセル GROUPBY関数について...
-
【マクロ】実行時エラー '424':...
-
Excelに貼ったXのURLのリンク...
-
Amazonでマイクロソフトオフィ...
-
グループごとの人数のカウント
-
【マクロ】変数に入れるコード...
-
UNIQUE関数の代用
-
ページが変なふうに切れる
-
空白のはずがSUBTOTAL関数でカ...
-
グループごとの人数のカウント
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロで空白セルを詰めて...
-
VBA:同じ文字列データの比...
-
Excel で行を指定回数だけコピ...
-
エクセル:VBAで月変わりで、自...
-
Excel VBA インデックスの境...
-
excelの差込印刷で可視セルだけ...
-
エクセルVBAで 2種のリストを...
-
EXCELマクロで全シート対...
-
エクセルVBAで SendKeys "{TAB}"
-
VBA別シートの最終行の下行へ貼...
-
エクセルVBA 別シートの複数の...
-
Excel VBAでシート内全体に非表...
-
エクセルVBAで実行時エラー...
-
Excel VBA元データから別シー...
-
VBA 最終行取得からの繰り返し貼付
-
vbaでコントロールブレイク
-
歯抜けの時間を埋めて行の挿入
-
Excelでデータの抽出&別シート...
-
Excelマクロ データが上書きさ...
-
VBAで条件が一致する行のデータ...
おすすめ情報