2016-06-22 2 views
0

VBA에서 9 자리 숫자의 처음 세 개의 시퀀스 번호에 따라 파일을 저장하려고합니다. 숫자는 다음과 같습니다. 400-134004. 첫 번째 숫자 순서에 따라 세 가지 파일을 만들 필요가 있습니다. 파일 이름은 400, 401, 402입니다. 어떻게하면됩니까, 아니면 내 코드가 잘못 되었나요?지정된 숫자 시퀀스와 관련하여 다른 이름으로 저장 파일 만들기

Private Sub Worksheet_Change(ByVal Target As Range) 
     Dim String_1 As String 
     Dim String_2 As String 
     Dim String_3 As String 

     String_1 = "400" 
     String_2 = "401" 
     String_2 = "402" 

    If Not Range("A1").Value = "" And Not Range("B1").Value = "" And Not Range("C1").Value = "" Then 

    If Left(String_1, 3).Range("C1").Select Then 
     '400 = 312B 
    ActiveCell.Offset(-1, 0).Range("A1:C1").Select 
    Selection.Copy 
    Workbooks.Add 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = Fa 
    ActiveWorkbook.SaveAs Filename:="u:\CSV\Diepunch400.csv", FileFormat:=xlCSV, CreateBackup:=False 
    ActiveWorkbook.Save 
    ActiveWindow.Close (SaveChange = False) 
    Else 

    End If 

    If Left(String_2, 3).Range("C1").Select Then 
     '401 = 312HTG 
    ActiveCell.Offset(-1, 0).Range("A1:C1").Select 
    Selection.Copy 
    Workbooks.Add 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = Fa 
    ActiveWorkbook.SaveAs Filename:="u:\CSV\Diepunch401.csv", FileFormat:=xlCSV, CreateBackup:=False 
    ActiveWorkbook.Save 
    ActiveWindow.Close (SaveChange = False) 
    Else 

    End If 

     If Left(String_3, 3).Range("C1").Select Then 
     '402 = 312HTX 
    ActiveCell.Offset(-1, 0).Range("A1:C1").Select 
    Selection.Copy 
    Workbooks.Add 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = Fa 
    ActiveWorkbook.SaveAs Filename:="u:\CSV\Diepunch402.csv", FileFormat:=xlCSV, CreateBackup:=False 
    ActiveWorkbook.Save 
    ActiveWindow.Close (SaveChange = False) 
    Else 

    End If 




    Else 

    End If 

End Sub 
+1

하나의 눈부신 문제는이 라인이 아닌 올바른 구문은 다음과 같습니다. '왼쪽 (STRING_2, 3) .Range ("C1") Select' * (그리고 만약 * –

+1

'Left (String_1, 3) .Range ("C1"). 선택이해야 할 일이 불분명합니다. – Comintern

+1

또한,'Application.CutCopyMode = Fa'의'Fa'는 초기화되지 않은 변수이므로 0이 될 것입니다. 각각 1과 2 인'xlCopy' 나'xlCut'을 기대하기 때문에 오류도 발생합니다. – Comintern

답변

2

이 같은 것을보십시오 :

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim String_1 As String 
Dim String_2 As String 
Dim String_3 As String 

String_1 = "400" 
String_2 = "401" 
String_3 = "402" 

If Len(Range("A1").Value) > 0 And Len(Range("B1").Value) > 0 And Len(Range("C1").Value) > 0 Then 

    Dim sComp as String 
    sComp = Left(Range("C1"),3) 

    If sComp = String_1 or sComp = String_2 or sComp = String_3 Then 

     Range("A1:C1").Copy 
     Dim wbCopy as Workbook 
     Set wbCopy = Workbooks.Add 

     With wbCopy 
      .Sheets(1).Range("A1").PasteSpecial xlPasteValues 
      .SaveAs Filename:="u:\CSV\Diepunch" & sComp & ".csv", FileFormat:=xlCSV, CreateBackup:=False 
      .Close False 
     End With 

    End If 

End If 

End Sub 
+0

그게 효과가 있었고, 다른 파일을 만들기 위해 수정해야 할 것이지만,이 작품은 고맙습니다. –

관련 문제