Sub test2()
Dim rng As Range
Dim shp As Shape
Dim Sh1 As Worksheet
Dim checkRange As Range
Set Sh1 = ThisWorkbook.Worksheets("申請書")
With ThisWorkbook.Sheets("申請書")
Set checkRange = .Range("AK23:AL23")
' 結合セルが実際に結合されているか確認する
If checkRange.MergeCells = True Then
'Debug.Print "結合セルの範囲:" & checkRange.Cells(1).MergeArea.Address
' 結合セルの左上隅と、結合セルの幅・高さを取得する
h = Range("AK23").Top 'セルA1の左上隅から画面上部までの距離をポイント単位で取得します。
lef = Range("AK23").Left 'セルA1の左上隅から画面左端までの距離をポイント単位で取得します。
wd = Range("AK23").Width '結合セルの幅をポイント単位で取得します。
hg = Range("AK23").Height
Debug.Print "h=" & h
Debug.Print "lef=" & lef
Debug.Print "wd=" & wd
Debug.Print "hg=" & hg
Debug.Print "lef + wd / 2=" & lef + wd / 2
Debug.Print "h - 0.5=" & h - 0.5
Debug.Print "hg + 1=" & hg + 1
With Sh1.Shapes.AddShape(msoOval, lef + wd / 2, h - 0.5, hg + 1, hg + 1)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
Else
MsgBox "指定されたセルは結合されていません。", vbExclamation
End If
End With
End Sub
With Sh1.Shapes.AddShape(msoOval, lef + wd / 2, h - 0.5, hg + 1, hg + 1)の部分で、
指定された値は境界を超えていますというメッセージが表示されます。
囲む文字は「有」か「無」なので、
lef + wd / 2, h - 0.5, hg + 1, hg + 1の数値指定ならうまく囲めそうな気がするのですが、
どのように修正したらよいのでしょうか?
ざっとみたところ下記の箇所があきらかな間違いですので、修正してみてください。
これでとりあえずはエラーなく動くと思います。
もし自分が書くなら下記のような感じになります。
ちなみに、
ここは Microsoft Access に関する質問をする掲示板です。次回からは適切な掲示板で質問してください。
例えば、
エクセル質問掲示板 質問 疑問 使い方 掲示板 エクセル Excel [エクセルの学校]
Excel VBA を学ぶなら moug モーグ|Excel (VBA)
ありがとうございました。
非常に分かりやすいコードです。