• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Exce2007でBorder クラスの LineStype プロパティを設定できません。)

Exce2007でBorder クラスの LineStype プロパティを設定できません。

このQ&Aのポイント
  • Excel2007で罫線を引く際にBorderクラスのLineStypeプロパティを設定すると実行時エラー '1004'が発生する問題が発生しています。
  • 具体的な解決策はまだ見つかっておらず、Excel2007のバグの可能性も考えられます。
  • マクロを使用している場合、特にエラーが発生しやすくなるようです。解決策をご存知の方がいらっしゃれば、教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。  With Range("A1:E11").Borders(xlInsideVertical)    .LineStyle = xlNone  End With なるほどね。こちらとしては、罫線も書式ですから、ShapeのLineのように上書きされるわけではないはずですけれど・・・。それとも、xlInsideVertical が問題なのでしょうか? どうも割り切れているわけではないのですが、オブジェクト自体が安定していないのでしょうか。同様のエラーとしては、ピボットテーブルの更新でも発生するようですが、どうも私としては分かりませんでしたね。お役に立てずにすみませんでした。

bart0521
質問者

お礼

お疲れ様です。 そうなんですよね。 結局私もすっきりはしていないのですが、やはりxlInsideVerticalが悪さしてそうですね。 いえいえ色々参考にさせて頂きました。 大変感謝しています。 ひとまず、回答は締め切らせて頂きます。 また機会があったら、宜しくお願い致します。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 海外の掲示板を検索してみると、同じようなエラーが、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

bart0521
質問者

お礼

度々ありがとうございます。 回答遅くなってしまい、申し訳ありません。 海外の掲示板までは検索していませんでした。 これからの参考にさせて頂きます。 そこまでして頂き、ありがとうございます。 やはり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)
回答No.2

こんにちは。 >コマンドボタンを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

bart0521
質問者

お礼

再び回答ありがとうございます。 伝え方が下手ですいません。 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)
回答No.1

こんにちは。   まず、エラーそのものとは関係のないところから指摘します。 >実線→点線→実線と繰り返した後に、 どうみても、何度も繰り返すようなマクロではないような気がします。なぜ、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

bart0521
質問者

お礼

回答ありがとうございます。 説明不足で申し訳ありません。 Workbook_Open()イベントで行っている理由は、Bookを閉じる際には罫線を引く列が増えている可能性があり、 Bookを開いた際に線を綺麗に引き直したい為、Workbook_Open()イベントで処理を行うようにしています。 (実際にはA1:E11,E1:E11という箇所には変数【セルから取得】が設定されており、Bookを開く度に値が変わります。) ただ今回は書かれていない部分に関係なく、掲載したマクロのみでも事象を再現出来るので、その辺りを省略してしまいました。 Wendy02さんに修正して頂いたマクロのみでもやはり、同じエラーが発生してしまいます。 ちなみにご指摘頂いた様に、コマンドボタンをSheet上に作成し、標準モジュール上で 処理を行おうとしても、"保存→Bookを閉じる"という動作を行うと同じエラーが発生します。 (ボタンを2回以上押して"保存→Bookを閉じる"という動作を行い、Bookを開き直しボタンを押すとエラー) 何か他に考えられる原因はあるでしょうか・・・? もし何か分かったら回答お願い致します。

関連するQ&A