影倉庫 - BBS
ConvHTMLのハイパーリンク変換について - 俊彦
2009/10/26 (Mon) 14:53:31
お世話になります。
ConvHTMLの2.3を使わせていただこうとしています。
現在一部にハイパーリンクが設定されたExcelの表をHTML化しようとしていますが、ハイパーリンクの反映で「有効」をチェックしてあるにもかかわらずHTMLにハイパーリンクが入りません。
ConvHTMLの設定画面を開くと必ずエラー023のアラートが表示されるのですが、このあたりとなにか関係があるのでしょうか。
ちなみにExcelは2000、OSはXPです。
以上、ご教示のほど宜しくお願い致します。
Re: ConvHTMLのハイパーリンク変換について - 影斬
2009/10/28 (Wed) 22:01:38
>俊彦さん
こんばんは。お返事が遅くなりまして申し訳ありません。どうも 2.3 はいろいろと動作が不安定なようです。俊彦さんの環境でエラーが出ているとなると、すぐには原因が思いつきません。ちょっと調査しないとだめそうです。
エラー023のアラートが出るということは、設定を読み込んだり保存したりする部分で、何かしらの不具合が出ているのだと思います。
ハイパーリンクが設定されないのは、恐らくこれとは全く別の問題で、なにかしらのバグがあるのだと思います。ちなみに、ハイパーリンクが入らないというのは、次のような状態ということでしょうか?
<a href="">セルの値</a>
それとも、アンカータグ自体が出力されない状態なのでしょうか? 教えていただけたら助かります。
Re: ConvHTMLのハイパーリンク変換について - 俊彦
2009/10/31 (Sat) 20:35:13
お返事いただき、ありがとうございます。
> ちなみに、ハイパーリンクが入らないというのは、次のような状態ということでしょうか?
私の場合は、ハイパーリンク部分が文字のみになってアンカータグが出力されていませんでした。
2.3は動作が不安定とのことですが、アンカータグが入るバージョンで安定しているものはどちらでダウンロードできますでしょうか。
Vector等でダウンロードできるものは旧バージョンのようなので、元々ハイパーリンク云々の機能はありませんよね?
ごめんなさい。 - ナツ
2009/10/30 (Fri) 13:05:44
一人で家出したんだけど助けてほしいです。今まで強がってました。もう親には頼れない…super-love.smile@docomo.ne.jp8oibh08w43
複数の変数の戻りは・・? - 爺
2009/09/30 (Wed) 04:20:35
影斬様
すっかり秋になりました。今年は昼夜の温度差が大きく昨年から台風も来なかったので(西日本)秋の山々が綺麗と思います。楽しみです。
さて・・一件質問させてください。
Function への実引数は複数の渡しはできます・・が戻りは一個ですね。
テストで2個の荷物を運び込み仕事をさせて一つの荷物にまとめて戻ってきました。
配列にでも入れて2個の荷物が戻る変数があればその書き方も含めて教えて戴きたいですが・・??
Re: 複数の変数の戻りは・・? - 爺
2009/09/30 (Wed) 13:19:27
複数のデータ受け渡しできました。いろいろと心配をかけ、済みませんでした。ありがとう御座います。
下記の通り配列を利用しました。Function で複数個のデータの受け渡しするプログラム
Option Base 1
Option Explicit
---------------------------------------
'データは必ず Variant型
Public Function Hakobune(DT As Variant) As String
Dim A As String, B As String, C As String, K As String
A = DT(1): B = DT(2)
C = DT(1) + DT(2)
Text1.Text = C
DT(1) = "青い花": DT(2) = "に変わってしまった。"
K = DT(1) + DT(2)
Hakobune = K
End Function
---------------------------------------
Private Sub Command1_Click()
Dim DT(1 To 2) as variant
Dim H As String
DT(1) = "赤い花": DT(2) = "が咲いた"
H = Hakobune(DT())
Label1.Caption = DT(1): Label2.Caption = DT(2)
End Sub
Re: 複数の変数の戻りは・・? - 影斬
2009/10/01 (Thu) 01:01:39
>爺様さん
こんばんは。複数のデータを渡して、複数のデータを戻すということを実現するために、爺様さんなりの創意工夫をされたのですね。これできちんと動いているのなら、とりあえずは問題ないのでしょうけれど、あまりスマートなコードとは言えません。
Variant型は大変に便利な変数の型です。しかしそれだけに、こういった裏技的なこともできてしまいますし、問題点を有耶無耶にしてしまう要因のひとつになります。爺様さんのなさりたいことを実現するために最も優れているのは、ユーザー定義型の変数を定義し、それを用いてデータを受渡しする方法ではないかと私は思います。
ユーザー定義型の変数とは、別名、構造体などとも呼ばれます。爺様さんのコードは、構造体を使ってやるべきところを、Variant型の変数を用いることによって無理矢理実現しているような状態だと言えます。
構造体についての詳しい説明は、私のブログの講座内にもコンテンツがありますので、そちらを一度ご覧になってみるといいかもしれません。
また、Command1_Click の中で、Hakobune というプロシージャに渡す引数を、カラの括弧つきの配列として渡していますね。このようにして配列を Function プロシージャに渡すと、実際には参照渡しになっているので、Hakobune という Function プロシージャ内で起こった値の変化が、そのまま Command1〜 のほうで宣言された DT という配列に反映されています。これは正確には、引数として渡して戻り値を返しているのではなく、参照渡しをしているがために、もとの変数 『 DT 』 が直接編集されているということなのです。
う〜ん、うまく説明できない。
要約すると、変数を複数渡して、複数の戻り値が得られているわけではありません。
参照渡しで配列が渡されているがために、渡した先で起こった変化が、渡した側にも反映されているのです。
最もスマートなのは、構造体を定義して変数を宣言し、戻り値を構造体として返すことです。こんなふうに書いてもなかなか理解しがたいとは思いますが、もし私が同じことをしたいのなら、間違いなく構造体を使います。
構造体について、ちょっと調べてみると、いい発見があるかもしれません。あまり参考にならなくてすみません。
Re: 複数の変数の戻りは・・? - 爺
2009/10/06 (Tue) 17:01:51
ながなが・・とご指導ありがとうございました。
構造体始め読んだ時は理解できませんでしたがテストプログラムを何回か走らして理解出来改めてHPを読み直して理解出来ました。ありがとう御座いました。
次は繰り返しで行き止まってます。一度目は完全にファイルへ保存できますが続けて2回目を行うとき・・
最初は Command1 をクリックして始めますが2回目は中にそのまま入ります。
要するに Command1 が Offクリックになってないです。これを行うには End 以外にないですか。??
ご指導よろしくお願い致します。
Re: 複数の変数の戻りは・・? - 影斬
2009/10/08 (Thu) 01:11:30
>爺様さん
こんばんは。構造体、非常に便利ですので是非活用なさってください。少しでも助けになったのなら幸いです。
さて、繰り返し処理で行き詰まっているということですが、文面だけを見ると、なにをしたいのかがよくわかりません。
1回目はコマンドボタンをクリックして保存できるのに、2回目はクリックしてもうまくかないということでしょうか?
Re: 複数の変数の戻りは・・? - 爺
2009/10/23 (Fri) 09:21:20
影斬様へ
折角のご指導なのに長いことインターネット出来なくてごめんなさい。プログラミングに夢中でした。
質問の意味が・・そうですね。もっと具体的にですよね。実は一つのファイルにデータを20個入力する訳ですが最初にCommand1 をクリックして1個のデータを入力して次のデータを入力しょうとしたときに変な動作をしていましたが・・・修正できました。ご心配かけました。
以上のデータを1個のファイル名で納め約50個のファイルになります。
次のプログラムはデータ修正ですがこれも各1個づつ
呼び出して確認をして間違って打ち込んだデータを修正して再度書き込む・・これも仕上がりました。
さて次は採点プログラムですが・・現在ペンでどの様にすべきか・・考えてます。
50個のファイルを1個1個マウスで呼び出していたら時間、手間がかかりますので・・自動的に呼び出したいですが・・方法はありますか・・?
今になって・・2次配列にすべきだった・・・と後悔してますがあまりにも時間がかかったので今更訂正したくないですが・・何とかならないでしょうか・・?
ご指導よろしくお願い致します。
VB6の事 - 爺様から
2009/09/24 (Thu) 18:30:52
こちら70歳のお爺様ですが・・趣味が俳句でして・・
そこで俳句の採点用PRGを作る事になりました。
もちろん何十年来の決まり事はあります。
今、行き止まってる所は Function です。
目下勉強中ですが・・・
これからいろいろ習いたいですが・・この掲示板は教えていただけるでしょうか・・???
Re: VB6の事 - 影斬
2009/09/24 (Thu) 23:05:36
>爺様さん
こんばんは。はじめましてになるのでしょうか。
VB6は、厳密に言うとVBAとは異なるものですが、アドバイスくらいならできると思います。私のわかる範囲のことでしたら、よろこんでお答えします。
Function とはなにか? 程度であれば、お答えできます。また、私のブログの口座でも、Function プロシージャについて解説しているページがありますよ。
Re: VB6の事 - 爺様から
2009/09/25 (Fri) 20:50:03
初めまして・・・です。
よろしくお願い申し上げます。
このHPへの手続きなどがあれば・・いきなりで申し訳ないです。ごめんなさい。
ここで勉強さしてもらってます。
Functionへの送る引数を変数で送りたいです。それが出来なくて・・例えば・・
Fuction kakunin(simei as string) as string へ
本体から A="○○" : kakunin(A)
としたいです。
それが kakunin("○○") ならOKなんです。
初めてですのであほらしいかも分かりませんがよろしくお願い致します。
Re: VB6の事 - 影斬
2009/09/26 (Sat) 00:52:46
>爺様さん
こんばんは。
あほらしいとはとんでもない。誰もが最初は初心者ですし、挑戦し始めることに年齢は関係ありません。私のような若輩者でも、貴方のような方の力になれるなら、私としても嬉しい限りです。
さて、掲載いただいたコードを見る限り、おっしゃりたいことと実現したい処理の内容はわかります。
実際のコードを見てみないとなんとも言えませんが、恐らく、引数を括弧でくくっているのが問題なのではないでしょうか。
爺様さんのコードでは、「 kakunin(A) 」となってますね。この場合、引数が括弧でくくられていますので、結果を返す 先 が必要になります。
ちょっと難しいですね。
例えば、このkakuninというFunctionプロシージャはString型の戻り値を返すことになっていますので、String型で宣言した変数を用意し、次のようにするとうまくいくはずです。
Dim A As String
Dim B As String
A = "○○"
B = kakunin(A)
これでもうまくいかないとすると、なんだろうなぁ。
実際のコードと、どのようにうまくいかないのか、あるいはどのようなエラーが出てしまうのか、そういった情報があれば、もう少し的確な回答ができるかと思います。
もし私の回答が的外れだったら申し訳ない。
Re: VB6の事 - 爺様から
2009/09/26 (Sat) 23:49:14
影斬さまへ
シャープの古いノートです。OSはXP、VB6.0
早速のご指導ありがとうございました。いろいろやってますが・・いまいちになってます。
===============================
private command1_click
Dim A,B as string
A="赤い花"
B=kakunin(A)
Label1.caption = B
End sub
--------------------------------
Function kakunin(A as string) as string
A=A + "が咲きました。"
kakunin = A
End Function
--------------------------------
コンパイルエラー
ByRef 引数が一致しません。
================================
で・・commandないへ変数 C を追加
B=kakunin(C)
--------------------------------
Function 内で
Dim C as string
C=A + "が咲きました。"
--------------------------------
で Label1.Caption は "が咲きました。"
と表示して・・A が渡されていない・・と思います。
ご指導よろしくお願い致します。
Re: VB6の事 - 爺から
2009/09/27 (Sun) 07:04:12
成功いたしました。
Function kakunin(Byval A as string) as string
とByval を入れる事で変数が渡りました。
Re: VB6の事 - 影斬
2009/09/27 (Sun) 14:49:22
>爺様さん
とりあえずは自己解決したようですね。
エラーの内容を教えていただいて、私のほうも謎が解けました。今回の一件での根本的な問題点は、変数の宣言の仕方にあります。
爺様さんの掲載してくれたコードを見ると、変数 A と変数 B をまとめて宣言していますね。ただし、ここでカンマを使って1行でふたつの変数を宣言しています。
ここで注意しなければならないのは、カンマを使って1行に複数の変数を宣言する場合には、それぞれの変数を型までしっかり指定しなければならないというルールです。
爺様さんのコードでは、変数 A は Variant 型になっています。これは、カンマを使って変数を記述する場合によくあるミスで、カンマを使う場合にはそれぞれにしっかり型を記述するようにしなければ駄目です。
ここまでくると、変数 A が引数として渡らなかった理由も、Function 側で Byval をつけたら解決できた理由もわかってきます。
変数の型と、プロシージャの引数の型は、いわば鍵と鍵穴のようなものです。異なる形のものを受け入れることは原則としてできません。厳密にはできてしまうケースもありますが、この場合には、変数 A が Variant 型で、受け取る側では String 型 が指定されていたために、鍵と鍵穴が一致せずに「 ByRef 引数が一致しません。」というエラーが出たのですね。
Byval と Byref の違いまで説明すると非常に長くなるので、とりあえずここまで。もし、両者の違いが知りたいということであれば、お気軽に、また質問してください。お答えします。
Re: VB6の事 - 爺から
2009/09/28 (Mon) 21:16:05
影斬さま
長々・・・と大変お手数をかけました。お陰様で今のところ走ってます。ありがとうございました。
10年ほど前までN-Basicでいろいろとやってましたが定年になると・・ぴったし止めてました。
ところうが・・やむを得ず10年ぶりに・・初めましたが・・頭が着いて行けなくて・・・同じ事を繰り返し繰り返し・・やってます。
早速に変数宣言を見直します。ありがとう御座いました。これから複数の変数、同時渡しをやってみます。
同時に何個渡せるでしょうか・・???
その後分かった事 - 爺から
2009/09/27 (Sun) 04:54:15
初歩の初歩の質問で・・で申し訳ありません。
結果として分かった事は・・
A="赤い花"
B=kakunin(A)
変数Aがファンクションへ渡りませんねぇ。しかしファンクションからは変数でも戻ってきます。
仮に B=kakunin("赤い花") としたら渡りました。
それから A,B を Integer にして B=kakunin(500) とか渡す値を複数(500,100)にしてみれば渡りました。
結果として ByRef の意味が分からないからです。
読んでも複雑過ぎます。やっぱぁ爺じゃ。ごめん。
もし、許されるなら・・簡単明瞭に教えて下さい。
Re: その後分かった事 - 爺から
2009/09/27 (Sun) 05:01:55
操作ミスで「返信」のところ、「投稿」で贈り新規質問になりました。ごめんなさい。消して下くれませんか。
初歩の初歩の質問で・・で申し訳ありません。
結果として分かった事は・・
A="赤い花"
B=kakunin(A)
変数Aがファンクションへ渡りませんねぇ。しかしファンクションからは変数でも戻ってきます。
仮に B=kakunin("赤い花") としたら渡りました。
それから A,B を Integer にして B=kakunin(500) とか渡す値を複数(500,100)にしてみれば渡りました。
結果として ByRef の意味が分からないからです。
読んでも複雑過ぎます。やっぱぁ爺じゃ。ごめん。
もし、許されるなら・・簡単明瞭に教えて下さい。
(無題) - --
----/--/-- (--) --:--:--
投稿内容が見つかりません
ConvHTML - 影斬
2009/09/03 (Thu) 23:55:34
>カズヒロさん
こんばんは。マウススクロール、なかなか手ごわいです。
ExcelVBAのテキストボックス(コンバートしたソースが表示される部分)は、FM20.DLL というライブラリによって動作していますが、この FM20.DLL は環境によって入っているバージョンが違います。どうやら、最近のあたらしいライブラリが入っていると、カズヒロさんのようなエラーが発生するようです。
私の環境もそうですが、2007が誕生するより前のマシンでは、エラーが起きないみたいです。不思議です。
なんとか、他の方法を使ってマウススクロールが実装できないか、考えます。結構無茶なことをやって無理矢理スクロールを実装している状態ですので、ほかにもバグがあるのかもしれませんし、ちょっと検討する必要がありそうです。
ちなみに、マウススクロールを実装するために、サブクラス化という裏技を使っているのですが、これのせいで、エラーが発生するとExcelがフリーズしたようになってしまいます。マウススクロールなしバージョンも公開したほうがいいのかな……。
無題 - カズヒロ
2009/09/03 (Thu) 00:56:12
匿名希望!で投稿させてもらったものです。
マウススクロールの実装ありがとうございます。
ConvHTMLがVer2.2からVer2.3にバージョンアップされたので、
新しい方に移りたいのですが・・・Errorが出てしまいました。
私はExcel2007+WindowsVistaを利用しているのですが、
ConvHTMLを起動してFormが表示されてすぐにエラーが出ます。
エラーの内容は
「実行時エラー`-2147418113(8000ffff)`:」
「CurLineプロパティを設定できません。メソッドまたはプロパティに対して予期せぬ呼び出しがありました。」
です。
この後Excelがフリーズして強制終了させるしか方法がありませんでした・・・
対処のほどよろしくお願いします。
2009/08/08 (Sat) 16:51:42
影倉庫さん、convHTMLにお世話になっています。
EXCEL2003で範囲を指定して、名前を付けて保存するとHTMLのファイルが出来ますが、かなり冗長なソースファイルが出来てしまうので、何とかconvHTMLで変換できないかと試行錯誤しております。
背景色や文字タイプなどは問題ないのですが、現在のところ日付や時間の表示が書式設定での表示にならず、EXCELのシリアル値がそのまま表示されてしまいます。
これに対処するオプションはありませんでしょうか。
【convHTMLのソース】<br/>
<td height=16 class=xl791631 align=right style='height:12.0pt;border-top: none'<b>1963/07/26</b></td>
<td width="190" height="16">国鉄・大阪駅</td>
<td width="46" height="16"><br></td>
<td width="50" height="16"><i><font face="MS ゴシック"><br></font></i></td>
<td width="50" height="16"><i><font face="MS ゴシック">0.838888888888889</font></i></td>
<br/>
【EXCELの名前を付けて保存のソース】<br/>
<td height=16 class=xl791631 align=right style='height:12.0pt;border-top:
none' x:num="23218">1963年07月26日</td>
<td class=xl801631 style='border-top:none;border-left:none'>国鉄・大阪駅</td>
<td class=xl811631 style='border-top:none;border-left:none'> </td>
<td class=xl821631 style='border-top:none;border-left:none'> </td>
<td class=xl831631 align=right style='border-top:none;border-left:none'
x:num="0.83888888888888891">20:08</td>
Re: x:num= について - 影斬
2009/08/10 (Mon) 01:58:40
>きよもりさん
こんばんは。ConvHTMLをご利用いただいてありがとうございます。うまく解凍できたのに、問題があったようですね、すみません。
実は、Excel の表示形式をそのままHTMLに変換できないかという要望は、別の方からもいただいています。私も忙しくてなかなかバージョンアップまで辿り着けないのが現実でして、まだこれに対応する改修はできていません。
ただ、VBAのコード的な問題から言いますと、私の知る限り、セルに設定されている書式をVBAから調べることは可能ですが、その書式が反映された結果どのような内容がセルに書き出されているかを調べる方法がありません。
ちょっとわかりにくいのですが、要するに「セルに見えている内容をそのまま拾ってくる方法」がないのです。
もしこれに対応する機能をつけるとすると、ConvHTMLの中で、設定されている書式がこの場合はこのように表示……という具合に、可能な限りのパターンを覚えておいて処理するしか、方法がないと今は考えています。もう少し、いろいろ調査してみる必要があるかなと思っていますので、少しだけ、時間をください。
臨時でとりあえず対応するということであれば、セル内の日付などを、全て文字列としてセルに書き込んでおき、それでConvHTMLに食わせる、ということくらいしか思い当たりません。お役に立てなくて申し訳ないです。いろいろ調べて、いい方法を考えてみます。