시트를 반투명하게
반투명 Window
일부 텍스트 편집기 또는 의사 단말 소프트웨어 등은 창을 반투명하게 설정할 수 있습니다. 배경에서 무언가 움직이고 있는 것이 보이든, 장점은 각각 있다고 생각합니다만, 무언가를 참조하면서 입력할 때 반투명하면 입력 화면에서 데이터가 비쳐 보이는 장점이 있다 경우도 있습니다.
VBA에서 Window를 반투명화
VBA에서도 Windows API를 사용하여 Windows의 투명도를 변경할 수 있습니다. 너무 얇게 하면 보이기 어렵다든가, 조정이 어렵습니다만, 특정의 시트만 반투명하게 할 수 있으면 더 사용법이 퍼질지도! 라고 생각한 대로.
먼저 다음 코드를 표준 모듈에 씁니다.
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal color As Long, ByVal bAlpha As Byte, ByVal alpha As Long) As Boolean
' 不透明度opacityは0(透明)から1(通常)の間
Sub SetOpacity(opacity As Double)
On Error GoTo DoNothing
Dim h As Long
Dim attr As Long
h = Application.hwnd
attr = GetWindowLong(h, GWL_EXSTYLE)
SetWindowLong h, GWL_EXSTYLE, attr Or WS_EX_LAYERED
SetLayeredWindowAttributes h, RGB(0, 0, 0), CByte(opacity * 255), LWA_ALPHA
DoNothing:
End Sub
사용법은 간단하며 인수에 0과 1 사이의 숫자를 전달하면됩니다. 0.5를 전달하면 그냥 반투명하게 되고, 0.7이라면 그것보다 진하고, 0.3이라면 그것보다 얇게 표시됩니다.
시트별 투명도 지정
시트마다 opacity라는 이름을 정의하고 책(ThisWorkbook)에 다음 코드를 넣으면 시트를 전환할 때마다 각각의 시트의 셀(%포맷으로 해 두는 것이 좋네요)에 쓰여졌다 불투명도가 자동으로 설정됩니다.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo Opac
SetOpacity Evaluate("opacity")
Exit Sub
Opac:
SetOpacity 1
End Sub
opacity의 이름을 설정하지 않은 시트는 자동으로 100%가 되므로, 반투명화하고 싶은 시트만, opacity를 정의해 두면 좋게 되어 있습니다.
실행 예
Sheet1을 50%, Sheet2를 75%, Sheet3을 90%, Sheet4/Sheet5는 설정하지 않은 실행 예입니다.
시트 범위의 이름을 함께 정의
이름은 각각의 시트에 정의해도 되고, 각 시트 범위의 opacity를 다른 시트에 일괄 설정하는 것도, 하나의 방법입니다.
문장으로 말해도 이해하기 어렵기 때문에, 모든 시트를 80% 투명도로서 일람의 opacity 시트를 작성하는 VBA 코드를 마지막에 써 둡니다. 시트마다의 범위명은, 다른 시트에 정의할 수 있네요.
Sub CreateOpacityList()
Dim sheet As Worksheet
On Error Resume Next
Set sheet = Worksheets("opacity")
If sheet Is Nothing Then
' opacityシートがなければブックの最後に追加する
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sheet = ActiveSheet
sheet.Name = "opacity"
End If
' 1行目は見出し
sheet.Range("A1").Value = "シート名"
sheet.Range("B1").Value = "不透明度"
Dim cell As Range
Set cell = sheet.Range("A2")
For Each sheet In Worksheets
If sheet.Name <> "opacity" Then
cell.Value = sheet.Name
With cell.Offset(0, 1)
.Value = 0.8
.Style = "Percent"
End With
sheet.Names.Add Name:="opacity", RefersTo:=cell.Offset(0, 1)
Set cell = cell.Offset(1, 0)
End If
Next
End Sub
위의 코드를 실행하여 생성된 opacity 시트는 시트 이름당 80%로 작성되어 있으므로 이 값을 변경하여 시트별 불투명도를 설정할 수 있습니다.
Reference
이 문제에 관하여(시트를 반투명하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masaoki/items/3bdd5ea8e6d07a03c9ca
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
VBA에서도 Windows API를 사용하여 Windows의 투명도를 변경할 수 있습니다. 너무 얇게 하면 보이기 어렵다든가, 조정이 어렵습니다만, 특정의 시트만 반투명하게 할 수 있으면 더 사용법이 퍼질지도! 라고 생각한 대로.
먼저 다음 코드를 표준 모듈에 씁니다.
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal color As Long, ByVal bAlpha As Byte, ByVal alpha As Long) As Boolean
' 不透明度opacityは0(透明)から1(通常)の間
Sub SetOpacity(opacity As Double)
On Error GoTo DoNothing
Dim h As Long
Dim attr As Long
h = Application.hwnd
attr = GetWindowLong(h, GWL_EXSTYLE)
SetWindowLong h, GWL_EXSTYLE, attr Or WS_EX_LAYERED
SetLayeredWindowAttributes h, RGB(0, 0, 0), CByte(opacity * 255), LWA_ALPHA
DoNothing:
End Sub
사용법은 간단하며 인수에 0과 1 사이의 숫자를 전달하면됩니다. 0.5를 전달하면 그냥 반투명하게 되고, 0.7이라면 그것보다 진하고, 0.3이라면 그것보다 얇게 표시됩니다.
시트별 투명도 지정
시트마다 opacity라는 이름을 정의하고 책(ThisWorkbook)에 다음 코드를 넣으면 시트를 전환할 때마다 각각의 시트의 셀(%포맷으로 해 두는 것이 좋네요)에 쓰여졌다 불투명도가 자동으로 설정됩니다.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo Opac
SetOpacity Evaluate("opacity")
Exit Sub
Opac:
SetOpacity 1
End Sub
opacity의 이름을 설정하지 않은 시트는 자동으로 100%가 되므로, 반투명화하고 싶은 시트만, opacity를 정의해 두면 좋게 되어 있습니다.
실행 예
Sheet1을 50%, Sheet2를 75%, Sheet3을 90%, Sheet4/Sheet5는 설정하지 않은 실행 예입니다.
시트 범위의 이름을 함께 정의
이름은 각각의 시트에 정의해도 되고, 각 시트 범위의 opacity를 다른 시트에 일괄 설정하는 것도, 하나의 방법입니다.
문장으로 말해도 이해하기 어렵기 때문에, 모든 시트를 80% 투명도로서 일람의 opacity 시트를 작성하는 VBA 코드를 마지막에 써 둡니다. 시트마다의 범위명은, 다른 시트에 정의할 수 있네요.
Sub CreateOpacityList()
Dim sheet As Worksheet
On Error Resume Next
Set sheet = Worksheets("opacity")
If sheet Is Nothing Then
' opacityシートがなければブックの最後に追加する
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sheet = ActiveSheet
sheet.Name = "opacity"
End If
' 1行目は見出し
sheet.Range("A1").Value = "シート名"
sheet.Range("B1").Value = "不透明度"
Dim cell As Range
Set cell = sheet.Range("A2")
For Each sheet In Worksheets
If sheet.Name <> "opacity" Then
cell.Value = sheet.Name
With cell.Offset(0, 1)
.Value = 0.8
.Style = "Percent"
End With
sheet.Names.Add Name:="opacity", RefersTo:=cell.Offset(0, 1)
Set cell = cell.Offset(1, 0)
End If
Next
End Sub
위의 코드를 실행하여 생성된 opacity 시트는 시트 이름당 80%로 작성되어 있으므로 이 값을 변경하여 시트별 불투명도를 설정할 수 있습니다.
Reference
이 문제에 관하여(시트를 반투명하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masaoki/items/3bdd5ea8e6d07a03c9ca
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo Opac
SetOpacity Evaluate("opacity")
Exit Sub
Opac:
SetOpacity 1
End Sub
Sheet1을 50%, Sheet2를 75%, Sheet3을 90%, Sheet4/Sheet5는 설정하지 않은 실행 예입니다.
시트 범위의 이름을 함께 정의
이름은 각각의 시트에 정의해도 되고, 각 시트 범위의 opacity를 다른 시트에 일괄 설정하는 것도, 하나의 방법입니다.
문장으로 말해도 이해하기 어렵기 때문에, 모든 시트를 80% 투명도로서 일람의 opacity 시트를 작성하는 VBA 코드를 마지막에 써 둡니다. 시트마다의 범위명은, 다른 시트에 정의할 수 있네요.
Sub CreateOpacityList()
Dim sheet As Worksheet
On Error Resume Next
Set sheet = Worksheets("opacity")
If sheet Is Nothing Then
' opacityシートがなければブックの最後に追加する
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sheet = ActiveSheet
sheet.Name = "opacity"
End If
' 1行目は見出し
sheet.Range("A1").Value = "シート名"
sheet.Range("B1").Value = "不透明度"
Dim cell As Range
Set cell = sheet.Range("A2")
For Each sheet In Worksheets
If sheet.Name <> "opacity" Then
cell.Value = sheet.Name
With cell.Offset(0, 1)
.Value = 0.8
.Style = "Percent"
End With
sheet.Names.Add Name:="opacity", RefersTo:=cell.Offset(0, 1)
Set cell = cell.Offset(1, 0)
End If
Next
End Sub
위의 코드를 실행하여 생성된 opacity 시트는 시트 이름당 80%로 작성되어 있으므로 이 값을 변경하여 시트별 불투명도를 설정할 수 있습니다.
Reference
이 문제에 관하여(시트를 반투명하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masaoki/items/3bdd5ea8e6d07a03c9ca
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Sub CreateOpacityList()
Dim sheet As Worksheet
On Error Resume Next
Set sheet = Worksheets("opacity")
If sheet Is Nothing Then
' opacityシートがなければブックの最後に追加する
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sheet = ActiveSheet
sheet.Name = "opacity"
End If
' 1行目は見出し
sheet.Range("A1").Value = "シート名"
sheet.Range("B1").Value = "不透明度"
Dim cell As Range
Set cell = sheet.Range("A2")
For Each sheet In Worksheets
If sheet.Name <> "opacity" Then
cell.Value = sheet.Name
With cell.Offset(0, 1)
.Value = 0.8
.Style = "Percent"
End With
sheet.Names.Add Name:="opacity", RefersTo:=cell.Offset(0, 1)
Set cell = cell.Offset(1, 0)
End If
Next
End Sub
Reference
이 문제에 관하여(시트를 반투명하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masaoki/items/3bdd5ea8e6d07a03c9ca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)