罫線を引くとエラーが出るが?

Question 26.1 Previous Next
マクロを作成する際には、いつも参考にさせて頂いております。 本当に感謝しています。初心者の私でも解かり易く、重宝しています。
【質問】 罫線をひく簡単なマクロを作成しているのですが、解からない事があります。
線種の選択をメニューに入れて選択した線種で、 [Cntl]+[→]で罫線引きし、[Shift]+[→]で罫線を消すようなマクロなのですが、 太線(Weight=xlMedium),2重線(LineStyle=xlDouble)でエラーがでます。
その他の、細線,点線は問題ないのですが・・・ Excel2000を使っています
もし、よろしければご回答頂きたくよろしくお願い致します。 今後も、解かり易いマクロ集の更新に期待しております。
Answer   Copyright (C) 2000.2.25 永井善王
矢印キーで罫線を引く便利なマクロを、作成されているようですね。ご質問の「罫線」とは、ワークシートのセルの書式設定の罫線のこととして、回答を進めます。
太線と2重線がうまく引けないということですので、LineStyleプロパティと Weightプロパティの定数を、下表にまとめてみました。 Excel2000で、LineStyleを xlDoubleと設定するのは、14番の2重線だけですが、Weightを xlMediumと設定するのは、8番~12番の5種類の罫線があります。
罫線の種類 【Excel2000,98,97】 プロパティの定数 【Excel95】 プロパティの定数
LineStyle Weight Weight (-は使えない)
1 なし  xlNone  (設定不要)  xlNone
2 LineStyle  xlContinuous  xlHairline  xlHairline
3 LineStyle  xlDot  xlThin  xlDot
4 LineStyle  xlDashDotDot  xlThin  -
5 LineStyle  xlDashDot  xlThin  -
6 LineStyle  xlDash  xlThin  xlDash
7 LineStyle  xlContinuous  xlThin  xlThin
8 LineStyle  xlDashDotDot  xlMedium  -
9 LineStyle  xlSlantDashDot  xlMedium  -
10 LineStyle  xlDashDot  xlMedium  -
11 LineStyle  xlDash  xlMedium  -
12 LineStyle  xlContinuous  xlMedium  xlMedium
13 LineStyle  xlContinuous  xlThick  xlThick
14 LineStyle  xlDouble  xlThick  xlDouble
罫線を引くためのマクロの書き方は、Excel2000、98、97では、例えば 14番の2重線の場合、次とおりです。
 ( Excel95での書き方を知りたければ こちら
Sub セルの下辺に2重線を引く()
    Selection.Borders(xlEdgeBottom).LineStyle = xlDouble
    Selection.Borders(xlEdgeBottom).Weight = xlThick
End Sub
ご質問では、「2重線(LineStyle=xlDouble)でエラー」とあるだけで、Weightプロパティをどう設定したか書かれていません。 しかし、「細線、点線は問題ない」とのことなので、この点の誤りはなかったとして、回答を進めます。
上記のマクロでは2重線しか引けませんね。「選択した線種」で引いたり消したりするマクロということですので、 LineStyleプロパティと Weightプロパティの値を、変数で設定するように書くと能率的です。 つまり、
Sub 選択された線種でセルの下辺に罫線を引く()
    Selection.Borders(xlEdgeBottom).LineStyle = スタイル
    Selection.Borders(xlEdgeBottom).Weight = 太さ
End Sub
というような書き方になるでしょう。
そして当然、このサブプロシージャーより前に、それぞれの変数にプロパテイの値または、定数を設定する次のようなマクロが、あるはずです。
Sub 二重線のプロパテイの定数を設定する()
    スタイル = xlDouble
    太さ = xlThick
End Sub
ご質問の文章によると、太線、2重線、細線、点線の、少なくとも 4種類は選択できるようなので、上のようなマクロが 4つ以上あると思われます。
さあ、ここからが注意点です。
「スタイル」変数と 「太さ」変数を、異なるサブプロシージャーで共通して使うためには、変数を宣言しておく方法が一般的ですから、 次のようなマクロコードがあると思います。
Dim スタイル As Variant
Dim 太さ As Long
LineStyleプロパティはバリアント型の値を使用するので、「スタイル」変数は As Variant、 Weightプロパティは長整数型の値を使用するので、「太さ」変数は As Long と書きます。
よって、
As String と書いて実行すると、「実行時エラー '1004': Border クラスの LineStyle プロパティを設定できません。」のエラーが出る場合があるでしょう。 このエラーメッセージの意味は、もう、理解できますね。修正してから試してみてください。
ご成功を祈ります。

Excel VBA Macro