Sub Macro1()
Range("A1:B11").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
まぁ、罫線引くマクロが長い・長いとか言ってないで、組み込んでみますか。
じっさいに<b>やってみないと</b>、わからないしね(何が?何を?(謎))
Dim objRANGE As Object '範囲の代入
と、
1つセルの範囲を代入するオブジェクト変数を定義して、
Set objRANGE = objEXCEL.Range("A1:B11") '範囲の代入
で、範囲を代入(Rangeオブジェクトの代入)
objRANGE.Value = "aaaa" 'テストデータ代入
あとは、テスト目的の、左右の罫線をテストで引いてみます。
With objRANGE.Borders(xlEdgeLeft) '左
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With objRANGE.Borders(xlEdgeRight) '右
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
なんて感じで、
objRANGEの.Bordersに対して、値をセットします。
Private Sub btnTEST003_Click()
Dim objEXCEL As Object 'Excel参照用
Dim objRANGE As Object '範囲の代入
'Excelを起動する、オブジェクトの作成
Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成
objEXCEL.Visible = True 'Excelを見えるようにする
'新規のブックを追加する
objEXCEL.Workbooks.Add 'Excelのブックを作成
'Excelのシートを追加、シート名を変更する
objEXCEL.Sheets.Add 'シートを追加する
objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする
'テストで罫線を引いてみる
Set objRANGE = objEXCEL.Range("A1:B11") '範囲の代入
objRANGE.Value = "aaaa" 'テストデータ代入
'テストで左右の罫線を引いてみる
With objRANGE.Borders(xlEdgeLeft) '左
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With objRANGE.Borders(xlEdgeRight) '右
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Sub aaa()
'Excelで走らせてね
MsgBox "xlCenterは" & xlCenter
'-4108って表示されると思う
'これだとかっこ悪いのでHexで16進にする
MsgBox "xlCenterは16進数だと" & Hex(xlCenter)
'FFFFEFF4となる
End Sub
例えば、
oApp.Range("C3:D3").Select
With oApp.Selection
.HorizontalAlignment = oApp.xlCenter
.MergeCells = True
End With
このコードだと、
問題の場所は、
.HorizontalAlignment = oApp.xlCenter
の代入文です、参照設定されていないと、.xlCenterが使えない。
先ほどのExcel側の確認で、.xlCenterが&hFFFFEFF4と確認したので、
自分で下記のように代入してみる。
Private Sub コマンド0_Click()
Dim oApp As Object
Set oApp = CreateObject("Excel.Application")
oApp.Visible = True
'Only XL 97 supports UserControl Property
oApp.UserControl = True
'Access側でテストする
oApp.Workbooks.Add 'ブックを追加
oApp.Range("C3:D3").Select
With oApp.Selection
.HorizontalAlignment = &HFFFFEFF4 '-4108でもOKです
.MergeCells = True
.Value = "TEST DATA"
End With
End Sub
参照設定、する、しないは、お任せして、
指定範囲を受け取ったら、
罫線を上下左右、縦・横に引く関数を作成してみます。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
関数のポイントは、
'テストで左右の罫線を引いてみる
With objRANGE.Borders(xlEdgeLeft) '左
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With objRANGE.Borders(xlEdgeRight) '右
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
左右の罫線を引く処理で、
違いは、xlEdgeLeft, xlEdgeRight
~~~~~~~~
だけで場所の指定が違い、セットしている値は一緒なので、
これを6つの上、下、左、右、垂直、水平の罫線分ループで回してみます。
'Rangeのエリアを受け取り、罫線を引く
Private Sub make_Border(objXY As Object)
'罫線用のExcel定数(参照設定している場合は、必要無し)
Const xlEdgeLeft = &H7
Const xlEdgeRight = &HA
Const xlEdgeTop = &H8
Const xlEdgeBottom = &H9
Const xlInsideVertical = &HB
Const xlInsideHorizontal = &HC
Const xlContinuous = &H1
Const xlThin = &H2
Const xlAutomatic = &HFFFFEFF7
Dim n As Integer
'配列に代入する
Dim styleBOX As Variant
styleBOX = Array(xlEdgeLeft, xlEdgeRight, xlEdgeTop _
, xlEdgeBottom, xlInsideVertical, xlInsideHorizontal)
For n = 0 To 5 '各ラインに対して、値をセットする
With objXY.Borders(styleBOX(n))
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Next n
End Sub
参照設定をしないで、値を調べて、
Const xlEdgeLeft = &H7
Const xlEdgeRight = &HA
なんて邪道な方法ですが(みなさんはマネしないでね)
今回、メルマガサンプルで不特定多数の人が使うので、使ってみました。
Array関数で、配列を初期化して、
ループで、
For n = 0 To 5 '各ラインに対して、値をセットする
With objXY.Borders(styleBOX(n))
と、回して、オブジェクトを変化させてます。
呼ぶ方法は、
'テストで罫線を引いてみる
Set objRANGE = objEXCEL.Range("A1:B11") '範囲の代入
objRANGE.Value = "aaaa" 'テストデータ代入
Call make_Border(objRANGE) '罫線を引く
Call make_Border(objEXCEL.Range("D1:E11")) '罫線を引く
みたいに、Rangeの範囲を渡してます。