goo blog サービス終了のお知らせ 

酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

VBAで少しは役立つツール作成(Amazon商品URL短縮)

2022年09月18日 22時58分07秒 | コンピュータ

台風襲来で暇人

こういうの見るとついつい人間の性で顔に見えちゃうんだよなー

さて、AmazonのURLが長いので手作業で短縮してたが、最近URL教示が多くてめんどくさくなってた。
以前ならDelphiで作ったんだが今はインスコさえしていない。
せっかくVBAを毎年ボラで教えられてるんだからとツールを作ってみた。


こいつが
https://www.amazon.co.jp/dp/B07WTMXRTQ/
に短縮される。

アマゾンの製品URLをクリップボードへコピーしてExcelを起動する。
アマゾンのURLらしければ短縮してクリップボードへ書き込んで終わる
だけのもの。

Excelのフォームがどうしても見えてしまうがやむを得ないか。
そこまでの割り込みは表計算ユーザに渡されているとは思えないし。

---This workBookに記載---
Main()を呼んでいる

Option Explicit

Private Sub Workbook_Open()
  MsgBox "Copy to ClipBoard: " & main
  Application.Quit
End Sub

----標準モジュールへ記載-----
「This workBook」記載のVBAから呼ばれる

Option Explicit

Function main() As String
  Dim ws As String
  Dim ws2 As String
  main = ""
  ws = GetCB
  d ("clipBoard:" & ws)
  ws2 = unstAmaURL(ws)
  d ("Ans:" & ws2)
  SetCB (ws2)
  main = ws2
End Function

Public Sub SetCB(ByVal strSet As String)
    With CreateObject("Forms.TextBox.1")
        .MultiLine = True '複数行入力可
        .Text = strSet
        .selstart = 0
        .sellength = .textlength
        .Copy
    End With
End Sub

'--------クリップボードの文字列を取得して返す-------------
Public Function GetCB() As String
    'MSForms.DataObjectを使用
    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        GetCB = .GetText
    End With
End Function

Function unstAmaURL(ws) As String
  Dim dEp As Long   ' ドメイン End Point
  Dim SP As Long    ' 商品コード Start Point
  Dim EP As Long    ' 商品コード End Point
  
  unstAmaURL = "ERR: Null Space"
  If ws = "" Then Exit Function
  unstAmaURL = "ERR: not URL"
  
  If UCase(Left(ws, 8)) <> "HTTPS://" Then Exit Function
  
  unstAmaURL = "ERR: /dp not found"
  '--------- ドメイン名を取得 ----------
  dEp = InStr(10, ws, "/")
  d ("dEp" & dEp)
  
  '------/DP/以下を取得--------------
  SP = InStr(1, ws, "/dp", vbTextCompare)
  EP = InStr(SP + 4, ws, "/")
  
  If SP = 0 Then      ' カート内製品や購入履歴URLに対応
    SP = InStr(1, ws, "/gp/product", vbTextCompare)
    EP = InStr(SP + 12, ws, "/")
  End If
  
  If SP = 0 Then Exit Function
  d ("sp:" & SP)
  d ("ep" & EP)
  
  unstAmaURL = Left(ws, dEp) & Mid(ws, SP + 1, (EP - SP))
  
End Function

Sub d(ws)
 Debug.Print (ws)
End Sub

 

この記事についてブログを書く
« チャリでお届け物、夕方から... | トップ | 90年に一度の規模台風通過中 »