- ベストアンサー
EXEL VBAで複数のsheetを指定するには?
ThisWorkbookにsheet1からsheet9までの範囲で処理をさせたいと思い Else Worksheets("Sheet1", "sheet3").Select If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing Then If Target.Value = "" Then Target.Value = "2010/" Application.SendKeys "{f2}" としますがエラーになります。 色々調べましたが、精根尽き果ててお伺いします。 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
NO5です。 >どうも、シートに名前を付けているのがひっかかってるみたいです。 ⇒"Sheetn"の箇所を実体の名前にして下さい。
その他の回答 (5)
- mu2011
- ベストアンサー率38% (1910/4994)
NO4です。 余計な事をしたみたですね、コードを元に戻しましたのでお試しください。 因みにこちらでは問題なく確認できているのですが。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Target, Sh.Range("C7:E299")) Is Nothing Then SendKeys "%{DOWN}" Else Select Case Sh.Name Case "Sheet1", "Sheet2", "Sheet3" If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing Then If Target.Value = "" Then Target.Value = "2010/" Application.SendKeys "{f2}" End If End If End Select End If Application.EnableEvents = True End Sub
お礼
exel objectに表示されてるとおり下記のとおり Case "Sheet1(H22.4)", "Sheet2(H22.5)", "Sheet3(H22.6)" いれてみますが駄目みたいです。 宜しくお願いします。
補足
白紙のシートでやると出来ますね。 しかし、現在のファイルでやると出来ないのですが? どうも、シートに名前を付けているのがひっかかってるみたいです。 名前を付けた場合の書き方はどのようにするのでしょうか? 宜しくお願いします。
- mu2011
- ベストアンサー率38% (1910/4994)
NO2です。 一例です。 シート名範囲をチェックすればよいのでしょうか。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Target, Sh.Range("C7:E299")) Is Nothing Then SendKeys "%{DOWN}" Else Select Case Sh.Name Case "Sheet1", "Sheet2", "Sheet3" If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing _ And Target.Value = "" Then Target.Value = "2010/" Application.SendKeys "{f2}" End If End Select End If Application.EnableEvents = True End Sub
お礼
ありがとうございます。 このとおりやってみますが、シート1~3でマクロが動いてないみたいなのですが? つまりセル上で2010/が出てこないみたいです。 それで If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing _ And Target.Value = "" Then を元の If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing Then If Target.Value = "" Then にしてやると今度は selectcaseに対するEnd Selectがないとでます。 endselectはあるのに・・・? うーーん、わかりません。 宜しくお願いします。
- mu2011
- ベストアンサー率38% (1910/4994)
NO2です。 >実行時エラー”9”インデックスが有効範囲にありません ⇒仕様、マクロ全体を明示されていないので現象を通知されても何も分かりません。 この辺りを補足をして下さい。
お礼
解答ありがとうございます。やはり中途半端に書いては駄目みたいですね。 下記をthisworkbookに置いてelse以下の処理をsheet1~3で行いたいのです。 else以前の部分は全体の処理でいいのですが。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Target, Sh.Range("C7:E299")) Is Nothing Then SendKeys "%{DOWN}" Else If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing Then If Target.Value = "" Then Target.Value = "2010/" Application.SendKeys "{f2}" End If End If End If Application.EnableEvents = True End Sub 宜しくお願いします。
- mu2011
- ベストアンサー率38% (1910/4994)
>エラーになります。 ⇒(誤)Worksheets("Sheet1", "sheet3").Select (正)仮にSheet1~Sheet3ならSheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
お礼
解答ありがとうございます。 やってみたところ、 実行時エラー”9” インデックスが有効範囲にありません と出ます。
- DreamyCat
- ベストアンサー率56% (295/524)
for each sh in .... (略)のようになっているとすれば Worksheets("Sheet1", "sheet3").Select この部分を if sh.name="Sheet1" or sh.name="Sheet3" then sh.select こう書き換えればいいのではないかと。
お礼
早速の解答ありがとうございます。for each sh in ではないので下記に記します。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Target, Sh.Range("C7:E299")) Is Nothing Then SendKeys "%{DOWN}" Else If Not Intersect(Target, Sh.Range("B7:B299")) Is Nothing Then If Target.Value = "" Then Target.Value = "2010/" Application.SendKeys "{f2}" End If End If End If Application.EnableEvents = True End Sub それでelse以下にsheet1~sheet3迄の処理をさせたいのです。 ちなみにお教え頂いたif sh.name="Sheet1" or sh.name="Sheet3" then sh.select のとおりに書き換えても駄目みたいです。 宜しくお願いします。
お礼
出来ました、sheetをいれずにH22.4とそのままを入れたら出来ました。 お陰で助かりました。 本当に色々ありがとうございました。
補足
exel objectに表示されてるとおり下記のとおり Case "Sheet1(H22.4)", "Sheet2(H22.5)", "Sheet3(H22.6)" いれてみますが駄目みたいです。 宜しくお願いします。