나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 dew (dewdrop)

추천:  2
파일:     조회:  1773
제목:   [RE]일일업무일지 VBA 오류 질문
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007):2016

* 아래줄에 질문을 작성하세요 >>

   
  안녕하세요!
VBA 관련 질문있어 올립니다. 
아래 코드는 일일 업무일지이며
한달을 만드는 과정에서 주말,공휴일 빼고 만드는 것을 만들었는데요
이것저것 짜집기식이라서 잘몰라 남깁니다

1. 공휴일을 Input박스로 입력하여 나타나지 않게 하는데요~
   여러개 입력을 해도 모두 빠져야 하는것인데 한개만 입력 할 수 있고 여러개를 입력하면 오류발생합니다. 
2. 양식을 보면 날짜가 있는데요~ C6셀에 보시면 전날입력이 되지만
주말이나 공휴일이 생기면 공휴일 전날이 나와야 하는데 그것도 조언부탁드립니다. 
제가 설명을 잘 했는지 모르겠습니다. 

---------------------------------------------------------------------
Sub 일일업무일지()

    Dim 작성연 As Integer, 작성월 As Integer, 마지막일자 As Integer, j As Integer, i As Integer, 주말 As Integer
    Dim 날짜 As Date
    Dim 개수 As Double
    Dim 공휴일 As String, 공휴일자() As String, 요일 As String
    Dim 비고 As Boolean
    Dim wrs As Worksheet
    

Application.DisplayAlerts = False


    작성연 = Application.InputBox("연도를 입력하세요" & Chr(13) & _
    "작성을 취소하려면 [취소] 단추를 클릭하세요", Title:="연도 입력", Type:=1)
    If 작성연 = 0 Then Exit Sub
    
     작성월 = Application.InputBox("월을 입력하세요" & Chr(13) & _
    "작성을 취소하려면 [취소]단추를 클릭하세요", Title:="월 입력", Type:=1)
    If 작성월 = 0 Then Exit Sub

Application.DisplayAlerts = True

    공휴일 = Application.InputBox("주말을 제외하고 공휴일을 쉽표로 구분해서 입력하세요" & _
    "예로들어 1,7,20으로 입력." & Chr(13) & _
    "공휴일이 없으면 입력값 없이 [확인]단추, 취소하려면 [취소]단추를 클릭", Title:="공휴일 입력", Type:=3)
     
'   If 공휴일 = " false" Then
'        Exit Sub
'    ElseIf 공휴일 = "" Then
'        개수 = 0
'    Else
'        공휴일자 = Split(공휴일, ",")
'        개수 = UBound(공휴일자)
'    End If
'
         
    If 공휴일 = "" Then
         개수 = 0
    ElseIf 공휴일 = False Then
    
    Exit Sub

    Else
        공휴일자 = Split(공휴일, ",")
        개수 = UBound(공휴일자)
    End If
    
    
Application.DisplayAlerts = False


마지막일자 = Day(DateSerial(작성연, 작성월 + 1, 0))

    For i = 1 To 마지막일자

주말 = Weekday(DateSerial(작성연, 작성월, i))
날짜 = Format(작성연 & " - " & 작성월 & "-" & i, "yyyy-mm-dd")
요일 = Format(날짜, "aaa")


    If 개수 > -1 Then
    If 요일 = "토" Or 요일 = "일" Then

        Else

     For j = 0 To UBound(공휴일자)
        If 공휴일자(j) <> i Then
        Sheets("원본").Copy after:=Sheets(Sheets.Count)
        Range("h1") = DateSerial(작성연, 작성월, i)
        Sheets(Sheets.Count).Name = 작성월 & "월" & i & "일" & "(" & 요일 & ")"
    Else
    
        End If
        
    Next

End If

Else

    If 요일 = "토" Or 요일 = "일" Then
Else

    Sheets("h1") = DateSerial(작성연, 작성월, i)
    Sheets(Sheets.Count).Name = 작성월 & "월" & i & "일" & "(" & 요일 & ")"

    End If

End If

Next

Application.DisplayAlerts = False

For Each wks In Sheets
    If wks.Name Like "sheet*" Then wks.Delete

Next

Application.DisplayAlerts = True

ThisWorkbook.Save
ActiveWorkbook.Save
Sheets(1).Activate


Application.DisplayAlerts = True


End Sub
==============[우쭈맘님 글에 대한 답변입니다]==============

아래와 같이 수정해보세요. 

Sub 일일업무일지()
    Dim wst As Worksheet
    Dim rSoc As Range
    
    Dim 작성연 As Integer, 작성월 As Integer, 마지막일자 As Integer, 개수 As Integer
    Dim i As Integer, j As Integer
    Dim 날짜 As Date
    Dim 공휴일 As Variant
    Dim bCreate As Boolean

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With
    
    작성연 = Application.InputBox("연도를 입력하세요" & Chr(13) & _
                "작성을 취소하려면 [취소] 단추를 클릭하세요", Title:="연도 입력", Type:=1)
    If 작성연 = 0 Then GoTo Exit_Sub
    
    작성월 = Application.InputBox("월을 입력하세요" & Chr(13) & _
                "작성을 취소하려면 [취소]단추를 클릭하세요", Title:="월 입력", Type:=1)
    If 작성월 = 0 Then GoTo Exit_Sub
    
    공휴일 = Application.InputBox("주말을 제외하고 공휴일을 쉽표로 구분해서 입력하세요" & _
                "예로들어 1,7,20으로 입력." & Chr(13) & _
                "공휴일이 없으면 입력값 없이 [확인]단추, 취소하려면 [취소]단추를 클릭", Title:="공휴일 입력", Type:=3)

    If 공휴일 = "False" Then
        GoTo Exit_Sub
    Else
        공휴일 = Split(공휴일, ",")
        개수 = UBound(공휴일)
    End If

    For Each wst In Worksheets
        If wst.Name <> "원본" Then wst.Delete
    Next

    Set rSoc = Worksheets("원본").Range("A1:N11")
    마지막일자 = Day(DateSerial(작성연, 작성월 + 1, 0))
    
    For i = 1 To 마지막일자
        날짜 = DateSerial(작성연, 작성월, i)

        bCreate = False
        If Weekday(날짜) = 7 Or Weekday(날짜) = 1 Then  ' 주말제외(7-토요일,1-일요일)
        Else
            bCreate = True
            For j = 0 To 개수
                If 공휴일(j) = i Then                   ' 입력한 공휴일제외
                    bCreate = False
                    Exit For
                End If
            Next
        End If
        
        If bCreate Then
            With Worksheets.Add(after:=Worksheets(Worksheets.Count))
                rSoc.EntireColumn.Copy .Range("A1")
                With .Range("H1")
                    .NumberFormat = "yyyy-mm-dd"
                    .Value = 날짜
                    .MergeArea.HorizontalAlignment = xlCenter
                End With
                With .Range("C6")
                    .HorizontalAlignment = xlCenter
                    .NumberFormat = "(yyyy-mm-dd)"
                    .FormulaR1C1 = "=IF(WEEKDAY(R[-5]C[5])=1, R[-5]C[5]-2, IF(WEEKDAY(R[-5]C[5])=2, R[-5]C[5]-3, R[-5]C[5]-1))"
                End With
                With .Range("F11")
                    .HorizontalAlignment = xlLeft
                    .NumberFormat = "(mm월 dd일)"
                    .FormulaR1C1 = "=R[-5]C[-3]"
                End With
                With .Range("L11")
                    .HorizontalAlignment = xlLeft
                    .NumberFormat = "(mm월 dd일)"
                    .FormulaR1C1 = "=R[-10]C[-4]"
                End With
                .Name = Format(날짜, "m월d일(aaa)")
            End With
        End If
    Next

    rSoc.Parent.Activate
    ThisWorkbook.Save

Exit_Sub:
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub
 
[불량 게시물 신고]  
        
  

작성일 : 2019-05-29(09:59)
최종수정일 : 2019-05-29(09:59)
 


 ◎ 관련글

  제 목   작성자   날짜
일일업무일지 VBA 오류 질문 우쭈맘 2019-05-28
[RE]일일업무일지 VBA 오류 질문 참서리 2019-06-08
[RE]일일업무일지 VBA 오류 질문 dew 2019-05-29