- ベストアンサー
Exce2007でBorder クラスの LineStype プロパティを設定できません。
- Excel2007で罫線を引く際にBorderクラスのLineStypeプロパティを設定すると実行時エラー '1004'が発生する問題が発生しています。
- 具体的な解決策はまだ見つかっておらず、Excel2007のバグの可能性も考えられます。
- マクロを使用している場合、特にエラーが発生しやすくなるようです。解決策をご存知の方がいらっしゃれば、教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 With Range("A1:E11").Borders(xlInsideVertical) .LineStyle = xlNone End With なるほどね。こちらとしては、罫線も書式ですから、ShapeのLineのように上書きされるわけではないはずですけれど・・・。それとも、xlInsideVertical が問題なのでしょうか? どうも割り切れているわけではないのですが、オブジェクト自体が安定していないのでしょうか。同様のエラーとしては、ピボットテーブルの更新でも発生するようですが、どうも私としては分かりませんでしたね。お役に立てずにすみませんでした。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 海外の掲示板を検索してみると、同じようなエラーが、Excel 2007 で発生しているようです。マイクロソフト・サポートにはまだ出ていませんでした。ただ、私が読んだ限りでは、どこにも解決が出ていないようですが、ちょっと発想の転換をしてみました。一度、試してみてください。 その根拠は、単独で、xlInsideVertical を使用するとエラーを発生させる原因がある可能性があるからです。いずれ、この件は、Microsoft 側からはっきりすると思います。 なお、こちらではExcel 2007 で試してみましたが、エラーが発生しておりません。 '------------------------------------------- Private Sub Workbook_Open() Dim cl As Variant Dim wt As Integer For Each cl In Worksheets("Sheet1").Range("B1:E11").Columns If cl.Column = 5 Then wt = 2 Else wt = 1 End If With cl.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = wt End With Next cl End Sub
お礼
度々ありがとうございます。 回答遅くなってしまい、申し訳ありません。 海外の掲示板までは検索していませんでした。 これからの参考にさせて頂きます。 そこまでして頂き、ありがとうございます。 やはりExcel2007のバグっぽいですか・・・ 早くサポートされると嬉しいですね。 こちらでも今日色々試してみたのですが、以下のように一度線を消すという処理を入れると エラーが発生しなくなりました。 ひとまず、この方法でやってみたいと思います。 Private Sub Workbook_Open() Worksheets("Sheet1").Select With Range("A1:E11").Borders(xlInsideVertical) .LineStyle = xlNone End With With Range("A1:E11").Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlHairline End With With Range("E1:E11").Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin End With End Sub 丁寧に回答して頂きありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >コマンドボタンをSheet上に作成し、標準モジュール上で >処理を行おうとしても、"保存→Bookを閉じる"という動作を行うと同じエラーが発生 なぜ、同じエラーが発生するのか良く分かりません。少なくとも、「保存→Bookを閉じる」というCommandButtonと、保存時のイベント(BeforeSave)とは関係ないのではありませんか? 私は、Openイベントの中身を、Call で、標準モジュールのマクロを呼び出すものというように考えていました。 ただ、一般論ですが、バージョンの違いでエラーが発生する場合は、以下のような対処をします。実際に、私は、Borders の引数は、長くこのように書いています。決して、臨時の書き方ではありません。 これでダメだったら、Workbook_Open()の下に、Stop と書いて、ステップモードにして、どの部分でエラーが発生する箇所を調べてみてください。 ところで、新規のブックにも同様になりますか? これで原因が追求できないようですと、Class モジュールを使わなくてはならないと思います。(不確かですが、Micorosoft サポートにあったような気がします。) '------------------------------------------- Private Sub Workbook_Open() Worksheets("Sheet1").Select With Range("A1:E11").Borders(11) .LineStyle = 1 .Weight = 1 End With With Range("E1:E11").Borders(7) .LineStyle = 1 .Weight = 2 End With End Sub
お礼
再び回答ありがとうございます。 伝え方が下手ですいません。 CommandButtonの操作で行っているのは、Wendy02さんに記述していただいた Worksheets("Sheet1").Select With Range("A1:E11").Borders(11) .LineStyle = xlContinuous .Weight = xlHairline End With With Range("E1:E11").Borders(7) .LineStyle = xlContinuous .Weight = xlThin End With のみしか行っていないです。 CommandButtonの操作以外にはマクロを何も設定しない状態です。 CommandButtonのマクロを2回以上実行後に「保存→Bookを閉じる」を行うという事です。 LineStyle、Weightの指定に数字を使うのも試してましたが、駄目でした。 エラーになる箇所は、質問の所にも記入しましたが With Range("A1:E11").Borders(11) .LineStyle = xlContinuous になります。 ※新規のブックでも同様にエラーになります。 試して頂ければ再現できると思います。(何台かのPCで再現しているので) Micorosoft サポートのClass モジュールについてはちょっと調べてみたいと思います。 ありがとうございます。 又何か分かる事があれば、回答お願い致します。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 まず、エラーそのものとは関係のないところから指摘します。 >実線→点線→実線と繰り返した後に、 どうみても、何度も繰り返すようなマクロではないような気がします。なぜ、Workbook_Open()イベントに登録したのでしょうか?一旦、罫線を引いたら、それでおしまいではないでしょうか?その罫線がないときに、罫線を引くということですが、Workbook_Open()イベントではなく、一般マクロにしたほうがよいのではありませんか? Workbook_Open()イベントは、ローカルマクロ(特定のブックのみに適用される)ものですから、そのコードの中身自体は、「標準モジュール」に適しているとは思います。 ただ、書かれていない部分にエラーの原因があるかもしれませんが、現在のマクロに適用するものとして、書き換えてみました。たぶん、Range オブジェクトが正しく取れていないから、Border クラスのエラーが出たのではないか、と考えました。 '------------------------------------------- Private Sub Workbook_Open() Worksheets("Sheet1").Select With Range("A1:E11").Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlHairline End With With Range("E1:E11").Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin End With End Sub
お礼
回答ありがとうございます。 説明不足で申し訳ありません。 Workbook_Open()イベントで行っている理由は、Bookを閉じる際には罫線を引く列が増えている可能性があり、 Bookを開いた際に線を綺麗に引き直したい為、Workbook_Open()イベントで処理を行うようにしています。 (実際にはA1:E11,E1:E11という箇所には変数【セルから取得】が設定されており、Bookを開く度に値が変わります。) ただ今回は書かれていない部分に関係なく、掲載したマクロのみでも事象を再現出来るので、その辺りを省略してしまいました。 Wendy02さんに修正して頂いたマクロのみでもやはり、同じエラーが発生してしまいます。 ちなみにご指摘頂いた様に、コマンドボタンをSheet上に作成し、標準モジュール上で 処理を行おうとしても、"保存→Bookを閉じる"という動作を行うと同じエラーが発生します。 (ボタンを2回以上押して"保存→Bookを閉じる"という動作を行い、Bookを開き直しボタンを押すとエラー) 何か他に考えられる原因はあるでしょうか・・・? もし何か分かったら回答お願い致します。
お礼
お疲れ様です。 そうなんですよね。 結局私もすっきりはしていないのですが、やはりxlInsideVerticalが悪さしてそうですね。 いえいえ色々参考にさせて頂きました。 大変感謝しています。 ひとまず、回答は締め切らせて頂きます。 また機会があったら、宜しくお願い致します。