OS | |
Windows10 | 22H2 |
MacOS | 14.6 |
Ubuntu | 24.04 LTS |
CentOS | 7.9-2009 |
archLinux | 2024.08.01 |
Android | 15 |
iOS | 17.6 |
言語 | |
TypeScript | 5.5.4 |
PHP | 8.3 |
Python | 3.12.4 |
C# | 12 |
フレームワーク | |
vue3 cli | 3.4.31 |
express | 4.18.1 |
angular | 18.1.1 |
react | 18.3.1 |
Laravel | 11.1.4 |
Django | 5.0.7 |
flask | 3.0.3 |
サーバ環境 | |
VirtualBox | 7.0.20 |
vagrant | 2.4.1 |
Docker | 27.1.1 |
Docker Compose | |
Kubernetes | 1.30.3 |
+ | 読む |
+ | 読む |
'CommonLibrary
'オブジェクト一括削除
'todo: functionの引数を変えても変わらないバグ
Sub deleteAllObjects()
Dim obj As Object
Dim ws As Worksheet
Dim hyperlink As hyperlink
' Dim description As String
Set ws = ActiveSheet
For Each obj In ActiveSheet.Shapes
obj.Delete
log4timestamp ("Shapes")
Next obj
For Each obj In ActiveSheet.ChartObjects
obj.Delete
log4timestamp ("ChartObjects")
Next obj
For Each obj In ActiveSheet.OLEObjects
obj.Delete
log4timestamp ("OLEObjects")
Next obj
For Each obj In ActiveSheet.Buttons
obj.Delete
log4timestamp ("Buttons")
Next obj
For Each obj In ActiveSheet.ListBoxes
obj.Delete
log4timestamp ("ListBoxes")
Next obj
For Each obj In ActiveSheet.CheckBoxes
obj.Delete
log4timestamp ("CheckBoxes")
Next obj
For Each obj In ActiveSheet.OptionButtons
obj.Delete
log4timestamp ("OptionButtons")
Next obj
'delete hyperlins
For Each hyperlink In ws.Hyperlinks
hyperlink.Delete
log4timestamp ("Hyperlinks")
Next hyperlink
End Sub
Sub ShowHiddenRowsInRange()
Dim rng As Range
Set rng = Range("A1:A10") ' 表示したい範囲を指定
rng.EntireRow.Hidden = False
Rows.Hidden = False
log4timestamp ("ShowHiddenRowsInRange")
End Sub
Sub ShrinkObjects()
Dim obj As Object
Dim ws As Worksheet
Set ws = ActiveSheet ' 縮小したいオブジェクトが含まれているシートを指定
' シート上のすべてのオブジェクトを縮小する
For Each obj In ws.Shapes
obj.ScaleWidth 0.75, msoFalse, msoScaleFromTopLeft
obj.ScaleHeight 0.75, msoFalse, msoScaleFromTopLeft
Next obj
' シート上のすべてのチャートを縮小する
For Each obj In ws.ChartObjects
obj.Width = obj.Width * 0.75
obj.Height = obj.Height * 0.75
Next obj
' シート上のすべてのテキストボックスを縮小する
For Each obj In ws.TextBoxes
obj.Width = obj.Width * 0.75
obj.Height = obj.Height * 0.75
Next obj
log4timestamp ("ShrinkObjects")
End Sub
Sub CompressImages()
Dim ws As Worksheet
Dim shp As Shape
For Each ws In ThisWorkbook.Worksheets ' すべてのシートに対して処理を繰り返す
For Each shp In ws.Shapes ' シート内のすべてのシェイプを取得する
If shp.Type = msoPicture Then ' シェイプが画像である場合のみ処理を実行する
shp.PictureFormat.Compression = 80 ' 圧縮率を設定する(ここでは80%に設定していますが、必要に応じて変更してください)
shp.PictureFormat.SaveWithDocument = True ' 圧縮画像をブックに保存する
End If
Next shp
Next ws
End Sub
|
+ | 読む |
Sub createstarttelework()
Dim OutApp As Object
Dim OutMail As Object
Dim fso As Object
Dim textFile As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim mailDate As String
mailDate Format(Now, "MM/DD")
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.opentextfile("c:\aaa\bbb\importfile.txt", 1)
bodyText = textFile.ReadAll
textFile.Close
With OutMail
.To = "joshi@example.com; joshi2@example.com"
.CC = "joshi@example.com; joshi2@example.com"
.BCC = "me@example.com"
.Subject = mailDate & "出勤"
.Body = bodyText
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
Set fso = Nothing
End Sub
|
+ | 読む |
【注意】FSOは参照設定のMicrosoft Scripting Runnerを有効化する必要がある。
Sub ExportEmailSubjectsAndReceivedDates()
Dim outlookApp As Outlook.Application
Dim namespace As Outlook.NameSpace
Dim folder As Outlook.Folder
Dim mailItems As Outlook.Items
Dim mailItem As Object
Dim startDate As Date
Dim endDate As Date
Dim filter As String
Dim fso As Object
Dim textFile As Object
Dim filePath As String
' Outlookのセットアップ
Set outlookApp = New Outlook.Application
Set namespace = outlookApp.GetNamespace("MAPI")
' フォルダのパスに基づいてフォルダを取得
Set folder = namespace.Folders("メールボックス名").Folders("受信トレイ").Folders("path").Folders("to").Folders("targetfolder") ' メールボックス名は基本はメールアドレス
' 取得するメールの期間を設定
startDate = "2023/11/01"
endDate = "2023/11/30"
' 期間に基づいてフィルタを設定
filter = "[ReceivedTime] >= '" & Format$(startDate, "ddddd h:nn AMPM") & _
"' And [ReceivedTime] <= '" & Format$(endDate, "ddddd h:nn AMPM") & "'"
' フィルタを適用してメールを取得
Set mailItems = folder.Items.Restrict(filter)
mailItems.Sort "[ReceivedTime]", True ' 受信日時でソート
' 出力するテキストファイルのパス
filePath = "C:\EmailSubjectsAndDates.txt" ' ファイル名を含めたフルパスを記載
' FileSystemObjectのセットアップ
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.CreateTextFile(filePath, True)
' メールの件名と受信日時をファイルに書き込む
For Each mailItem In mailItems
If mailItem.Class = olMail Then
textFile.WriteLine "件名: " & mailItem.Subject & " - 受信日時: " & mailItem.ReceivedTime
End If
Next mailItem
' ファイルを閉じる
textFile.Close
' オブジェクトの解放
Set fso = Nothing
Set textFile = Nothing
Set mailItems = Nothing
Set folder = Nothing
Set namespace = Nothing
Set outlookApp = Nothing
' 完了メッセージ
MsgBox "メールの件名と受信日時が出力されました。", vbInformation
End Sub
|
+ | 読む |
Sub createweekendreport()
Dim OutApp As Object
Dim OutMail As Object
Dim fso As Object
Dim textFile As Object
Dim bodyText As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim mailDate As String
mailDate Format(Now, "MM/DD")
FilePath = InputBox("週報のファイルを指定", "入力", "c:\aaa\bbb\ccc")
If FilePath = "" Then Exit Sub
On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.opentextfile("c:\aaa\bbb\importfile.txt", 1)
If Err.Number <> 0 Then
MsgBox "ファイルパスが不正", vbExclamation
Exit Sub
End If
On Error GoTo 0
bodyText = textFile.ReadAll
textFile.Close
With OutMail
.To = "joshi@example.com; joshi2@example.com"
.CC = "joshi@example.com; joshi2@example.com"
.BCC = "me@example.com"
.Subject = mailDate & "出勤"
.Body = bodyText
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
Set fso = Nothing
End Sub
|
+ | 読む |
1.動かしたいサブプロシージャ―を作成
2.VBA・プロジェクトビューワのExcelObjectsにある「ThisWorkBook」で次のPrivate サブプロシージャ―を作成する Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Call 動かしたいサブプロシージャ―名
End Sub
3.シートでハイパーリンクを作成する。
このときリンク先は自身のセルを指定すると良い。
(メリット)
マクロの起動にはメニューの開発からマクロを選択したり、オブジェクト画像にマクロをリンクさせる方法があるが いずれも面倒さがある。ハイパーリンクから起動する場合、設置が楽で汎用性があるところがメリット。
(注意点)
ThisWorkBookにプロシージャ―を置いているので、ハイパーリンクを踏むと全てのシートで同一マクロを動かしてしまうので注意。 特定シート、セルからのみ動かしたい場合はWorkbook_SheetFollowHyperlinkの引数を利用して条件分けすることで対処できる。
シート別に動かすマクロを変える場合は、引数Sh、Targetを利用して条件分けする必要がある。
Sh.Nameでシート名を取得でき、 Target.SubAddressで「シート名!A1」形式でセル座標を取得でき、 Target.Nameで「ハイパーリンクにしている文字列」を取得できる ので、細かく条件分けすることができる。 |