personal.xlsb 파일에 저장된 매크로가 있으며 현재 시트의 형식을 지정합니다. 그 매크로는 두 가지 방식으로 사용됩니다.
SELECT, ACTIVATE, PASTE 등을 사용하지 않고 (따라서 모든 통합 문서와 시트를 선언하고 WITH ...를 사용하여) 적절한 방식으로 매크로를 작성하려고했지만 그렇게하려면 다음을 알아야합니다. 매크로를 호출 한 파일의 이름이며 버튼과 프로 시저 모두에서 호출 될 때 작동해야합니다.
아래 코드를 게시하고 있지만 두 통합 문서간에 전환하지 않기 때문에 완전히 작동하지 않아서 설계된대로 작동하지 않습니다. 그리고 파일과 시트 이름을 얻는 방법을 모른다는 것을 깨달았 기 때문에 적절한 방식으로 코딩을 끝내지 않았습니다.
Option Explicit
Public Sub FormatTheBasics()
Dim CurLastColumn As Long, CurLastRow As Long
Dim CurRowNum As Long, LastRow As Long, FirstRowOfSection As Long, LastRowOfSection As Long
Dim CurCell As Variant, CurRange As Range
Dim wbkM As Workbook, wbkC As Workbook
Dim wksReplaceWords As Worksheet, wksFilesToExportEMail As Worksheet, wksCopyFrom As Worksheet, wksCopyTo As Worksheet
Dim rngCopyFrom As Range, rngCopyTo As Range
Dim x As Long
Dim CurColumnLetter As String, CurColumnName As String, ReplaceFrom As String, ReplaceTo As String
Application.EnableCancelKey = xlDisabled
Set wbkM = Workbooks("Personal.xlsb")
Set wksReplaceWords = wbkM.Sheets("ReplaceWords")
Cells.Select
With Selection.Font
.Name = "Calibri"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
Range("A1:" & MyColumnLetter(xlLastCol) & "1").Select
Selection.Font.Bold = True
With Selection.Interior
.PatternColorIndex = 2
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
Selection.AutoFilter
Rows("2:2").Select
ActiveWindow.FreezePanes = True
For x = 1 To xlLastCol
CurColumnLetter = MyColumnLetter(x)
CurColumnName = StrConv(Range(CurColumnLetter & "1").Value, vbLowerCase)
Range(CurColumnLetter & "1").Value = StrConv(CurColumnName, vbProperCase)
CurRowNum = 2
With wksReplaceWords
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
Set CurRange = .Range("C" & CurRowNum & ":C" & LastRow)
For Each CurCell In CurRange
If CurCell <> "" Then
ReplaceFrom = .Range("B" & CurRowNum).Value
ReplaceTo = CurCell
If InStr(1, CurColumnName, ReplaceFrom, vbTextCompare) > 0 Then
Range(CurColumnLetter & "1").Replace what:=ReplaceFrom, replacement:=ReplaceTo, MatchCase:=True
End If
End If
Next CurCell
End With
Next x
Cells.Select
Cells.EntireColumn.AutoFit
Columns("A:" & MyColumnLetter(xlLastCol)).Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlYes
Range("A2").Select
End Sub
VBA 함수 내에서는 실행이 시작된 위치와 이유를 찾을 수있는 방법이 없습니다. 프로그래머의 입장에서는 호출 스택과 실행 컨텍스트를 조사 할 방법이 없습니다.
그래서 이것을 해결하는 방법? 가장 좋은 방법은 함수가 트리거 될 때 대상 통합 문서의 창이 앞에 있다고 가정 하여 ActiveSheet
또는 ActiveWorkbook
한 번만 사용 하는 것입니다. 변수에 저장하고 이후에는 변수를 사용하십시오.
Public Sub DoStuff():
Dim ws as Worksheet
Set ws = ActiveSheet
ws.Range("A1").value = "Hello World"
' ...
End Sub
이렇게하면 시트 감지 로직에서 결함을 발견 한 경우 맨 위에있는 코드를 개선하기 만하면됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다