Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'★★★セルをダブルクリックした時に動作するマクロ
If Range("A1").Value = 1 Then ' セルA1の値が1の場合のみ処理を実行する
Cancel = True ' イベントをキャンセルして、元々のセルの編集を防止
Dim txtBox As Object ' ActiveXコントロールのTextBoxを格納するための変数
Set txtBox = ActiveSheet.OLEObjects("TextBox1").Object
txtBox.text = txtBox.text & Target.Value & ", " ' テキストボックスに新しい文字列を設定
End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'★★★セルを右クリックした時に動作するマクロ
If Range("A1").Value = 1 Then ' セルA1の値が1の場合のみ処理を実行する
Cancel = True ' イベントをキャンセルして、元々のセルの編集を防止
Dim txtBox As Object ' ActiveXコントロールのTextBoxを格納するための変数
Set txtBox = ActiveSheet.OLEObjects("TextBox2").Object
txtBox.text = txtBox.text & Target.Value & ", " ' テキストボックスに新しい文字列を設定
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'★★★選択セルが変更された時に動作するマクロ
If Target.Column = 3 Then ' 選択されたセルが指定の列の場合の処理をここに追加する
ActiveWindow.ScrollRow = Target.Row
End If
End Sub
Sub 機能切替()
Dim textBox As Shape
Set textBox = ActiveSheet.Shapes("機能トグルボタン") ' テキストボックスを取得
If Range("A1").Value = 1 Then
Range("A1").ClearContents ' A1が1の場合、空白にする
textBox.TextFrame.Characters.text = "機能OFF" ' テキストボックス内のテキストを取得
Else
Range("A1").Value = 1 ' A1が1でない場合、1にする
textBox.TextFrame.Characters.text = "機能ON" ' テキストボックス内のテキストを取得
End If
End Sub
Sub テキストボックス文字列クリア()
ActiveSheet.OLEObjects("TextBox1").Object.text = ""
ActiveSheet.OLEObjects("TextBox2").Object.text = ""
End Sub
Sub テキストボックス文字列をクリップボードへ()
Dim txtBox1 As Object ' TextBox1を格納するための変数
Dim txtBox2 As Object ' TextBox2を格納するための変数
' TextBox2の内容をクリップボードへコピー
Set txtBox2 = ActiveSheet.OLEObjects("TextBox2").Object
With CreateObject("Forms.TextBox.1")
.MultiLine = True
.text = txtBox2.text
.SelStart = 0
.SelLength = .TextLength
.copy
End With
Application.Wait Now + TimeValue("0:00:01")
' TextBox1の内容をクリップボードへコピー
Set txtBox1 = ActiveSheet.OLEObjects("TextBox1").Object
With CreateObject("Forms.TextBox.1")
.MultiLine = True
.text = txtBox1.text
.SelStart = 0
.SelLength = .TextLength
.copy
End With
End Sub
Sub オートフィル切替()
' 現在のオートフィル有効無効を確認して切り替える
If Application.CellDragAndDrop = True Then
Application.CellDragAndDrop = False
ActiveSheet.Shapes("オートフィルトグルボタン").TextFrame.Characters.text = "オートフィル OFF"
Else
Application.CellDragAndDrop = True
ActiveSheet.Shapes("オートフィルトグルボタン").TextFrame.Characters.text = "オートフィル ON"
End If
End Sub
**********************
Option Explicit
Public olApp As Object
Public olInspector As Object
Public olMailItem As Object
Public 判定結果 As String
Sub 宛先に追加()
判定結果 = アイテム判定()
Debug.Print 判定結果
'**********アイテム判定_必要あれば新規メール作成****************
If Not 判定結果 = "メールアイテム_編集中" Then
MsgBox "編集中メールが確認できないため、新規メールで作成します。"
Set olApp = CreateObject("Outlook.Application")
Set olMailItem = olApp.CreateItem(0) ' 新規メールを作成、0はolMailItemを表します
判定結果 = "メールアイテム_編集中"
End If
If 判定結果 = "メールアイテム_編集中" Then
olMailItem.To = olMailItem.To & "," & ActiveSheet.OLEObjects("TextBox1").Object.text
olMailItem.CC = olMailItem.CC & "," & ActiveSheet.OLEObjects("TextBox2").Object.text
Else
MsgBox "予期しないエラー。終了します"
Exit Sub
End If
'****************終了処理**************************
Application.Wait [Now()] + 1# / 86400
olMailItem.Display ' メールアイテムを更新
End Sub
Function アイテム判定()
'■現在のOutlookアイテムを判定する関数■
On Error GoTo アイテム無し 'エラー処理が発生する場合はアイテムなしと判定
Set olApp = GetObject(, "Outlook.Application")
Set olInspector = olApp.ActiveInspector
Set olMailItem = olInspector.CurrentItem
If Not olMailItem.Class = 43 Then '43はMailItemのClassを表す。
アイテム判定 = "メールアイテム以外"
Else
If olMailItem.Parent = "Draft" Or olMailItem.Parent = "送信トレイ" Then
アイテム判定 = "メールアイテム_編集中"
Else
アイテム判定 = "メールアイテム_編集中以外"
End If
End If
GoTo 判定終了
'****************ラベル処理**************************
アイテム無し:
アイテム判定 = "アイテム無し"
'****************ラベル処理**************************
判定終了:
On Error GoTo 0
End Function
********************************
通常テキストボックス版
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'★★★選択セルが変更された時に動作するマクロ
If Target.Column = 3 Then ' 選択されたセルが指定の列の場合の処理をここに追加する
ActiveWindow.ScrollRow = Target.Row
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'★★★ダブルクリックした時に動作するマクロ
If Range("A1").Value = 1 Then ' セルA1の値が1の場合のみ処理を実行する
Cancel = True ' イベントをキャンセルして、元々のセルの編集を防止
' テキストボックスに新しい文字列を追加
ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text = _
ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text & Target.Value & "; " & vbCrLf
End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'★★★右クリックした時に動作するマクロ
If Not Range("A1").Value = 1 Then Exit Sub ' セルA1の値が1の場合のみ処理を実行する
Cancel = True ' イベントをキャンセルして、元々のセルの編集を防止
Dim 文字列 As String
Dim セル As Range
For Each セル In Target
文字列 = 文字列 & セル.Value & "; " & vbCrLf
Next セル
' 選択範囲が1つのセルの場合
If Selection.Cells.Count = 1 Then
ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text = _
ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text & 文字列
Exit Sub
End If
If Selection.Cells.Count > 1 Then
Dim 結果 As VbMsgBoxResult
結果 = MsgBox("はい ⇒ 宛先に追加" & vbCrLf & "いいえ ⇒ CCに追加" & vbCrLf & "キャンセル", Buttons:=vbYesNoCancel)
If 結果 = vbYes Then
ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text = _
ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text & 文字列
ElseIf 結果 = vbNo Then
ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text = _
ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text & 文字列
Else
End If
End If
End Sub
Sub テキストボックス文字列クリア()
ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text = ""
ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text = ""
End Sub
Sub テキストボックス文字列をクリップボードへ()
' TextBox2の内容をクリップボードへコピー
With CreateObject("Forms.TextBox.1")
.MultiLine = True
.Text = ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text
.SelStart = 0
.SelLength = .TextLength
.copy
End With
Application.Wait Now + TimeValue("0:00:01")
' TextBox1の内容をクリップボードへコピー
With CreateObject("Forms.TextBox.1")
.MultiLine = True
.Text = ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text
.SelStart = 0
.SelLength = .TextLength
.copy
End With
End Sub
Sub TOP_メール作成()
判定結果 = アイテム判定()
Debug.Print 判定結果
'**********アイテム判定_必要あれば新規メール作成****************
If Not 判定結果 = "メールアイテム_編集中" Then
MsgBox "編集中メールが確認できないため、新規メールで作成します。"
Set olApp = CreateObject("Outlook.Application")
Set olMailItem = olApp.CreateItem(0) ' 新規メールを作成、0はolMailItemを表します
判定結果 = "メールアイテム_編集中"
End If
If 判定結果 = "メールアイテム_編集中" Then
olMailItem.To = olMailItem.To & ";" & ActiveSheet.Shapes("宛先ボックス").TextFrame.Characters.Text
olMailItem.CC = olMailItem.CC & ";" & ActiveSheet.Shapes("CCボックス").TextFrame.Characters.Text
Else
MsgBox "予期しないエラー。終了します"
Exit Sub
End If
'****************終了処理**************************
Application.Wait [Now()] + 1# / 86400
olMailItem.Display ' メールアイテムを更新
End Sub
Sub 機能切替()
Dim textBox As Shape
Set textBox = ActiveSheet.Shapes("機能トグルボタン") ' テキストボックスを取得
If Range("A1").Value = 1 Then
Range("A1").ClearContents ' A1が1の場合、空白にする
textBox.TextFrame.Characters.Text = "機能OFF" ' テキストボックス内のテキストを取得
Else
Range("A1").Value = 1 ' A1が1でない場合、1にする
textBox.TextFrame.Characters.Text = "機能ON" ' テキストボックス内のテキストを取得
End If
End Sub
Sub オートフィル切替()
' 現在のオートフィル有効無効を確認して切り替える
If Application.CellDragAndDrop = True Then
Application.CellDragAndDrop = False
ActiveSheet.Shapes("オートフィルトグルボタン").TextFrame.Characters.Text = "オートフィル OFF"
Else
Application.CellDragAndDrop = True
ActiveSheet.Shapes("オートフィルトグルボタン").TextFrame.Characters.Text = "オートフィル ON"
End If
End Sub
Sub 選択範囲をクリップボードに()
Dim 選択範囲 As Range
Dim cell As Range
Dim 文字列 As String
' ①選択範囲を取得
Set 選択範囲 = Selection
' ②選択範囲内の各セルの文字列を結合
For Each cell In 選択範囲
文字列 = 文字列 & cell.Value & vbCrLf
Next cell
' ③結果をクリップボードにコピー
With New MSForms.DataObject
.SetText 文字列
.PutInClipboard
End With
End Sub
コメントを残す