Visual Studio 2019でプログラム改良に挑戦

2019/12/13

雑記

広告用タグまとめ機

先日マイクロソフトで無料公開されているプログラムソフト Visual Studio2019で広告用のタグをまとめるソフトを作りました。

更に使いやすさを求めて改良に挑戦しました。
やりたいことは4つ
  1. タグをコピーしたらボタンを押さなくても指定のボックスへコピーする。
  2. タグ以外のものをコピーしたときにフリーズしないようにする。
  3. リンクが未入力のときにタグ生成ボタンを押すとフリーズしないようにする。
  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回減りました。
これを書きながら、商品名を修正完了した時点でクリップボードへ送ればボタンを押す回数はゼロになるなぁと思いました。


次回はブラウザを開いたらタグを自動で取得をできるようにしたいです。
商品名の修正したら自動でクリップボードへ送る。
ボタンを押す回数ゼロ
を目指したいと思います。

人気の投稿

ラベル

プロフィール

プライバシーポリシー
サイトマップ
お問い合わせ


 このブログの人
 ノブさん
飽きっぽい性格です。ブログは続かないタイプですが、頑張ります。

QooQ