dポイントプレゼントキャンペーン実施中!

今回の質問は図形に寸法値を入れるために基礎学習として簡単なマクロを作った件についてです。

シート上のコマンドボタンでフォームを呼び出し、文字の位置(100とか)を入力し、数字等文字を打ち込むと
打ち込んだ文字がその位置に表示されるというものです。

Private Sub Cmd文字表示_Click()
Dim x As Single, y As Single, Sh As Shape
On Error Resume Next

x = CSng(Text位置A.Value)
y = CSng(TextBox1.Value)

With ActiveSheet
For Each Sh In .Shapes

If Sh.Name <> "Cmd文字入力" Then
Sh.Delete
End If

Next Sh
.Shapes.AddTextbox(msoTextOrientationHorizontal, x, x, _
x, x).Select

End With
With Selection.ShapeRange
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 0.75
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
.Line.Visible = msoFalse
End With

Selection.Characters.Text = "y"

With Selection.Characters(Start:=1, Length:=3).Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

End Sub

文字位置を自由に変えることは出来ますが打ち込んだ文字に変化させることが出来ません。
簡略的なコードや文字を表示させるには別の方法があるという方がいましたらご教示お願いします。

A 回答 (3件)

とりあえず、23行目の引用符を取り除いて


Selection.Characters.Text = y
とすれば、TextBox1に入力した数値が表示されます。

TextBox1に入れた文字が変数yに入りますが、
yはSingle型ですから、数値しか表示できません。

また、「小数点以下2桁」など書式設定をして表示したいなら、
Selection.Characters.Text = Format(y, "0.##")
などとします。

文字でも数値でもとにかくTextBox1に入力したとおりに表示させたいなら、
2行目を
Dim x As Single, y As String, Sh As Shape
5行目を
y = TextBox2.Value
23行目を
Selection.Characters.Text = y
でよいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

早速、一番下の回答でトライしてみました。出来ました!

Dim x As Single, y As String, Sh As Shape
y = TextBox2.Value
ここまでは思いついていました。

しかし、
Selection.Characters.Text = "y"
の””がまずいということまで気が付きませんでした。

とはいえ、自分でもある程度までは出来ていたことに喜んでいます。

文字を表記するのは線を描くよりもコードが長いですね。
最初はワードアートで考えていました。本にはそれしか載っていなかったので。

テキストボックスは私が考えたのですがコードが長いですね。

文字を表記する方法はこれしかないのでしょうか。

図形を描いてその線分の長さを線の脇に書くことを考えているのですがSetステートメントなどでこのコードを短縮しておき、他の線には変数で対応することを考えています。

ひとまずありがとうございました。

お礼日時:2005/01/22 12:12

こんにちは。


If Sh.Name <> "Cmd文字入力" Then
が使えるようになりましたね。
ちょっと気になってきたのでほっとしました。

序にコードの長さについて一言。

マクロ記録では不必要なプロパティまで設定してしまうので冗長なコードにはなりますが、その反面、プロパティーを覚える手助けにはなると思いますので不必要なコードを無闇に削除するのではなく、意味をよく理解してから削除するように心掛けてください。VBA勉強中であれば尚更のこと。

また、マクロ記録では頻繁にSelectが出てきますがこれはほとんどが不必要なものですので必要な時以外は削除するようにしましょう。

それから「表示のみ」の場合は、Label Controlが基本です。

ところで今勉強中の図形の寸法表示ですが、例えば四角形の「縦」の寸法表示は上手くいきますか?

以上です。

この回答への補足

>If Sh.Name <> "Cmd文字入力" Then
>が使えるようになりましたね。
>ちょっと気になってきたのでほっとしました。

前回の質問を締め切った後にとうとう原因がわかりました。

Sheet1上にある「名前ボックス」がCommandBattun1であることに気が付きました。早速、名前を「Cmd作図」にしたところ見事にコマンドボタンが消えなくなりました。

今までそんなところは気にもしなかったのですがSheet1上にあるオブジェクトの属性というべきものを表示する重要なところなんだなと感じました。

私にとっては時間をかけた分、大きな一歩でした。

前回ヒントをもらってからプログラムもかなり進化しています。

If文を使い、ある高さを超えると4角形から5角形を描画することや寸法線表示も図形の形状に合わせて出来るようにしました。

VBAは、一つの定形のコードを覚えるとどんどん応用が出来る感じがしています。

補足日時:2005/01/22 20:27
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>ところで今勉強中の図形の寸法表示ですが、例えば四角形の「縦」の寸法表示は上手くいきますか?

この文章を見てヒョっとしたらと感じましたのでトライしてみました。昨日、深夜まで試行錯誤したのですが出来ませんでした。

安易に考えていたようです。

テキストボックス、縦書きテキストボックスのどちらかを使いテキストボックスの書式設定で方向を縦使いに直すマクロの記録をを取りました。

With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
.Orientation = xlUpward
.AutoSize = False
.AddIndent = False
End With

このうちの
.Orientation = xlUpward
が該当するコードであることがわかりましたので前に作った文字表示のマクロにコピペしたのですが横使いのままでした。

セル範囲でしたら
Range("A1:A5").Orientation = 90

というコードでできるということがわかりましたのでアレンジしてやってみたのですが出来ませんでした。

マクロの記録で記録したコードにコマンドボタンをつけてみましたら出来なくなってしまいました。

マクロの実行で出来ることがコマンドボタンでは出来なくなるという点でコードの記述に問題があるのではと感じています。

お礼日時:2005/01/23 07:58

短くするには不要な命令を削ってはいかがでしょうか。



2番目のWithブロックの中は
.Fill.Visible = msoFalse
.Line.Visible = msoFalse
だけでいいと思うし、

3番目のWithブロックは
With Selection.Characters.Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 11
End With
でいいと思います。

文字を自由な位置に置きたいなら、仰るとおりテキストボックスやその同類(オートシェイプ)を使うしかないと思います。
    • good
    • 0
この回答へのお礼

再度、回答ありがとうございます。

早速、コードを削ってみました。

かなり簡略化できました。

マクロの記録でコードを作るといろいろコードが表示されてしまいますよね。

でも、これってどうゆうコードなのかなって調べるときはいいですね。

ありがとうございます。

お礼日時:2005/01/22 20:27

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