Obsah
VBA
Excel
Vstup
Seznam povolených klávesnic
GetKeyboardLayoutList na MSDN
Private Declare Function GetKeyboardLayoutList Lib "User32.dll" (ByVal nBuff As Long, ByRef lpList As Long) As Long Public Function GetKeyboardLayouts() As Long() Dim NumLayouts As Long Dim Layouts() As Long NumLayouts = GetKeyboardLayoutList(0, ByVal 0&) If (NumLayouts) Then ReDim Layouts(NumLayouts - 1) As Long GetKeyboardLayoutList NumLayouts, Layouts(0) GetKeyboardLayouts = Layouts End If End Function
Přepnutí klávesnice
ActivateKeyboardLayout na MSDN
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal Flags As Long) As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Column Case 1 ActivateKeyboardLayout &H4490449, &H100 Case 2 ActivateKeyboardLayout &HF0050405, &H100 End Select End Sub
HKL
| &HF0050405 | Czech (QWERTY) |
| &HF0020409 | US Dvorak |
Seznam LCID (které, ovšem, nemá s klávesnicemi nic společného)
Outlook
Export mailů
Sub ExportSelectedMailItems()
Dim Selection As Selection
Dim Mail As MailItem
Set Selection = ActiveExplorer.Selection
For Each Mail In Selection
Subject = Mail.Subject
Body = Mail.HTMLBody
Received = Mail.ReceivedTime
FilePath = Subject & ".html"
MakeSureDirectoryPathExists FilePath
Open FilePath For Output As #1
Print #1, Body
Close #1
Next
End Sub
Narozeniny & svátky do kalendáře
Možná to tak trochu funguje jen při krokování…
Const EmptyDate As Date = #1/1/4501#
Sub AddBirthdaysAnniversaries()
Dim a As Date, b As Date
Dim contacts As MAPIFolder
Set contacts = Session.PickFolder
For i = contacts.Items.Count To 1 Step -1
If contacts.Items(i).Class = 40 Then
b = contacts.Items(i).Birthday
If b <> EmptyDate Then
contacts.Items(i).Birthday = Now
contacts.Items(i).Birthday = b
End If
a = contacts.Items(i).Anniversary
If a <> EmptyDate Then
contacts.Items(i).Anniversary = Now
contacts.Items(i).Anniversary = a
End If
If b <> EmptyDate Or a <> EmptyDate Then
contacts.Items(i).Save
contacts.Items(i).Close olSave
End If
End If
Next i
End Sub
Přidat věk ze začátku opakování v den narození…
Sub VěkDoKalendáře()
Dim contacts As MAPIFolder
Dim a As AppointmentItem
Dim r As RecurrencePattern
Dim o As AppointmentItem
Dim born As Date
Set contacts = Session.PickFolder
For i = contacts.Items.Count To 1 Step -1
Set a = contacts.Items(i)
If a.IsRecurring And a.Start < #1/1/2004# Then
born = DateAdd("yyyy", 9, a.Start)
Set r = a.GetRecurrencePattern()
l = 9
While born < #1/1/2021#
born = DateAdd("yyyy", 1, born)
l = l + 1
If born >= #1/1/2000# Then
Set o = r.GetOccurrence(born)
o.Location = l & " let" ' (" & DatePart("yyyy", a.Start) & ")"
o.Save
End If
Wend
End If
Next i
End Sub
PowerPoint
Export/import animací cest
Public Const FilePath As String = "I:\Desktop\paths.txt"
Public Sub ExportCurrentSlidePaths()
Dim s As Slide
Dim e As Effect
Dim b As AnimationBehavior
Dim eI As Integer
Dim bI As Integer
Set s = Application.ActiveWindow.View.Slide
Open FilePath For Output As #1
eI = 1
For Each e In s.TimeLine.MainSequence
bI = 1
For Each b In e.Behaviors
Debug.Print eI & vbTab & bI & vbTab & b.MotionEffect.Path & vbTab & e.DisplayName
Print #1, eI & vbTab & bI & vbTab & b.MotionEffect.Path & vbTab & e.DisplayName
bI = bI + 1
Next b
eI = eI + 1
Next e
Close #1
End Sub
Public Sub ImportCurrentSlidePaths()
Dim line As String
Dim tokens() As String
Dim eI As Integer
Dim bI As Integer
Dim motionPath As String
Open FilePath For Input As #1
While Not EOF(1)
Line Input #1, line
tokens = Split(line, vbTab)
eI = CInt(tokens(0))
bI = CInt(tokens(1))
motionPath = tokens(2)
Application.ActiveWindow.View.Slide.TimeLine.MainSequence(eI).Behaviors(bI).MotionEffect.Path = motionPath
Wend
Close #1
End Sub
Různé
Trim
Function TrimLeft(s As String, c As String) While Len(c) < Len(s) If Left(s, Len(c)) <> c Then GoTo EndFunction s = Mid(s, Len(c) + 1) Wend EndFunction: TrimLeft = s End Function Function TrimRight(s As String, c As String) While Len(c) < Len(s) If Right(s, Len(c)) <> c Then GoTo EndFunction s = Left(s, Len(s) - Len(c)) Wend EndFunction: TrimRight = s End Function Function TrimBoth(s As String, c As String) s = TrimLeft(s, c) s = TrimRight(s, c) TrimBoth = s End Function
CreateDirectory (celou cestu)
Jako složku bere do posledního lomítka.
Declare PtrSafe Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal path As String) As Long
programovani/vba.txt · Poslední úprava: 24.05.2016 19:25 autor: vm