2014-04-01 6 views
0

를 사용하여 엑셀 2013에서 다른 탭에 데이터를로드 데이터는 클릭으로 스프레드 시트의 다른 탭에 채워집니다. 엑셀 2013으로 이동할 때까지는 Excel 2010 이상에서 매우 잘 작동하고있었습니다.수없는 우리가 하나 개의 오래 된 프로젝트/우리가 어디 엑셀 "버튼"으로의 수출이 해당 응용 프로그램에서 <strong>Visual Basic의 6.0</strong></p> <p>구축했다 응용 프로그램이 내 조직에서 VB6

문제 : excel 2013에서는 2 개의 탭으로 내보내려면 데이터가 필요하지만 1 탭에서만 제공됩니다. 패키지 및 배포 마법사와 모든 가능한 도움말을 사용해 보았습니다. 지금까지 운이 없다. 질문이 있거나 충분히 명확하지 않은 경우 알려주십시오. 제 코드를 찾으십시오.

Dim uprev As Integer 
Dim xlApp As Excel.Application 
Dim xlBook As Excel.Workbook 
Dim xlSheet As Excel.Worksheet 
Dim xlsheet2 As Excel.Worksheet 
Dim ExcelWasNotRunning As Boolean ' Flag for final release. 
Dim n As Integer 
Dim n1 As Integer 
Dim n2 As Integer 
Dim i As Integer 
Dim lastrevdate As String 
Dim lastrevrow As Integer 
Dim lastrow As Integer 
Dim previouspcno As Integer 
Dim xlcol As String 
Dim j As Integer 
Dim k As Integer 

Dim dc As Adodc 
Dim mrc As Recordset 

Dim qpa As New QPArray 
Dim Found As Long 
Dim StartInd As Long 
Dim bFound As Boolean 
Dim crlf As String 

On Error GoTo errorhandler1 

crlf = Chr(13) & Chr(10) 


ReDim qs(10) As String 
ReDim q(10) As Integer 
ReDim hdr(15) As Integer 
ReDim rev(10, 0) As String 
ReDim part(0) As String 
ReDim sl(nof) As String 
ReDim cmpsql2(0) As String 
ReDim deletedfromsql(3, 0) As String 
Dim doThis As Integer 
Dim iReturn As Integer 

Dim revlev As String 
Dim Date_Engr As String 
Dim Date_Checker As String 



'On Error Resume Next ' Defer error trapping. 
'Removed, not checking to see if excel is open properly 
'Bert - 6/5/07 
'Set xlApp = GetObject(, "Excel.Application") 
'If Err.Number <> 0 Then 
' ExcelWasNotRunning = True 
'Else 
' MsgBox ("Please Close Excel before continuing") 
' Exit Sub 
'End If 
Err.Clear ' Clear Err object in case error occurred. 

iReturn = MsgBox("Please Close ALL Excel applications before continuing", vbOKOnly, "WARNING") 

ExcelWasNotRunning = True 


'fixwidth 

Screen.MousePointer = vbHourglass 

'DetectExcel 



Set xlApp = Excel.Application 

'path(8) = "C:\SwitchGear\Files1\eng_prod\Jobs\cs01157\medt\" 
If Dir(Defaults.medt & "\" & cs & sos & "mbom.xls", vbNormal) <> "" Then 

    mbomflag = 1 


    FileCopy Defaults.medt & "\" & cs & sos & "mbom.xls", Defaults.medt & "\" & cs & sos & "mbom.bak" 
    Set xlBook = GetObject(Defaults.medt & "\" & cs & sos & "mbom.xls") 
    Set xlSheet = xlBook.Worksheets(1) 
    Set xlsheet2 = xlBook.Worksheets(2) 

    Do 
     qs(1) = "1. Do not list changes on rev sheet" & crlf 
     qs(1) = qs(1) & "2. list changes on rev sheet but do not increase rev level" & crlf 
     qs(1) = qs(1) & "3. list changes on rev sheet and increase rev level" 
     qs(0) = InputBox(qs(1)) 
     If qs(0) = "" Then Exit Sub 
    Loop Until qs(0) > "0" And qs(0) < "4" 



    If qs(0) = "3" Then ' up the revision 
     uprev = 2 
     revlev = xlsheet2.Cells(5, 3) + 1 
     Date_Engr = Date 
     Date_Checker = Date 
    Else 
     uprev = 1 
     revlev = xlsheet2.Cells(5, 3) 
     Date_Engr = xlSheet.Cells(16, 2) ' get the old rev number 
     Date_Checker = xlSheet.Cells(16, 3) 

    End If 

    lastrow = xlSheet.Cells.Range("E20").End(xlDown).Row 

    ReDim cmpxl2(0) As String 
    ReDim cmpxl3(0) As String 
    ReDim cmpxl4(0) As String 
    n = 0 
    For i = 20 To lastrow 
     If xlSheet.Cells(i, 2) <> "" Then 
      n = n + 1 
      ReDim Preserve cmpxl2(n) As String 
      ReDim Preserve cmpxl3(n) As String 
      ReDim Preserve cmpxl4(n) As String 

      cmpxl2(n) = xlSheet.Cells(i, 2) & " " & Format(i) 
      cmpxl3(n) = xlSheet.Cells(i, 3) 
      cmpxl4(n) = xlSheet.Cells(i, 4) 
     End If 
    Next i 
    n1records = Adodc1.Recordset.RecordCount 

    'If n > n1records Then 'it's been deleted from sql so find the part and add to xl revision sheet 
     n1 = 0 
     ReDim cmpsql2(n1records) As String 
     With Adodc1.Recordset 
      For i = 1 To n1records 
       If i = 1 Then 
        Adodc1.Recordset.MoveFirst 
       Else 
        Adodc1.Recordset.MoveNext 
       End If 
       cmpsql2(i) = !pcno 
      Next i 
     End With 
     For i = 1 To n 
      bFound = qpa.Find(cmpsql2(), Left$(cmpxl2(i), 4), Found, , 1) 
      If bFound = False Then 
       q(1) = Val(Mid$(cmpxl2(i), 6)) 
       n1 = n1 + 1 
       ReDim Preserve deletedfromsql(3, n1) 
       deletedfromsql(1, n1) = xlSheet.Cells(q(1), 2) 
       deletedfromsql(2, n1) = xlSheet.Cells(q(1), 3) 
       deletedfromsql(3, n1) = xlSheet.Cells(q(1), 4) 

      End If 

     Next i 

    'End If 

    n = 0 
    Do 
     n = n + 1 
     If xlsheet2.Cells(n + 13, 1) > " " Then 
      ReDim Preserve rev(10, n) 
      ReDim Preserve part(n) 
      'part(n) = xlSheet.Cells(n + 13, 3) & "*" & xlSheet.Cells(n + 13, 1) 
      If xlsheet2.Cells(n + 13, > CDate(lastrevdate) Then 
       lastrevdate = xlsheet2.Cells(n + 13, 8-) 
      End If 
      For i = 1 To 10 
       rev(i, n) = xlsheet2.Cells(n + 13, i) 
      Next i 
     Else 
      Exit Do 
     End If 
    Loop 
    If engr = "" Then 
     engr = xlSheet.Cells(14, 2) 
     chcked = xlSheet.Cells(14, 3) 
    End If 
Else 
    mbomflag = 0 
    revlev = 0 
    If engr = "" Then 
     engr = UCase$(InputBox("Enter Mechanical drafter's Initials:", "Enter Initials")) 
     'If engr = "" Then Exit Sub 
     chcked = UCase$(InputBox("Enter Checker's Initials:", "Enter Initials")) 
     'If chcked = "" Then Exit Sub 
    End If 
End If 

'Set xlBook = GetObject(path(2) & "vb\sql\ebomtemplate.xls") 
Set xlBook = GetObject(Defaults.ApplicationPath & "\mbomTemplate.xls") 
Set xlSheet = xlBook.Worksheets(1) 
Set xlsheet2 = xlBook.Worksheets(2) 



If revlev = 0 Then 
    xlsheet2.Cells(14, 8= Date 
End If 
'xlSheet.PageSetup.Zoom = 50 
If UBound(rev, 2) > 0 Then 
    lastrevrow = UBound(rev, 2) + 13 
    For i = 14 To UBound(rev, 2) + 13 
     For j = 1 To 10 
      xlsheet2.Cells(i, j) = rev(j, i - 13) 
     Next j 
    Next i 
Else 
    lastrevrow = 13 
End If 


'If uprev = 1 Then 

' xlBook.Application.Visible = True 
' xlBook.Parent.Windows(2).Visible = True 
' xlBook.Parent.Windows(2).Activate 
' xlSheet.Activate 
    'bFound = bringwindowtotop(hwnd) 
    'xlBook.Sheets(1).Select 
    'ActiveSheet.Visible = True 
    'xlBook.Application.DoubleClick 
'Else 
    xlBook.Application.Visible = True 
    xlBook.Parent.Windows(1).Visible = True 
    xlBook.Parent.Windows(1).Activate 
    xlSheet.Activate 
    'DetectExcel 
    'bFound = bringwindowtotop(hwnd) 

'End If 

'DetectVB 
'Found = apiShowWindow(hwnd, SW_SHOWMINIMIZED) 


'DetectExcel 
'Found = apiShowWindow(hwnd, SW_SHOWMAXIMIZED) 
Me.Visible = False 



Screen.MousePointer = vbDefault 
'If uprev = 1 Then 
' xlBook.NewWindow.Activate 
' With xlBook.NewWindow 
'  .ActiveSheet = 2 
'  .Zoom = 50 
' End With 
'End If 
'xlBook.Application.Visible = True 
'xlBook.Parent.Windows(1).Visible = True 
'xlSheet.Activate 

'qs(1) = "03040609121314151617181920212223242526272829303132333435" 


cs = UCase$(cs) 
sos = UCase$(sos) 

xlSheet.Cells(10, 2) = cs & Left$(sos, 5) 
If Val(framestr(0, 0, 15)) < 8 Then qs(1) = "2" Else qs(1) = "4" 
xlSheet.Cells(10, 3) = "-" & Mid$(sos, 6, 1) & Right$(sos, 1) & "B" & qs(1) & "004" 
xlSheet.Cells(12, 2) = Right$(sos, 3) 
xlSheet.Cells(10, 6) = framestr(0, 0, 3) 


'xlSheet.Cells(12, 3) = "0" 
'xlSheet.Cells(16, 2) = Date 
'xlSheet.Cells(16, 3) = Date 

xlSheet.Cells(10, 4) = framestr(0, 0, 658) 'sold to 
xlSheet.Cells(11, 4) = framestr(0, 0, 657) 
xlSheet.Cells(12, 4) = framestr(0, 0, 656) 
xlSheet.Cells(14, 2) = engr 
xlSheet.Cells(14, 3) = chcked 
xlSheet.Cells(14, 4) = framestr(0, 0, 655) 'for 
xlSheet.Cells(14, 6) = framestr(0, 0, 661) 'purchase order 
xlSheet.Cells(15, 4) = framestr(0, 0, 654) 
xlSheet.Cells(16, 4) = framestr(0, 0, 653) 

xlcol = "L M N O P Q R S T U V W X Y Z AAABACADAEAFAGAHAIAJ" 

qs(1) = "L12:" & Trim$(Mid$(xlcol, (nof + 1) * 2 - 1, 2)) & "16" 
xlSheet.Cells.Range(qs(1)).Value = " " 


For i = 1 To nof 
    xlSheet.Cells(19, i + 11) = i 
Next i 

For i = 1 To nof + 1 
    qs(1) = Trim$(Mid$(xlcol, i * 2 - 1, 2)) & "12:" & Trim$(Mid$(xlcol, i * 2 - 1, 2)) & "16" 
    With xlSheet.Cells.Range(qs(1)).Borders(xlLeft) 
     .LineStyle = xlContinuous 
     .Weight = xlMedium 
    End With 
Next i 

qs(1) = Chr(76) & "12:" & Trim$(Mid$(xlcol, nof * 2 - 1, 2)) & "12" 
With xlSheet.Cells.Range(qs(1)).Borders(xlTop) 
    '.LineStyle = xlContinuous 
    .Weight = xlMedium 
End With 

qs(1) = Chr(76) & "16:" & Trim$(Mid$(xlcol, nof * 2 - 1, 2)) & "16" 
With xlSheet.Cells.Range(qs(1)).Borders(xlBottom) 
    '.LineStyle = xlContinuous 
    .Weight 

VB 6은 구식이며 왜 VB.NET으로 이동하지 않는지 잘 모르겠습니다. 아무도 도와 줄 수 있다면 정말 고맙겠습니다. 미리 감사드립니다 :)

+0

엄청난 양의 코드를 간단한 테스트 케이스로 추출 할 수 있습니까? 거기를 통과해야 할 것이 많습니다 (일부는 전혀 작동하지 않는 것처럼 보입니다) –

답변

0

당신의 문제는 구식 VB6과 아무 관련이 없습니다. 문제는이 코드가 실행 취소 할 수 없다는 것입니다. 이 코드가 실제 실행 코드를 기반으로 해킹 된 것일뿐입니다. 나는이 코드가 대략 일 것임을 토대로 몇 가지 추측을 할 것입니다. 실제로는처럼 보입니다. 그러나 실제 코드를 제공하는 것이 좋습니다.

"탭"으로, "워크 시트"를 의미합니다. 나는 그들이 "Sheet1"과 "Sheet2"라고 추측하고있다. 기본적으로 "Sheet1"만 실제로 다시 채워집니다. "Sheet2"는 이전처럼 보입니다.

난 당신이 줄에 중단 점을 넣어 제안 :

Set xlsheet2 = xlBook.Worksheets(2) 

는 xlsheet2.Cells (14,8)이 그 워크 시트에 볼 것으로 예상 날짜로 평가되는지 확인하십시오.

이 줄을 단계별로 실행 한 후에는 xlsheet2이 실제로 예상 한 워크 시트를 가리키는 지 확인하십시오. 또한 xlsheet2.Cells (x, y)를 읽거나 쓰는 모든 줄에 중단 점을 넣고 평가하고 sheet2를보고 읽거나 다시 쓰는 값이 올바른지 확인합니다.