「これはヤバかったな」という遅刻エピソード

初めて投稿させて頂きます。
似たような投稿がありましたが、過去の例とは若干違うので投稿させて頂きました。

Excel2007で罫線を引く下記の手順で処理を実行した所

実行時エラー '1004':
Border クラスの LineStyle プロパティを設定できません。

というエラーが発生してしまいます。
色々調査を行ってはみたのですが、具体的な解決策が見つかっておらず、
Excel2007のバグではないかと思って来ています・・・

解決策をご存知の方いらしゃったら、回答宜しくお願い致します。

再現手順 :
1.新規のBookに下記のマクロを設定してファイルを保存→閉じる
2.保存したファイルを開き直してマクロの実行→保存→閉じる
3.再度2を実行
4.再度2を実行→下記マクロの※1でエラー発生!!!

マクロ :
Private Sub Workbook_Open()
' 1.セルA1:E11を選択して選択したセルの内部縦線を点線にする。
Range(Cells(1, 1), Cells(11, 5)).Select
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous '※1
.Weight = xlHairline
End With
' 2.セルE1:E11を選択して選択したセルの左部縦線を実践にする。
Range(Cells(1, 5), Cells(11, 5)).Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub

※上記1と2の間に別処理が入る為、セルA1:D11と選択し、
右部縦線を実線にするという事は出来ません。

補足 :
1.Excel2007 SP2,Microsoft Visual Basic 6.5を使用
2.Excel2002 SP3だとエラーは発生しない
3.シートの保護等は行っていない
4.再現手順の3を実行中、Bookを閉じる前はセルの書式設定が反応するが、
マクロを無効にして、再度開き直すとセルの書式設定が反応しなくなる。
5.Workbook_Openの代わりにWorkbook_BeforeSaveで同様のマクロを設定し、
何度Saveを実行してもエラーにならない。
(再度開き直して、Saveを行うと同様のエラーが発生する。)

以上の事から、実線→点線→実線と繰り返した後に、Bookを閉じると
セルがおかしくなってしまっているのかなと思います。

長々と書いてしまい申し訳ありませが、もしかしたら・・・
という回答でも構いませんので、回答宜しくお願い致します。

A 回答 (4件)

こんにちは。



 With Range("A1:E11").Borders(xlInsideVertical)
   .LineStyle = xlNone
 End With


なるほどね。こちらとしては、罫線も書式ですから、ShapeのLineのように上書きされるわけではないはずですけれど・・・。それとも、xlInsideVertical が問題なのでしょうか?

どうも割り切れているわけではないのですが、オブジェクト自体が安定していないのでしょうか。同様のエラーとしては、ピボットテーブルの更新でも発生するようですが、どうも私としては分かりませんでしたね。お役に立てずにすみませんでした。
    • good
    • 0
この回答へのお礼

お疲れ様です。

そうなんですよね。
結局私もすっきりはしていないのですが、やはりxlInsideVerticalが悪さしてそうですね。

いえいえ色々参考にさせて頂きました。
大変感謝しています。

ひとまず、回答は締め切らせて頂きます。
また機会があったら、宜しくお願い致します。

お礼日時:2009/11/26 15:26

こんばんは。



海外の掲示板を検索してみると、同じようなエラーが、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
    • good
    • 1
この回答へのお礼

度々ありがとうございます。
回答遅くなってしまい、申し訳ありません。

海外の掲示板までは検索していませんでした。
これからの参考にさせて頂きます。
そこまでして頂き、ありがとうございます。

やはり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

丁寧に回答して頂きありがとうございました。

お礼日時:2009/11/26 13:41

こんにちは。



>コマンドボタンを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
    • good
    • 0
この回答へのお礼

再び回答ありがとうございます。
伝え方が下手ですいません。

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 モジュールについてはちょっと調べてみたいと思います。
ありがとうございます。

又何か分かる事があれば、回答お願い致します。

お礼日時:2009/11/25 16:39

こんにちは。


 
まず、エラーそのものとは関係のないところから指摘します。

>実線→点線→実線と繰り返した後に、

どうみても、何度も繰り返すようなマクロではないような気がします。なぜ、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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
説明不足で申し訳ありません。

Workbook_Open()イベントで行っている理由は、Bookを閉じる際には罫線を引く列が増えている可能性があり、
Bookを開いた際に線を綺麗に引き直したい為、Workbook_Open()イベントで処理を行うようにしています。
(実際にはA1:E11,E1:E11という箇所には変数【セルから取得】が設定されており、Bookを開く度に値が変わります。)
ただ今回は書かれていない部分に関係なく、掲載したマクロのみでも事象を再現出来るので、その辺りを省略してしまいました。
Wendy02さんに修正して頂いたマクロのみでもやはり、同じエラーが発生してしまいます。

ちなみにご指摘頂いた様に、コマンドボタンをSheet上に作成し、標準モジュール上で
処理を行おうとしても、"保存→Bookを閉じる"という動作を行うと同じエラーが発生します。
(ボタンを2回以上押して"保存→Bookを閉じる"という動作を行い、Bookを開き直しボタンを押すとエラー)

何か他に考えられる原因はあるでしょうか・・・?
もし何か分かったら回答お願い致します。

お礼日時:2009/11/25 14:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報