ExcelVBAのフォームのテキストボックス/コンボボックスに右クリックメニューのコピペをつける

標準では右クリックメニューがでないので
わざわざ追加しないといけない。

===== フォームモジュール(MyUserForm) =====
Option Explicit

'クラスのインスタンス保持用
Private colText As Collection

Private Sub UserForm_Initialize()
    Dim myCopy As cCopyPaste
    Dim myText As MSForms.Control
    
    Set colText = New Collection
    
    'TextBoxとComboBoxに対して設定する
    For Each myText In Me.Controls
        If TypeOf myText Is MSForms.TextBox Then
            Set myCopy = New cCopyPaste
            Set myCopy.Text = myText
            colText.Add myCopy
        ElseIf TypeOf myText Is MSForms.ComboBox Then
            Set myCopy = New cCopyPaste
            Set myCopy.Comb = myText
            colText.Add myCopy
        End If
    Next
End Sub

Private Sub UserForm_Terminate()
    Dim i As Integer
    For i = 1 To colText.Count
        colText.Remove 1
    Next
    Set colText = Nothing
End Sub

===== 標準モジュール(Module1) =====
Option Explicit
'「MyUserForm」は適宜変更

Sub ShowForm()
    MyUserForm.Show
End Sub

Public Function 切り取り()
    MyUserForm.ActiveControl.Cut
End Function

Public Function コピー()
    MyUserForm.ActiveControl.Copy
End Function

Public Function 貼り付け()
    MyUserForm.ActiveControl.Paste
End Function

===== クラスモジュール(cCopyPaste) =====
Option Explicit

'コピー&ペースト用プロシージャのプロジェクト名とモジュール名。ここは適宜変更のこと。
Private Const Project As String = "myProject.Module1"

Public WithEvents Text As MSForms.TextBox
Public WithEvents Comb As MSForms.ComboBox

'ComboBoxがリスト表示している時はショートカットメニューを表示しないようにするため
Private flgDrop As Boolean

Private Sub Class_Terminate()
    Set Text = Nothing
    Set Comb = Nothing
End Sub

Private Sub Comb_DropButtonClick()
    'リスト表示中はTrueとなる
    flgDrop = Not flgDrop
End Sub

Private Sub Comb_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If flgDrop Then Exit Sub    'リスト表示中は無効にする
    MouseUp Button, Comb
End Sub

Private Sub Text_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    MouseUp Button, Text
End Sub

Private Sub MouseUp(ByVal Button As Integer, Ctrl As MSForms.Control)
    If Button <> 2 Then Exit Sub
    Dim Cb As CommandBar
    Dim Btn As CommandBarButton
    
    Set Cb = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
    
    Set Btn = Cb.Controls.Add(Type:=msoControlButton)
    With Btn
        .Caption = "切り取り"
        .OnAction = Project & ".切り取り"
        'テキスト未選択時は無効にする
        If Ctrl.SelText = "" Then
            .Enabled = False
        End If
    End With
    
    Set Btn = Cb.Controls.Add(Type:=msoControlButton)
    With Btn
        .Caption = "コピー"
        .OnAction = Project & ".コピー"
        'テキスト未選択時は無効にする
        If Ctrl.SelText = "" Then
            .Enabled = False
        End If
    End With
    
    Set Btn = Cb.Controls.Add(Type:=msoControlButton)
    With Btn
        .Caption = "貼り付け"
        .OnAction = Project & ".貼り付け"
        'クリップボードに文字列が無い時は無効にする
        If Not Ctrl.CanPaste Then
            .Enabled = False
        End If
    End With
    
    Cb.ShowPopup
    Cb.Delete
End Sub

ExcelVBAで時間差分

    Dim startDate As Date
    Dim endDate As Date
    startDate = "2018/10/10 12:00:00"
    endDate = "2018/10/10 18:30:50"
    
    '差を表示
    Debug.Print "時分秒の差分は、それぞれ以下のとおりです。"
    Debug.Print "--------------------------------------------"
    Debug.Print DateDiff("h", startDate, endDate) & "時間"
    Debug.Print DateDiff("n", startDate, endDate) & "分"
    Debug.Print DateDiff("s", startDate, endDate) & "秒"
    Debug.Print "--------------------------------------------"

電子契約導入時に、契約文言、書式の変更例

① 契約書前文の文言変更例
書面契約書「甲と乙は、本契約成立の証として、本書2通を作成し、両者記名押印のうえ、各自1通を保有するものとする。」

電子契約書「甲と乙は、本契約の成立を証として、本電子契約書ファイルを作成し、それぞれ電子署名を行う。なお、本契約においては、電子データである本電子契約書ファイルを原本とし、同ファイルを印刷した文書はその写しとする。(※)」

(※)なお書は、税務調査を印刷した書面で受ける場合、原本が電子データであることを明示するために記載


② 契約書前文の文言変更例
書面契約書「第○条(再委託) 乙は、甲による事前の書面による承諾がないかぎり、本件業務の全部または一部を第三者に再委託できない。」

「乙は、甲による事前の書面または双方が合意した方法による電磁的措置による承諾がないかぎり、本件業務の全部または一部を第三者に再委託できない。」

無料のブロックチェーン技術を活用した電子契約サービス e-sign

esign.ee

契約する関係者のスマフォに認証用のアプリ(xID)入れて署名する仕組み。

料金は無料。
認証用のアプリ(xID)を広めて稼ぐ仕組みとのこと
 https://help.xid.inc/a6f8035a735a4f7aa95af0aef8d770c4

アプリ(xID)入れるとマイナンバーカード登録する案内でますが、登録しないで使えます。

WebView2で「Microsoft Edge で、データ ディレクトリに対する読み取りと書き込みができません」と出る

Edgeのユーザーデータフォルダーにアクセスできないとき出る。

標準だとユーザーデータフォルダーは<ブログラム名>.exe.WebView2/EBWebView/
になる。

CoreWebView2Environment()の第2引数でフォルダ指定できるので、別のところにしてみよう

しかしExcelからDLL経由で呼び出すとこの指定が無視される。
環境変数WEBVIEW2_USER_DATA_FOLDERを指定してもダメ。
まいったな。

MFCでやるなら

CreateCoreWebView2Environment()は厳禁。
CreateCoreWebView2EnvironmentWithOptionsでデータ ディレクトリ指定しないとNG

    // データ ディレクトリはドキュメントに固定する 
    CStringA strA;
    CStringW strW;
    char lpszPath[MAX_PATH] = "";
    LPITEMIDLIST pidl;
    if (::SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl) == NOERROR)
    {
        ::SHGetPathFromIDList(pidl, lpszPath);
        ::CoTaskMemFree(pidl);
    }
    strA = lpszPath;
    strW = strA;

    HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(nullptr, strW.GetBuffer(0), nullptr,
        Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
            this,
            &CWebBrowserEdge::OnCreateEnvironmentCompleted).Get()