简体   繁体   English

Excel工作簿已关闭,但工作表仍处于活动状态?

[英]Excel workbook closing but worksheet staying active?

So, I have this script that I had running, but modified to sort data into different sheets based on an input box. 因此,我已经运行了该脚本,但已对其进行了修改,以根据输入框将数据分类到不同的工作表中。 It works, and does everything I want it to, but now, every time I run it, a new instance of Excel runs in the background. 它可以工作,并且可以执行我想要的一切,但是现在,每次我运行它时,都会在后台运行一个新的Excel实例。 As far as I can tell(and I don't really know much about this sort of thing), is that somehow the workbook is closing, but the worksheet is staying active. 据我所知(我对这种事情我不太了解)是,工作簿正在以某种方式关闭,但工作表仍处于活动状态。 I've been looking up stuff and reading for hours trying to figure this out, am I at least heading in the right direction?? 我一直在寻找东西,并且阅读了数小时才试图弄清楚这一点,我至少是朝着正确的方向前进了吗? This is a basic script inserted into a PC DMIS program(outside of Excel). 这是插入PC DMIS程序(Excel外部)的基本脚本。 I have the changes I made to achieve the sorting process(2 paragraphs) marked with "worksheet input": 我进行了一些更改以实现用“工作表输入”标记的排序过程(2个段落):

Sub Main 


'xl Declarations
Dim xlApp As Object
Dim xlWorkbooks As Object
Dim xlWorkbook As Object
Dim xlSheet As Object
Dim count As Integer
Dim xlWorksheets As String 
Dim xlWorksheet As String 

'pcdlrn declarations And Open ppg
Dim App As Object
Set App = CreateObject("PCDLRN.Application")
Dim Part As Object
Set Part = App.ActivePartProgram
Dim Cmds As Object
Set Cmds = Part.Commands
Dim Cmd As Object
Dim DCmd As Object
Dim DcmdID As Object
Dim fs As Object 
Dim DimID As String 
Dim ReportDim As String
Dim CheckDim As String 

Dim Cavity As String                                              ‘start worksheet input 1
Dim myValue As String 
Dim message, title, defaultValue As String 
message = "Cavity" 
title = "cavity" 
defaultValue = "1" 
myValue = InputBox(message, title, defaultValue)
If myValue = "" Then myValue = defaultValue       ‘end worksheet input 1

'Check To see If results file exists
FilePath = "C:\Excel PC DMIS\3K170 B2A\"
Set fs = CreateObject("Scripting.FileSystemObject") 
ResFileExists = fs.fileexists(FilePath & Part.partname & ".xls")

'Open Excel And Base form
Set xlApp = CreateObject("Excel.Application")
Set xlWorkbooks = xlapp.Workbooks
If ResFileExists = False Then
    TempFilename = FilePath & "Loop Template.xls"
Else
    TempFilename = FilePath & Part.partname & ".xls"
End If

Set xlApp = CreateObject("Excel.Application")

Set xlWorkbook = xlWorkbooks.Open(TempFilename)
Set xlSheet = xlWorkbook.Worksheets("Sheet1")
Set xlsheets = xlworkbook.worksheets                   ‘start worksheet input 2

'Set xlWorksheets = xlapp.Worksheet
'Set xlWorksheets = xlapp.Worksheets
Dim sh As Worksheet, flg As Boolean
For Each sh In xlworkbook.worksheets
     If sh.Name = myValue Then flg = True: Exit For 
Next

If flg = False Then 
   xlsheets.Add.Name = myValue
End If

Set xlSheet = xlWorkbook.Worksheets(myValue)       ‘end worksheet input 2


If ResFileExists = False Then
    RCount=6
    CCount=3
    xlSheet.Range("B1").Value = Part.PartName
    xlSheet.Range("A6").Value = Date() & " " & Time()
    xlSheet.Range("B6").Value = "Inspector Name"
    For Each Cmd In Cmds
        'Eliminate DATDEF's
        If Cmd.Type <> 1299 Then
            'Do Dimensions
            If Cmd.IsDimension Then
                If Cmd.Type = DIMENSION_START_LOCATION Or Cmd.Type = DIMENSION_TRUE_START_POSITION Then
                    Set DcmdID = Cmd.DimensionCommand
                      DimID = DcmdID.ID
                      ReportDim = Cmd.GetText ( OUTPUT_TYPE, 0)
                End If
                If Cmd.Type <> DIMENSION_START_LOCATION And Cmd.Type <> DIMENSION_END_LOCATION And _
                    Cmd.Type <> DIMENSION_TRUE_START_POSITION And Cmd.Type <> DIMENSION_TRUE_END_POSITION Then
                    Set DCmd = Cmd.DimensionCommand
                    CheckDim = Cmd.GetText ( OUTPUT_TYPE, 0)
                    If CheckDim <> "" Then
                            ReportDim = CheckDim
                    End If
                    If ReportDim = "BOTH" Or ReportDim = "REPORT" Then
                        If DCmd.ID = "" Then
                                xlSheet.Cells(5,CCount).Value = DimID & "."& DCmd.AxisLetter
                        Else
                                xlSheet.Cells(5,CCount).Value = DCmd.ID & "." & "M"
                        End If
                                xlSheet.Cells(2,CCount).Value = DCmd.Nominal
                                xlSheet.Cells(3,CCount).Value = DCmd.Plus
                                xlSheet.Cells(4,CCount).Value = DCmd.Minus
                                'Measured Or Deviation With check For True Position
                    If DCmd.AxisLetter <> "TP" Then
                                  xlSheet.Cells(6,CCount).Value = DCmd.Measured
                Else
                                  xlSheet.Cells(6,CCount).Value = DCmd.Deviation
                End If
                                'Add Min/Max For Profile dimensions
                                If Cmd.Type = 1118 Or Cmd.Type = 1105 Then
                                  CCount=CCount+1
                                  xlSheet.Cells(5,CCount).Value = DCmd.ID & "." & "Max"
                                  xlSheet.Cells(2,CCount).Value = DCmd.Nominal
                                  xlSheet.Cells(3,CCount).Value = DCmd.Plus
                                  xlSheet.Cells(4,CCount).Value = DCmd.Minus
                                  xlSheet.Cells(6,CCount).Value = DCmd.Max
                                  CCount=CCount+1
                                  xlSheet.Cells(5,CCount).Value = DCmd.ID & "." & "Min"
                                  xlSheet.Cells(2,CCount).Value = DCmd.Nominal
                                  xlSheet.Cells(3,CCount).Value = DCmd.Plus
                                  xlSheet.Cells(4,CCount).Value = DCmd.Minus
                                  xlSheet.Cells(6,CCount).Value = DCmd.Min
                                End If
                                CCount=CCount+1
                    End If
                End If
            End If
            'Do GDT
            If Cmd.Type = 184 Then
                  ReportDim = Cmd.GetText ( OUTPUT_TYPE, 0)
                  If ReportDim = "BOTH" Or ReportDim = "REPORT" Then
                        xlSheet.Cells(5,CCount).Value = Cmd.GetText (ID, 0) & "." & "FCF"
                        xlSheet.Cells(2,CCount).Value = "0"
                        xlSheet.Cells(3,CCount).Value = Cmd.GetText (LINE2_PLUSTOL, 1)
                        xlSheet.Cells(4,CCount).Value = "0"
                        xlSheet.Cells(6,CCount).Value = Cmd.GetText (LINE2_DEV, 1)
                        CCount=CCount+1
                  End If
            End If
        End If
    Next Cmd


Else

'Find first Open column.
RCount=6
Found=0
Do Until Found = 1
RCount = RCount + 1
If xlSheet.Cells(RCount,1).Value = "" Then
Found=1
End If
Loop

xlSheet.Cells(RCount,1).Value = Date() & " " & Time()
xlSheet.Cells(RCount,2).Value= "Inspector Name"

'Fill In measured data
CCount = 3
    For Each Cmd In Cmds
        'Eliminate DATDEF's
        If Cmd.Type <> 1299 Then
            'Do Dimensions
            If Cmd.IsDimension Then
                If Cmd.Type = DIMENSION_START_LOCATION Or Cmd.Type = DIMENSION_TRUE_START_POSITION Then
                    Set DcmdID = Cmd.DimensionCommand
                      DimID = DcmdID.ID
                      ReportDim = Cmd.GetText ( OUTPUT_TYPE, 0)
                End If
                If Cmd.Type <> DIMENSION_START_LOCATION And Cmd.Type <> DIMENSION_END_LOCATION And _
                    Cmd.Type <> DIMENSION_TRUE_START_POSITION And Cmd.Type <> DIMENSION_TRUE_END_POSITION Then
                    Set DCmd = Cmd.DimensionCommand
                    CheckDim = Cmd.GetText ( OUTPUT_TYPE, 0)
                    If CheckDim <> "" Then
                            ReportDim = CheckDim
                    End If
                    If ReportDim = "BOTH" Or ReportDim = "REPORT" Then
                                'Measured Or Deviation With check For True Position
                            If DCmd.AxisLetter <> "TP" Then
                                  xlSheet.Cells(RCount,CCount).Value = DCmd.Measured
                Else
                                  xlSheet.Cells(RCount,CCount).Value = DCmd.Deviation
                End If
                                'Add Min/Max For Profile dimensions
                                If Cmd.Type = 1118 Or Cmd.Type = 1105 Then
                                  CCount=CCount+1
                                  xlSheet.Cells(RCount,CCount).Value = DCmd.Max
                                  CCount=CCount+1
                                  xlSheet.Cells(RCount,CCount).Value = DCmd.Min
                                End If
                       Ccount=Ccount+1
                    End If
                End If
            End If
            'Do GDT
            If Cmd.Type = 184 Then
                  ReportDim = Cmd.GetText ( OUTPUT_TYPE, 0)
                  If ReportDim = "BOTH" Or ReportDim = "REPORT" Then
                        xlSheet.Cells(RCount,CCount).Value = Cmd.GetText (ID, 0) & "." & "FCF"
                        xlSheet.Cells(RCount,CCount).Value = "0"
                        xlSheet.Cells(RCount,CCount).Value = Cmd.GetText (LINE2_PLUSTOL, 1)
                        xlSheet.Cells(RCount,CCount).Value = "0"
                        xlSheet.Cells(RCount,CCount).Value = Cmd.GetText (LINE2_DEV, 1)
                        CCount=CCount+1
                  End If
            End If
        End If
    Next Cmd
End If


'Save And Cleanup
Set xlSheet = Nothing 
SaveName = FilePath & Part.partname & ".xls"
If ResFileExists = False Then
xlWorkBook.SaveAs SaveName
Else
xlWorkBook.Save
End If
xlWorkbook.Close
Set xlWorkbook = Nothing 
xlWorkbooks.Close 
Set xlWorkbooks = Nothing 
xlApp.Quit 
Set xlApp = Nothing

LabelEnd:

End Sub

Since ... 由于...

Set xlApp = CreateObject("Excel.Application")

will create a new instance of Excel, you can first check to see if an Excel instance has already been established with the following code. 将创建一个新的Excel实例,您可以首先检查是否已使用以下代码建立Excel实例。

On Error Resume Next
Set xlApp = GetObject("","Excel.Application")
If Err.Number <> 0 Then
    'No instance exists, create one
    Set xlApp = CreateObject("Excel.Application")
End If
Err.Clear

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM