- 01: 名前:RR投稿日:2004/06/29(火) 19:30
- いつも参考にさせていただいております。
マクロ作成で難儀しておりますので、ご教授いただけると幸いです。
シェイプにカスタムプロパティを登録し、それぞれのフィールドに"Prop.Row_1&Prop.Row_2"と
いったようにユーザ定義式を入力し、カスタムプロパティの値を各シェイプ上に表示させています。
このユーザ定義式の内容を一括で"Prop.Row_1&Prop.Row_2"から"Prop.Row_2&Prop.Row_3"という感じで
変更したいのですが、うまくいきません。
良い方法ございましたらご教授いただけますでしょうか。よろしくお願いいたします。
- 10: 名前:kk投稿日:2004/08/31(火) 11:02
- 早速のご返事ありがとうございます。yodaさまの書いたとおりにマクロを変更しましたが、
案の定失敗に終わりました。
一つのページの全てのシェイプのテキストフィールドを一括変更したいですが、
テキストフィールドの参照の仕方などがわかりません。テキストフィールドで
表示させたいの全シェイプ共通のテキストとカスタムプロパティからのデータです。
shp.Cells("Fields.Value").Formula = "Prop.Row_2 & Prop.Row_3"
上の行をそのまま使いますとFields.Valueで引っかかりますが、何が原因でしょうか?
因みにshp.Text = "Prop.Row_2 & Prop.Row_3"と書きますと全シェイプに
"Prop.Row_2 & Prop.Row_3"をそのとおりに埋めてくれますので、テキストを
表示させたいときには使えそうですが、カスタムプロパティからのデータは
どうやって表示できますでしょうか?
初歩的な質問で申し訳ないですが、どうかご教授をお願いします。
- 11: 名前:yoda投稿日:2004/08/31(火) 19:31
- できるだけ簡単な図面で
テストする事をお勧めします。
最初は、シェイプが1つしかない
図面で、それがうまく行ったら
2つという具合に。
08のマクロでうまく動区と思いますよ。
- 12: 名前:yoda投稿日:2004/09/01(水) 02:06
- 新規図面(白紙)に
直線又は長方形を
一コだけ書き、
テキストフィールドと
カスタムプロパティを
定義しと言う具合に、
出来るだけシンプルにです。
- 13: 名前:kk投稿日:2004/09/02(木) 17:15
- 一つのシェイプだったら、エラーも出ないんですが、変更もテキストフィールドに反映されません…
自分で調べて、では勉強しなおしますが、いろいろと教えていただいて、ありがとうございました。
- 14: 名前:yoda投稿日:2004/09/02(木) 19:58
- まずそこで、丹念に原因を調べる
ことをお勧めします。
シェイプシートとVBAのコード
との間に、セル名などの
食い違いなどが、ないかどうか。
- 15: 名前:yoda投稿日:2004/09/03(金) 09:17
- すみません。
大きな間違いをしていたようです。
以下のマクロを参考にしてください。
セルに式として評価できない文字列
を入れる場合はダブルコーテーション
にする必要があります。
また、セルから読み取った文字列は、
ダブルコーテーションになっているので、
連結する前に、シングルコーテーション
になおす必要があります。
Sub test()
Dim objShp As Visio.Shape
Dim strFormula1 As String
Dim strFormula2 As String
Set objShp = ActivePage.Shapes(1)
With objShp
strFormula1 = .Cells("Prop.Row_1").Formula
strFormula2 = .Cells("Prop.Row_2").Formula
.Cells("Fields.Value").Formula = WQ(SQ(strFormula1) & SQ(strFormula2))
End With
End Sub
Function WQ(Word As String) As String
WQ = Chr(34) & Word & Chr(34)
End Function
Function SQ(DQWord As String) As String
If Left(DQWord, 1) = Chr(34) Then
If Right(DQWord, 1) = Chr(34) Then
SQ = Mid(DQWord, 2, Len(DQWord) - 2)
End If
End If
End Function
- 16: 名前:yoda投稿日:2004/09/03(金) 19:33
- 一部訂正します。
.Cells("Fields.Value").Formula = WQ(SQ(strFormula1) & SQ(strFormula2))
の後に、
.Cells("Fields.Format").Formula = "FIELDPICTURE(0)"
を入れましょう。
formatセルがnoformatだと、テキストが表示されません。
- 17: 名前:yoda投稿日:2004/09/04(土) 05:54
- 蛇足ですが、
FIELDPICTURE(0)を使うと、
ダブルコーテーションなど
考えなくてもよく、
.Cells("Fields.Value").Formula = strFormula1 & strFormula2
または、
.Cells("Fields.Value").Formula = strFormula1 + strFormula2
で、テキストフィールドに
表示できますが、
以下のように間に
「"」が入っしまいます。
text1"text2
その他、
objhp.characters.textは、
テキストフィールドの
テキストの取得しか
できないので、むりに
設定すると、普通の
テキストが表示されて
しまいます。
- 18: 名前:kk投稿日:2004/09/08(水) 10:49
- yodaさま
返信がおくれ、申し訳ありません。
ご返信いただいた内容をもとに、作成してみます。
今回はありがとうございました。
■トップに戻る リロード 全レスを表示
|