[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ブラウザでPreviewするとセル文字が消える』(はんにゃ)
[[20090905100202]]
『挿入画像と 所定(セル) 位置の図形(四角形)とを コネクター線で結び付けたい 改題 系譜図』
の途中で先生から ブラウザーの相性などの問題との理解しましたが
別立てで教えを乞いたいです。
Webページとして 保存する前に表記でPreviewしました。 するとセルの文字が消えます。 条件は 図形の矢印線を引いた位置のセルです。いくつか線を引きますが すべてが消えるわけではありません。
コード自体に問題あるかもしれませんが 課題が特定できないので、
まず 相性として 現在ブラウザーはGoogleChromeなので(作成したHTMLファイルもCromeHTML とある)ので、 IEならどうかと IEでWebページ保存をするにはどうするか (こういうのはPlugInとかでしょうか?) おしえてください。
なお 部分コードでは役立たないとは思いますが、当該コードは以下です。
dblBeginX = .Range("D2").Cells(xrb, xcb).Left + .Range("D2").Cells(xrb, xcb).Width * 5 dblBeginY = .Range("D2").Cells(xrb, xcb).Top + .Range("D2").Cells(xrb, xcb).Height dblEndX = .Range("D2").Cells(xre, xce).Left dblEndY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height / 2 With .Shapes.AddLine(dblBeginX, dblBeginY, dblEndX, dblEndY).Line .EndArrowheadStyle = msoArrowheadTriangle .BeginArrowheadStyle = msoArrowheadTriangle .DashStyle = msoLineDash .Weight = 1.5 End With
回答が付かないようですが、回答しづらい内容と言うか、疑問点が疑問って感じなんだと思われます。 とりあえず言える事は…… ブラウザとしてChromeを使用しているから、作成したHTMLファイルはChromeの物なのだ、 と言う考え方にはなりません。 それは言わば、 「CSVファイルに紐付いているのがExcelだからCSVファイルはExcelファイルだ」 と言ってるようなものです。 CSVファイルは単なるテキストでしか無い事はご承知かと思います。 HTMLも同様で、単なるテキストです。 それを解釈し、表示するのがIEやFireFox、OperaやGoogleChromeなどのブラウザであるだけです。 CSVファイルをExcelで開くか、OpenOfficeのClacで開くか、はたまたメモ帳で開くか、 と言った違いと同等です。 なので、基本的に表示されているHTMLファイルの中身はどのブラウザだろうが同じはずです。 それを各ブラウザで開いて保存したからといって内容が変わるってのは、おかしな事です。 以上とりあえず。 矢印云々は何が問題なのか良く分かりませんが…… (ご近所PG)
ありがとうございます。 単独のSub Programを作り それで 消える現象がでるので 見ていただければ幸いです。 まず WindowsXP,Excel2003 です。 Bookに Sheets("系譜図")をご用意ください。下のSubの結果は
10 11 △故_良吉 = X =▼故_長子 12 13 ▼故_長子
ここでExcelでは ▼故_長子同士間に矢印線が引かれていますが。 ここのこぴーでは表示されません。 そして ブラウザープレびゅでは 11行目の▼故_長子が消えます。 よろしく 矢印線の消えない 安定なコードを 助言おねがいします。 (はんにゃ
'--------------------------------------------------------------------- Sub KankeiSenTest() '(xrb, xcb, xre, xce, tbl1, ir, irg) Dim xrb As Long, xcb As Long, xre As Long, xce As Long Dim dblBeginX As Double, dblBeginY As Double, dblEndX As Double, dblEndY As Double
With Sheets("系譜図") .Cells.Clear 'データと書式設定をクリア .DrawingObjects.Delete 'Sheets("系譜図")内図形の事前消去 .Cells.ColumnWidth = 2
' テストのため 予めデータを入れる xrb = 10: xcb = 2 .Range("D2").Cells(xrb, xcb - 2) = "△故_良吉 =" .Range("D2").Cells(xrb, xcb - 2).Font.color = RGB(0, 0, 255) ' 色 .Range("D2").Cells(xrb, xcb - 1) = "X" .Range("D2").Cells(xrb, xcb) = "'=▼故_長子" .Range("D2").Cells(xrb, xcb).Font.color = RGB(255, 0, 0) ' 色
xre = 12: xce = 6 .Range("D2").Cells(xre, xce) = " ▼故_長子" .Range("D2").Cells(xre, xce).Font.color = RGB(255, 0, 0) '前者生年等色
If xcb < xce Then dblBeginX = .Range("D2").Cells(xrb, xcb).Left + .Range("D2").Cells(xrb, xcb + 1).Width * 3 '-> 後半加算部分は 文字のある枠内にいれる位置調整 ' この位置で消えるか どうか決まる 手操作でも変わる
dblBeginY = .Range("D2").Cells(xrb, xcb).Top + .Range("D2").Cells(xrb, xcb).Height / 2 dblEndX = .Range("D2").Cells(xre, xce).Left dblEndY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height / 2 With .Shapes.AddLine(dblBeginX, dblBeginY, dblEndX, dblEndY).Line .EndArrowheadStyle = msoArrowheadTriangle .BeginArrowheadStyle = msoArrowheadTriangle .DashStyle = msoLineDash .Weight = 1.5 If InStr(Sheets("系譜図").Range("D2").Cells(xrb, xcb), "▼") > 0 Then 'sbs .ForeColor.RGB = RGB(255, 0, 0) Else .ForeColor.RGB = RGB(0, 0, 255) End If End With Else ’この事例には当てはまらない dblBeginX = .Range("D2").Cells(xre, xce).Left + .Range("D2").Cells(xre, xce).Width * 5 dblBeginY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height dblEndX = .Range("D2").Cells(xrb, xcb).Left dblEndY = .Range("D2").Cells(xrb, xcb).Top + .Range("D2").Cells(xrb, xcb).Height / 2 With .Shapes.AddLine(dblBeginX, dblBeginY, dblEndX, dblEndY).Line .EndArrowheadStyle = msoArrowheadTriangle .BeginArrowheadStyle = msoArrowheadTriangle .DashStyle = msoLineDash .Weight = 1.5 If InStr(Sheets("系譜図").Range("D2").Cells(xrb, xcb), "▼") > 0 Then .ForeColor.RGB = RGB(255, 0, 0) Else .ForeColor.RGB = RGB(0, 0, 255) End If End With End If ' If xcb < xce Then End With End Sub '---------------------------------------------------------------------
えーと、とりあえず再現は出来ました。 けれど、これをExcelのコードの記述でどうにか安定させたいってなると、 それははんにゃさんもコメントで書いてる通り '-> 後半加算部分は 文字のある枠内にいれる位置調整 ' この位置で消えるか どうか決まる 手操作でも変わる んじゃないですかね。 これについては既に[[20090310125559]]にてみやほりんさんも書いてくれてますね。 文字を消したくないなら、その矢印と文字の終わりとで充分な余裕を持たせれば 隠される事はとりあえずなくなります。 そもそもこれはブラウザで、と言うかhtmlの構文だけで表現出来る内容を超えていると思いますよ。 通常の文書ですら気をつけて作らないとブラウザによって表現が変わってくると言うのに、 Excelで作ったものをhtmlに変換しただけで、どんな環境でも同じように表現出来るとは 思わない方が良いかと。
それだけじゃなんなんで、文字の終わりを探すコードの、一つの案として…… 該当セルの文字を作業用セルに移してセル幅を自動調整し、 その結果の幅を参考に矢印の位置決定する、とか…… あるいはもっと簡単に等幅フォントなら文字のバイト数などから 位置を調整する作りでも良いかもですが。 ただしそれによって他のいろんな位置も調整が必要だったりと面倒が多そうな気はします。 それだけの手間をかけるだけの価値がこのhtml化にあるかどうか、判断の上でやるのが良いかと。 以上、想像で適当に書いてるので検証が必要と思いますが。 ちなみに私なら、Excelファイルの公開と言う形で完了させそうです。 html文書の本来の目的とか、ブラウザの特性とか、そういう根本的な部分からして 無理があると判断します。 いやもちろん、はんにゃさんがどーしてもやりたいってんなら、 それを止める理由は無いですけども。 ただ少なくとも自己解決出来る範囲で進めたほうが、 あるいは進める事になるんじゃないかなぁ、なんて思います。 要件があまりに特化しすぎる部分が多いから、多くの回答は期待できないと思う。 (ご近所PG)マンツーマンで付き合ってくれる人でも居ないと無理げ
もちょい追記。 今回のはんにゃさんの質問と、私の回答とを一人の人が考えたと仮定し、 一連の流れとして見ると以下のような感じだと思うんですが、 1.htmlとして保存すると文字が隠れてしまう、何故だろう? 2.そうか、文字と矢印が重なるとWEB文書で保存してブラウザで開くと表現しきれないのか。 3.じゃあ隠れないように矢印を調整すれば良いじゃないか。 4.しかしそれには文字が何処まで続いているのかを調べないといけないな……どうやるんだ? 5.そうだセルの幅はセルの内容で自動調整できる機能があったからそれを利用してみよう。 6.いやもっと簡単に等幅フォントなんだから文字数とかバイト数から位置を調整してもいいかもな。 この中で、出来れば「4番」までは自力でたどり着いて欲しい、です。個人的に思うに。 今は「1番」で「?」、「2番」で「?」って感じなので…… そこまでたどり着けないなら、それは、やりたい事に対しての地力が不足している、かな? ただそこに到達するための学びの場、ってのがここ エクセルの学校でもあるんだろうけれど。 ここまでの大作を作ろうとして、そしてここまで形を作り上げる事が出来るのであれば もう一歩だけ自力で踏み込んで欲しい、と言う期待。 (ご近所PG)あるいは願い
ありがとうございます
列幅の余裕課題で、文字数が変わり、重なりでも右となりのセルにかぶさるように 表示されたりするので列幅が固定でないです。 Len(Cells()) で調整したいと考えます。
>やりたい事に対しての地力が不足している、 はい 知ったばかりのマクロ記録や ExcelHelpやf1Helpなどを読んでいるのですが、 応用・活用ができなくて 地力・知力不足を痛感しています。
Subの沢山ある全体から 現象が必ず出るであろう単独のSubを作ることで それが確認されたこと自体で正直感激(?)です。
諸先生の叱咤激励をばねにして 努力します。
>価値がこのhtml化にあるかどうか、 これを求めたのは 1つは 途中で方針を変えた”備考”の常時表示コメントが印刷できなく、 Webででることからやりたかった。コメント化は結局やめたので Web出力はその意味ではないのですが、 2つに 結果のSheet(系譜図)のみを身内に渡すのに楽なような”感じ”がしたのです。
>Excelファイルの公開と言う形で完了させそうです。 結果のみを配布するのは 結果のSheet(系譜図)以外を削除したExcelファイルということで よいでしょうか?
(はんにゃ
>Subの沢山ある全体から 現象が必ず出るであろう単独のSubを作ることで >それが確認されたこと自体で正直感激(?)です。 そうですね、再現出来る手順を提示出来たと言う事は、 問題の切り分け、問題となる部位を見極める力が養われてきている訳でしょうから、 素晴らしいと思います。 一応……客観的に見た場合、 はんにゃさんのExcelやマクロに対する知識は充分に高いと思います。 ただ目標としている所が高いがために手の出し所、とかが見つけきれない感じ?でしょうか。 そんな印象です。 >>Excelファイルの公開と言う形で完了させそうです。 >結果のみを配布するのは 結果のSheet(系譜図)以外を削除したExcelファイルということで >よいでしょうか? そうですね、そのようにすると思います。 いっそのこと、 元データを保持するブックと結果を書き出すブックを別にして、 系譜図を常に新規ブックとして出力、保存する。 と言う所までマクロ化するかなぁ。 あるいは身内に渡す、と言うのが 知り合いにネット経由で見てもらいやすい形、と言う事であれば、 少なくともhtml化よりは、PDF化を選ぶかなぁ。 PDFなら、どんな環境下でも一定の表示結果を得られる、 と言う思想の元に策定されたファイル仕様なので。 ただ、その「常時表示コメント」と言う問題があり、 そしてWEB保存でそれが解決出来ると見えたのであれば、 Web出力にしたいなぁ、と悩むと思います。 (本文書記載時、そこまでの経緯は流石に当方、追いきれて居なかったので……) しかしhtml化、PDF化どちらにせよ、人に渡してみてもらうのなら、 セルの文字と矢印の位置関係は解決させておくべき事でしょうけども。 Sheetのままなら「調整してみてよ」と閲覧者にお願いする事も出来るかもですが。 (ご近所PG)
>ただ目標としている所が高いがために手の出し所、とかが見つけきれない感じ?でしょうか。 あとそう、問題に当たった時の調べ方、考え方が分からない。 そう感じたので、私からの回答は出来るだけそういう 「調べ方」だとか「考え方」とか、問題に対するアプローチについての回答を 心がけてみてます。 だから直接の答えとかは控えめだったり。 (ご近所PG)いぢわるじゃないのよ
> ただ目標としている所が高いがために とんでもない。もし言えるとすると ひとが思いつかない(変わった)ことをしていることもあるかな。
> 手の出し所、とかが見つけきれない感じ? はい そうです。
> 問題に対するアプローチについての回答を心がけてみてます。 ずうずうしく また横着で 頑張りがきかなくなり つかれているときなど もうしっていたら おしえてよ!という”気分”のときもありますが、 こんなに丁寧に 「調べ方」だとか「考え方」とか、 を教えていただくと なまけてはいけないと 踏ん張ってこれました。 ありがとうございました。
その後
’セル幅と文字長とで比較してながい長い値を加算する dbllength = .Range("D2").Cells(xre, xce).Width + .Range("D2").Cells(xre, xce + 1).Width If dbllength < Len(.Range("D2").Cells(xre, xce)) * 10 + 30 Then dbllength = Len(.Range("D2").Cells(xre, xce)) * 10 + 30 dblBeginX = .Range("D2").Cells(xre, xce).Left + dbllength dblBeginY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height / 2 として いろいろ固定値をかえるのですが 名前の箇所によって OKになったり、消えたり 法則がつかみきれず、限界です。 手操作で端点位置を変えてみるしかないようです。文字が出ている分のセル外でもNGのときあり。 (はんにゃ
セルに入れる"△故_良吉 ="等の文字列を四角形に入れるのでは、駄目なのですか?
Sub KankeiSenTest() '(xrb, xcb, xre, xce, tbl1, ir, irg) Dim xrb As Long, xcb As Long, xre As Long, xce As Long Dim dblBeginX As Double, dblBeginY As Double, dblEndX As Double, dblEndY As Double Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range With Sheets("系譜図") .Cells.Clear 'データと書式設定をクリア .DrawingObjects.Delete 'Sheets("系譜図")内図形の事前消去 .Cells.ColumnWidth = 2
' テストのため 予めデータを入れる xrb = 10: xcb = 2 Set r1 = .Range("D2").Cells(xrb, xcb - 2) With .Rectangles.Add(r1.Left, r1.Top, r1.Width, r1.Height) .Text = "△故_良吉 =" .Font.Color = RGB(0, 0, 255) ' 色 .AutoSize = True .ShapeRange.Line.Visible = msoFalse End With Set r2 = .Range("D2").Cells(xrb, xcb - 1) With .Rectangles.Add(r2.Left, r2.Top, r2.Width, r2.Height) .Text = "X" .ShapeRange.Line.Visible = msoFalse
End With Set r3 = .Range("D2").Cells(xrb, xcb) With .Rectangles.Add(r3.Left, r3.Top, r3.Width, r3.Height) .Text = "=▼故_長子" .Font.Color = RGB(255, 0, 0) ' 色 .AutoSize = True .ShapeRange.Line.Visible = msoFalse
End With xre = 12: xce = 6 Set r4 = .Range("D2").Cells(xre, xce) With .Rectangles.Add(r4.Left, r4.Top, r4.Width, r4.Height) .Text = " ▼故_長子" .Font.Color = RGB(255, 0, 0) ' 色 .AutoSize = True .ShapeRange.Line.Visible = msoFalse
End With If xcb < xce Then dblBeginX = .Range("D2").Cells(xrb, xcb).Left + .Range("D2").Cells(xrb, xcb + 1).Width * 3 '-> 後半加算部分は 文字のある枠内にいれる位置調整 ' この位置で消えるか どうか決まる 手操作でも変わる
dblBeginY = .Range("D2").Cells(xrb, xcb).Top + .Range("D2").Cells(xrb, xcb).Height / 2 dblEndX = .Range("D2").Cells(xre, xce).Left dblEndY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height / 2 With .Shapes.AddLine(dblBeginX, dblBeginY, dblEndX, dblEndY).Line .EndArrowheadStyle = msoArrowheadTriangle .BeginArrowheadStyle = msoArrowheadTriangle .DashStyle = msoLineDash .Weight = 1.5 If InStr(Sheets("系譜図").Range("D2").Cells(xrb, xcb), "▼") > 0 Then 'sbs .ForeColor.RGB = RGB(255, 0, 0) Else .ForeColor.RGB = RGB(0, 0, 255) End If End With Else 'この事例には当てはまらない dblBeginX = .Range("D2").Cells(xre, xce).Left + .Range("D2").Cells(xre, xce).Width * 5 dblBeginY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height dblEndX = .Range("D2").Cells(xrb, xcb).Left dblEndY = .Range("D2").Cells(xrb, xcb).Top + .Range("D2").Cells(xrb, xcb).Height / 2 With .Shapes.AddLine(dblBeginX, dblBeginY, dblEndX, dblEndY).Line .EndArrowheadStyle = msoArrowheadTriangle .BeginArrowheadStyle = msoArrowheadTriangle .DashStyle = msoLineDash .Weight = 1.5 If InStr(Sheets("系譜図").Range("D2").Cells(xrb, xcb), "▼") > 0 Then .ForeColor.RGB = RGB(255, 0, 0) Else .ForeColor.RGB = RGB(0, 0, 255) End If End With End If ' If xcb < xce Then End With End Sub
ちょこっと変えただけですが、これをブラウザーで見ると、きちんと表示されますが・・・・。
ichinose
なるほど セルと同じサイズのテキストボックスでしょうか 別のところで 使っているConnector線のような感じになります。線の性質に粘着性はない。
ありがとうございます。 .Text = "=▼故_長子" などを 固定文字列でないので、当該の変数をもちいて 修正をしてみます。 結果を報告します。 (はんにゃ
最終的に以下になりました。 1:セル内文字は固定でなく 既存のセル文字として得る。 2:With add 〜を追加(これがなかなかわからなかった) 3: "=▼故_長子" とすると エラーになることがある。 多分 書式が標準で 先頭に”=”がつくと関数とみなされて 不都合が生じる。 これは以前からの問題であって、そこで既に "'=▼故_長子"のようになるように細工した
ありがとうございました。 (はんにゃ
Set rng = .Range("D2").Cells(xre, xce) 'Cellの文字がWeb出力で消えることがある 文字入れ図形に With .Rectangles With .Add(rng.Left, rng.Top, rng.Width, rng.Height) .Text = rng ' Sheets("系譜図").Range("D2").Cells(xre, xce) ' "'=▼故_長子" .Font.Bold = True .AutoSize = True .ShapeRange.Line.Visible = msoFalse If InStr(Sheets("系譜図").Range("D2").Cells(xre, xce), "▼") > 0 Then 'sbs .Font.color = RGB(255, 0, 0) Else .Font.color = RGB(0, 0, 255) End If ' .Font.color = RGB(255, 0, 0) ' 色 End With End With dblBeginX = .Range("D2").Cells(xrb, xcb).Left dblBeginY = .Range("D2").Cells(xrb, xcb).Top + .Range("D2").Cells(xrb, xcb).Height / 2
dbllength = Len(.Range("D2").Cells(xre, xce)) * 10 + 10 dblEndX = .Range("D2").Cells(xre, xce).Left + dbllength dblEndY = .Range("D2").Cells(xre, xce).Top + .Range("D2").Cells(xre, xce).Height / 2
With .Shapes.AddLine(dblBeginX, dblBeginY, dblEndX, dblEndY).Line '.BeginArrowheadStyle = msoArrowheadTriangle .EndArrowheadStyle = msoArrowheadTriangle .DashStyle = msoLineDash .Weight = 1.5 If InStr(Sheets("系譜図").Range("D2").Cells(xrb, xcb), "▼") > 0 Then 'sbs .ForeColor.RGB = RGB(255, 0, 0) Else .ForeColor.RGB = RGB(0, 0, 255) End If End With
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.