Excel VBA ShiftJIS文字列が16進数になってさらにそれを文字列にしたものを文字列に変換

意外とややこしいのよね

Function ConvStrtoSJISCodeStr(aSJISstr As String) As String

    If Len(aSJISstr) < 2 Then
        Exit Function
    End If

    Dim aryByte() As Byte
    ReDim aryByte(Len(aSJISstr) / 2 - 1)

    Dim i
    i = 0
    Do
        If Len(aSJISstr) <= 0 Then
            Exit Do
        End If
        
        Dim bHex As Byte
        bHex = Int("&H" & Left(aSJISstr, 1)) * 16 + Int("&H" & Mid(aSJISstr, 2, 1))
        aSJISstr = Right(aSJISstr, Len(aSJISstr) - 2)
        
        aryByte(i) = bHex
        i = i + 1
    Loop
    
    ConvStrtoSJISCodeStr = StrConv(aryByte, vbUnicode)

End Function

エクセルVBAでダイアログボックスを表示させ複数ファイル選択

エクセルファイル複数選択例

Option Explicit
Sub OpenExcelFile()

    Dim openFilePath As Variant

    'ダイアログボックスで選択したファイルを配列に入れる
    'MultiSelect:=Trueにすると複数ファイル選択OK
    openFilePath = Application.GetOpenFilename _
    ("Microsoft Excel ファイル,*.xls*", , "エクセルファイルを選んで下さい", MultiSelect:=True)
        
    Dim pt As Variant
    
    If IsArray(openFilePath) Then
        '配列ぶん繰り返しファイル処理
        For Each pt In openFilePath
            Debug.Print(pt)
        Next pt
    End If
    
End Sub

ネタ元

asatte.biz

vb.net フォーム右上の閉じるボタンを無効にする

以下をフォームのコードに追加

' CreateParams プロパティをオーバーライドする
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
    Get
        Const CS_NOCLOSE As Integer = &H200

        Dim DcreateParams As System.Windows.Forms.CreateParams = MyBase.CreateParams
        DcreateParams .ClassStyle = DcreateParams .ClassStyle Or CS_NOCLOSE

        Return DcreateParams 
    End Get
End Property

ネタ元

jeanne.wankuma.com

C# VB.net フォームの位置とサイズを記憶させる

Form1_Load()で復元処理して、FormClosing()で保存処理する

以下はレジストリ使った例

Private Sub FormHoge_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\hoge\param")
        Dim size As Size
        size = New Size(regkey.GetValue("w", 1024), regkey.GetValue("h", 768))
        Me.ClientSize = size

        Dim point As Point
        point = New Point(regkey.GetValue("x", 0), regkey.GetValue("y", 0))
        Me.Location = point
End Sub
Private Sub FormHoge_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\hoge\param")
        regkey.SetValue("w", Me.ClientSize.Width)
        regkey.SetValue("h", Me.ClientSize.Height)

        regkey.SetValue("x", Me.Location.X)
        regkey.SetValue("y", Me.Location.Y)
End Sub

ApplicationSettingsを使ったやつだと
DLLで実装した場合、再起動するとすべて忘れてしまった。
あとClientSizeは思ったとおりにならない罠があるらしい。