
先日マイクロソフトで無料公開されているプログラムソフト Visual Studio2019で広告用のタグをまとめるソフトを作りました。
更に使いやすさを求めて改良に挑戦しました。
やりたいことは4つ
- タグをコピーしたらボタンを押さなくても指定のボックスへコピーする。
- タグ以外のものをコピーしたときにフリーズしないようにする。
- リンクが未入力のときにタグ生成ボタンを押すとフリーズしないようにする。
- ソフトの起動位置をコピーしやすいポジションへ
ちゃんと動いてたのに動かないプログラム
プログラムの修正を始めたのですが、リアルタイムでクリップボードの内容を確認するソースを加えて更にアレコレ追加していたらエラー連発するようになってしまいました。
うまく動いていたはずの場所まで動かなくて、一体どこが悪いのか見当もつかなくなっていました。
新しくプロジェクトを作って、要所ごとに動くかどうかチェックしてもエラーが出てしまい頭が混乱し始めて停滞してしまいました。
それもそのはず、違法建築の様にどんどん追加したコードは

724行、26,921文字にも及んでいました。
今まではエクセルで作るVBAのセルコピーくらいしかやったことなかったのに、コピペでくみ上げたプログラムの綻びを見つけることなんか無理です。
頭が沸騰してしまったので最初からやり直すことにしました。
わからなくなったから最初からプログラムした
前回の記事に書いたメモ帳で作ったフローチャートの一部です。
1.クリップボードの中身にURLを含んでいるか? NO→クリップボードクリア2.作成済みのタグでないか?NO→クリップボードクリア3.楽天画像リンクか? 3-1.テキストリンクは入力済みか? NO→待機 3-1-1.商品名の変更なし 3-1-1-1.カエレバのタグが入力済み→タグ出力 3-1-1-2.カエレバのタグなし→待機 3-1-2.商品名の変更あり 3-1-1-1.カエレバのタグが入力済み→タグ出力 3-1-1-2.カエレバのタグなし→待機
コードが複雑化して追えなくなる原因なのでシンプルにできないかと思案しました。
例えば、商品名が変更されているか?というチェック部分
If 商品名の変更があるなら then
リンクから商品名を抽出
商品名を変更
楽天だけのリンクを出力
If カエレバ(Yahoo)のコードがあるか?
楽天とYahooのタグを合成して出力
Else
楽天だけのリンクを出力
If カエレバ(Yahoo)のコードがあるか?
楽天とYahooのタグを合成して出力
End If
このように同じ処理があるのにそれぞれコードがあるという無駄がありました。
変更あるなしに関わらず、商品名変更ボックスをそのまま使うことにしました。
まとめた処理がこちら
Line1 :
リンクから商品名を抽出
変更あるなしに関わらず商品名変更ボックスをそのまま抽出
楽天だけのコード作成
楽天とYahooのタグを合成して作成
End Sub
そして出力せずに作成してボックスにそれぞれ格納しておくことにしました。
Visual Studio2019 VBのGOTOLINE
GOTOLINE文は処理の為のワープです。
If Textbox1.text="Yes" then
Textbox2.text="テキストボックス1の中身はYesです"
GOTO Line1
Else
GOTO Line1
End If
End Sub
Line1 :
Textbox1.text=""
End Sub
のようにワープさせることができます。
共通のタグの処理をさせるときに使いました。
フォームの初期位置を指定する
Form1が起動した時に毎回指定のベストな位置で開いて欲しいので、初期位置を指定することにしました。
とりあえずどこの位置がいいのか座標を調べました。
Private Sub Form1_LocationChanged(sender As Object, e As EventArgs) Handles MyBase.LocationChanged
TextBox1.Text = Me.Location.X
TextBox2.Text = Me.Location.Y
End Sub
このコードを追加して、テキストボックスへリアルタイムで座標を表示させました。
ベストな位置がわかったらその座標をメモします。
Form1がロードされた時に
Me.SetDesktopLocation(任意のX座標, 任意のY座標)
これで指定してやると毎回その座標で起動します。
完成したタグまとめ機
ついに完成したコードの文字数は・・・
724行、26,921文字 →454行 14,791文字
かなりスッキリさせることができました。
ビフォーもアフターも見やすくするために空白をとっているので行数は当てになりませんが、文字数はかなり少なくなりました。
見た目にもかなりスッキリして見やすくなりました。
タグをコピーしたらボタンを押さなくても指定のボックスへコピーする。
タグ以外のものをコピーしたときにフリーズしないようにする。
以前も似たような対策をしていたのですが、完成済みのコードがクリップボードに残っていた場合に、上記のチェックをすり抜けてタグ分解→タグを組み直して出力フリーズという誤作動がありました。
チェックもシンプルにクリップボードの中身に
楽天のURLを含んでいるか?、完成済みのタグか?
を調べて、処理の条件に当てはまらなければクリップボードをクリアすることで解決しました。
リンクが未入力のときにタグ生成ボタンを押すとフリーズしないようにする
この処理はシンプルに
リンクが入力されていると
ボタンの色が変わってボタンが押せるようになります。
クリップボードをリアルタイムでリンクであれば、コピーされた瞬間にどのリンクなのか判断して指定のボックスに入ってくれます。
商品名も取得できた時点でテキストボックスに表示され、不要な【セール】だとか【送料無料】だとかいうセールス文を削除した後、楽天コピーボタンまたは楽天Yahoo!タグ生成ボタンを押すと、タグを書き換えてクリップボードへ送ります。
クリップボードから自動取得ができるようになり、ブラウザで広告タグのページを開いてコピーを3回。
ソフトで商品名を修正してボタンを1回押す。
という手順になって、ソフトのボタンを押す回数が2回減りました。
これを書きながら、商品名を修正完了した時点でクリップボードへ送ればボタンを押す回数はゼロになるなぁと思いました。
次回はブラウザを開いたらタグを自動で取得をできるようにしたいです。
商品名の修正したら自動でクリップボードへ送る。
ボタンを押す回数ゼロ
を目指したいと思います。
0 件のコメント: