MFCで char wchar 簡単変換

CStringAからCStringWに突っ込む

    // ドキュメント取得
    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;

MFCでデスクトップなど特殊フォルダのパスを取得

サンプル


char lpszPath[MAX_PATH] = "";
LPITEMIDLIST pidl;

if(::SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &pidl) == NOERROR)
{
    ::SHGetPathFromIDList(pidl, lpszPath);
    ::CoTaskMemFree(pidl);
}

AfxMessageBox(lpszPath);

パラメータ 番号 フォルダ
CSIDL_DESKTOP 0x0000 デスクトップ
CSIDL_INTERNET 0x0001 インターネット
CSIDL_PROGRAMS 0x0002 プログラム
CSIDL_CONTROLS 0x0003 コントロールパネル
CSIDL_PRINTERS 0x0004 プリンタ
CSIDL_PERSONAL 0x0005 ドキュメント
CSIDL_FAVORITES 0x0006 お気に入り
CSIDL_STARTUP 0x0007 スタートアップ
CSIDL_RECENT 0x0008 最近使ったファイル
CSIDL_SENDTO 0x0009 送る
CSIDL_BITBUCKET 0x000a ゴミ箱
CSIDL_STARTMENU 0x000b スタートメニュー
CSIDL_DESKTOPDIRECTORY 0x0010 デスクトップ
CSIDL_DRIVES 0x0011 マイ コンピュータ
CSIDL_NETWORK 0x0012 マイ ネットワーク
CSIDL_NETHOOD 0x0013 NetHood
CSIDL_FONTS 0x0014 フォント
CSIDL_TEMPLATES 0x0015 テンプレート
CSIDL_COMMON_STARTMENU 0x0016 全ユーザーのスタートメニュー
CSIDL_COMMON_PROGRAMS 0x0017 全ユーザーのプログラム
CSIDL_COMMON_STARTUP 0x0018 全ユーザーのスタートアップ
CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 全ユーザーのデスクトップ
CSIDL_APPDATA 0x001a Application Data
CSIDL_PRINTHOOD 0x001b PrintHood
CSIDL_ALTSTARTUP 0x001d ローカライズされないスタートアップ
CSIDL_COMMON_ALTSTARTUP 0x001e 全ユーザーのローカライズされないスタートアップ
CSIDL_COMMON_FAVORITES 0x001f 全ユーザーのお気に入り
CSIDL_INTERNET_CACHE 0x0020 IEキャッシュ保存先
CSIDL_COOKIES 0x0021 クッキー
CSIDL_HISTORY 0x0022 履歴

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 "--------------------------------------------"