Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3013 / 13644 ツリー ←次へ | 前へ→

【64784】ワークシートのアクティベートについて VBA初心者 10/3/13(土) 11:06 質問[未読]
【64785】Re:ワークシートのアクティベートについて よろずや 10/3/13(土) 11:26 発言[未読]
【64786】Re:ワークシートのアクティベートについて VBA初心者 10/3/13(土) 11:57 質問[未読]
【64787】Re:ワークシートのアクティベートについて VBA初心者 10/3/13(土) 12:00 発言[未読]
【64788】Re:ワークシートのアクティベートについて UO3 10/3/13(土) 13:22 回答[未読]
【64789】Re:ワークシートのアクティベートについて ichinose 10/3/13(土) 21:07 発言[未読]
【64790】Re:ワークシートのアクティベートについて VBA初心者 10/3/13(土) 21:29 お礼[未読]

【64784】ワークシートのアクティベートについて
質問  VBA初心者  - 10/3/13(土) 11:06 -

引用なし
パスワード
   初歩的な質問で申し訳ありませんが、知恵を貸してください。

今、あるワークシートAからデータを抽出し、Bというワークシートを
作成して、Bのデータが入っているセルに罫線を引いて表を作ろうと
しています。

データの抽出は、何とかなったのですが、罫線を引こうとして
ワークシートBに罫線を引こうとしているのに、ワークシートAに
罫線が引かれてしまいます。

罫線を引く直前にアクティブワークブックとアクティブワークシートを
debug.printで確認しているのですが、ワークシートBになっています。

何が問題なのでしょうか。

ちなみに、マクロはワークシートAに書いています。
EXCEL2007です。
罫線を引くためのコードを以下に示します。
件数(行数)は上位でカウントして、渡しています。
**********************************************************************
Sub keisen(Xsen_kensu As Integer)
  Range(Cells(5, 2), Cells(Xsen_kensu + 5, 20)).Borders.LineStyle = True
End Sub

【64785】Re:ワークシートのアクティベートについて
発言  よろずや  - 10/3/13(土) 11:26 -

引用なし
パスワード
   >罫線を引く直前にアクティブワークブックとアクティブワークシートを
>debug.printで確認しているのですが、ワークシートBになっています。
マクロを標準モジュールに書いた場合はその考え方でOKです。

>ちなみに、マクロはワークシートAに書いています。
これだと、アクティブかどうかに関係なくワークシートAが対象になります。

【64786】Re:ワークシートのアクティベートについて
質問  VBA初心者  - 10/3/13(土) 11:57 -

引用なし
パスワード
   よろずやさん、早速の返信ありがとうございます。

私の至らない点を全て指摘されているようで恥ずかしい限りです。

>>罫線を引く直前にアクティブワークブックとアクティブワークシートを
>>debug.printで確認しているのですが、ワークシートBになっています。
>マクロを標準モジュールに書いた場合はその考え方でOKです。

最初は標準モジュールに書いていたのですが、どうも動きが
思い通りにならず、標準モジュールから外しました


>
>>ちなみに、マクロはワークシートAに書いています。
>これだと、アクティブかどうかに関係なくワークシートAが対象になります。

ということは、標準モジュールに書いた方が良いという事でしょうか。
ワークシートAで書いていて、別のワークシートに罫線を書くことは
できないということでしょうか。

【64787】Re:ワークシートのアクティベートについて
発言  VBA初心者  - 10/3/13(土) 12:00 -

引用なし
パスワード
   すいません。

標準モジュールから外した理由ですが、
自分のPCで、思い通りに動作していたのに
他のPCではエラーになったためです。
どちらもEXCEL2007でした。パッチも同じです。

新規に投稿した方が良いかも知れませんが、
PCによって動作が違うのは、何が考えられるのでしょうか。

【64788】Re:ワークシートのアクティベートについて
回答  UO3  - 10/3/13(土) 13:22 -

引用なし
パスワード
   ▼VBA初心者 さん:

よこから失礼します。
当方、2003なので2007のことはよくわかりませんが、
エラーとなった、そのエラーとは、どんなエラーだったんでしょうか?

それと、1つ前に記載の
>ワークシートAで書いていて、別のワークシートに罫線を書くことは
>できないということでしょうか。

ActiveSheet.Range(・・・・ あるいは
WorkSheets("シート名").Range(・・・・ とすれば可能です。
ただ、個人的には、シートモジュールでは、あくまで、そのシートに対する
処理にとどめるべきだと思っておりますが。

【64789】Re:ワークシートのアクティベートについて
発言  ichinose  - 10/3/13(土) 21:07 -

引用なし
パスワード
   こんばんは。

>>>ちなみに、マクロはワークシートAに書いています。
>>これだと、アクティブかどうかに関係なくワークシートAが対象になります。
>ということは、標準モジュールに書いた方が良いという事でしょうか。
>ワークシートAで書いていて、別のワークシートに罫線を書くことは
>できないということでしょうか。

>Sub keisen(Xsen_kensu As Integer)
>  Range(Cells(5, 2), Cells(Xsen_kensu + 5, 20)).Borders.LineStyle = True
>End Sub

このプロシジャーをどこに置くかという問題も確かにあります。
(別プロシジャーにする必要性も含めてね)。

が、それは別問題として

上記プロシジャーが配置したモジュールによって、動作したりしなかったりするのは、
パラメータとして、渡す情報が不足しているからです。

一例ですが、

Sub keisen(byval Rng as range)
  Rng.Borders.LineStyle = True
End Sub

として、
呼び出し側で
sub test()
 dim r as range
 dim Xsen_kensu as long
 dim sht as worksheet
 set sht=worksheets("ワークシートB")
 Xsen_kensu=5
 set r=sht.range(sht.cells(5,2),sht.cells(Xsen_kensu + 5, 20))
 Call keisen(r)
end sub

とするか又は、


Sub keisen(byval sht as worksheet,Xsen_kensu As long)
  with sht
   .range(.cells(5,2), _
     .cells(Xsen_kensu + 5, 20)).Borders.LineStyle = True
  end with
End Sub

として、呼び出し側で

Sub test()
 Dim sht As Worksheet
 Set sht = Worksheets("ワークシートB")
 Call keisen(sht, 5)
End Sub

なんていうパラメータ渡しが考えられます。


このようにしておくと、配置するモジュールに依存しないと思います。




【64790】Re:ワークシートのアクティベートについて
お礼  VBA初心者  - 10/3/13(土) 21:29 -

引用なし
パスワード
   回答頂いた皆さまへ

色々とアドバイスありがとうございました。
もう少し勉強が必要だという事も含めて
良くわかりました。
今後ともよろしくお願いします。

追伸;
2007の別PCで動作しなかったときは
「rangeクラスのselectメソッドが失敗しました」という
エラーが出ていました。

3013 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free