ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1194|回复: 0

请教问题:下面的代码中那部分是写的代码,哪部分是录制的宏?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-19 22:33 | 显示全部楼层 |阅读模式
Sub OpenFile()
    fileToOpen = Application _
        .GetOpenFilename("Dat Files (*.dat), *.dat, Text Files (*.txt), *.txt")
    If fileToOpen = False Then
        GoTo MyEnd
    End If
   
    Open fileToOpen For Input As #1
    'find first empty line
    i = 9
    While IsEmpty(Worksheets("Sheet1").Cells(i, 2)) = False Or IsEmpty(Worksheets("Sheet1").Cells(i + 1, 2)) = False Or IsEmpty(Worksheets("Sheet1").Cells(i + 2, 2)) = False
        i = i + 1
    Wend
   
    If i <> 2 Then
        i = i + 2
    End If
   
    Worksheets("Sheet1").Cells(i, 2) = "Operator:"
    Worksheets("Sheet1").Cells(i, 5) = "Batch:"
    Worksheets("Sheet1").Cells(i, 8) = "Lot:"
   
    'Filename = Worksheets("Sheet1").Cells(1, 3) = Value
   
    Line Input #1, Data 'Read one line and puts it into the varible Data.
    While Left(Data, 8) <> "Operator"
        Line Input #1, Data
    Wend
    Worksheets("Sheet1").Cells(i, 3) = Right(Data, Len(Data) - 15)
   
    Line Input #1, Data
    Line Input #1, Data
    Line Input #1, Data
    Worksheets("Sheet1").Cells(i, 6) = Right(Data, Len(Data) - 15)
    Line Input #1, Data
    Worksheets("Sheet1").Cells(i, 9) = Right(Data, Len(Data) - 16)
   
    Line Input #1, Data
   
    If Left(Data, 5) = "Name1" Then
        Worksheets("Sheet1").Cells(i, 2) = Right(Data, Len(Data) - 7) + ":"
        Line Input #1, Data
        Worksheets("Sheet1").Cells(i, 5) = Right(Data, Len(Data) - 7) + ":"
        Line Input #1, Data
        Worksheets("Sheet1").Cells(i, 8) = Right(Data, Len(Data) - 7) + ":"
    End If
   
   
    containsT1 = False
    ' search for the first [Measurement 1]
    Line Input #1, Data
    While Left(Data, 1) <> "["
        Line Input #1, Data
        
        If EOF(1) Then
            Close #1
            GoTo MyEnd
        End If
        pos = InStr(1, Data, "Center Cross")
        If pos <> 0 Then
            containsT1 = True
        End If
        
    Wend
   
    i = i + 2
    Worksheets("Sheet1").Cells(i, 2) = "#"
    Worksheets("Sheet1").Cells(i, 3) = "EFL"
    Worksheets("Sheet1").Cells(i, 4) = "FFL"
   
    Worksheets("Sheet1").Cells(i, 5) = "S1"
    j = 5
    For k = 1 To 13
        Worksheets("Sheet1").Cells(i, j) = "S" & Str(k)
        j = j + 1
        If k <> 1 Or containsT1 Then
            Worksheets("Sheet1").Cells(i, j) = "T" & Str(k)
            j = j + 1
        End If
    Next
    colTrayFile = j
    Worksheets("Sheet1").Cells(i, colTrayFile) = "Tray File"
    colLensNumber = j + 1
    Worksheets("Sheet1").Cells(i, colLensNumber) = "Lens Number"
    colLensPosition = j + 2
    Worksheets("Sheet1").Cells(i, colLensPosition) = "Lens Position"
    colDefocus = j + 3
    Worksheets("Sheet1").Cells(i, colDefocus) = "Defocus"
    colAzimuth = j + 4
    Worksheets("Sheet1").Cells(i, colAzimuth) = "Azimuth"
    colAngle = j + 5
    Worksheets("Sheet1").Cells(i, colAngle) = "Angle"
    colAngleType = j + 6
    Worksheets("Sheet1").Cells(i, colAngleType) = "Angle Type"
    colCurvatureHeightNegative = j + 7
    Worksheets("Sheet1").Cells(i, colCurvatureHeightNegative) = "Curvature Height Negative"
    colCurvatureHeightPositive = j + 8
    Worksheets("Sheet1").Cells(i, colCurvatureHeightPositive) = "Curvature Height Positive"
    colDepthOfFocus = j + 9
    Worksheets("Sheet1").Cells(i, colDepthOfFocus) = "Depth of Focus"
    undefValue = "UNDEF"
        
    nr = 1
    NrOfCameras = 0
    NewFileType = True
    ffl = 0
    defocus = 0
    While Not EOF(1)
        Status = ""  'represents the status of the lens
        Line Input #1, Data
        
        While Left(Data, 3) <> "EFL"
        
            If Left(Data, 9) = "Tray Name" Then
                Worksheets("Sheet1").Cells(i + nr, colTrayFile) = Right(Data, Len(Data) - 10)
                Line Input #1, Data
                Worksheets("Sheet1").Cells(i + nr, colLensNumber) = Right(Data, Len(Data) - 7)
                Line Input #1, Data
                Worksheets("Sheet1").Cells(i + nr, colLensPosition) = Right(Data, Len(Data) - 9)
            End If
            
            If Left(Data, 6) = "Result" Then
                Status = Right(Data, Len(Data) - 7)
            End If
            
            If Left(Data, 3) = "FFL" Then
                ffl = Right(Data, Len(Data) - 4)
            End If
                        
            If Left(Data, 7) = "Defocus" Then
                defocus = Right(Data, Len(Data) - 8)
                Worksheets("Sheet1").Cells(i + nr, colDefocus) = defocus
            End If
            
            
            If Left(Data, 7) = "Azimuth" Then
                azimuth = Right(Data, Len(Data) - 8)
                Worksheets("Sheet1").Cells(i + nr, colAzimuth) = azimuth
                Line Input #1, Data
                Angle = Right(Data, Len(Data) - 6)
                Worksheets("Sheet1").Cells(i + nr, colAngle) = Angle
            End If
            
            If Left(Data, 10) = "Angle Type" Then
                Angle = Right(Data, 1)
                Worksheets("Sheet1").Cells(i + nr, colAngleType) = Angle
            End If
               
            sText = "Curvature Height Negative "
            If Left(Data, Len(sText)) = sText Then
                curvature = Right(Data, Len(Data) - Len(sText))
                Worksheets("Sheet1").Cells(i + nr, colCurvatureHeightNegative) = curvature
                Line Input #1, Data
                sText = "Curvature Height Positive "
                curvature = Right(Data, Len(Data) - Len(sText))
                Worksheets("Sheet1").Cells(i + nr, colCurvatureHeightPositive) = curvature
                Line Input #1, Data
                sText = "Depth of Focus "
                dof = Right(Data, Len(Data) - Len(sText))
                Worksheets("Sheet1").Cells(i + nr, colDepthOfFocus) = dof
            End If
            
            Line Input #1, Data
            
        Wend
        
               
        ' write the number and the status
        Worksheets("Sheet1").Cells(i + nr, 2) = Str(nr) & "   " & Status
        
        ' color the field depending on status
        Worksheets("Sheet1").Cells(i + nr, 2).Font.Bold = True
        If Status = "FAIL" Then
            Worksheets("Sheet1").Cells(i + nr, 2).Font.Color = RGB(255, 0, 0)
        Else
            If Status = "PASS" Then
                Worksheets("Sheet1").Cells(i + nr, 2).Font.Color = RGB(0, 255, 0)
            Else
                If Status = "THRESHOLD" Then
                    Worksheets("Sheet1").Cells(i + nr, 2).Font.Color = RGB(255, 255, 128)
                Else
                    If Status = "MISS" Then
                        Worksheets("Sheet1").Cells(i + nr, 2).Font.Color = RGB(0, 0, 255)
                    End If
                End If
            End If
        End If
            
        'write efl value
        Worksheets("Sheet1").Cells(i + nr, 3) = Right(Data, Len(Data) - 4)
        Worksheets("Sheet1").Cells(i + nr, 4) = ffl
        
        'write mtf values
        Line Input #1, Data
        col = 5
        While Len(Data) > 1
            st1 = 1
            While Mid(Data, st1, 1) <> " "
                st1 = st1 + 1
            Wend
            st1 = st1 + 1
            st = st1
            While Mid(Data, st, 1) <> " "
                st = st + 1
            Wend
            
            If col = 5 And Mid(Data, 1, 2) = "T2" Then
                NewFileType = False
            End If
            
            If NewFileType = False And col > 4 Then
                If Mid(Data, 1, 1) = "T" Then
                    Worksheets("Sheet1").Cells(i + nr, col + 1) = Mid(Data, st1, st - st1)
                Else
                    Worksheets("Sheet1").Cells(i + nr, col - 1) = Mid(Data, st1, st - st1)
                End If
            Else
                Worksheets("Sheet1").Cells(i + nr, col) = Mid(Data, st1, st - st1)
            End If
            
            If nr = 1 Then
                NrOfCameras = NrOfCameras + 1
            End If
            
            col = col + 1
            Line Input #1, Data
        Wend
        
        If Status = "MISS" Then
            For j = 3 To colDepthOfFocus
                Worksheets("Sheet1").Cells(i + nr, j) = undefValue
            Next
        End If
        
        
        While Not EOF(1) And Len(Data) < 2
            Line Input #1, Data
        Wend
        nr = nr + 1
    Wend
   
    'NrOfCameras = (NrOfCameras + 1) / 2
   
    Close #1
   
    '------------------------------------------------------------------'
    ' end reading from file
    '------------------------------------------------------------------'
        
    Worksheets("Sheet1").Cells(i + nr, 2) = "Avg"
    Worksheets("Sheet1").Cells(i + nr + 1, 2) = "Std. Deviation"
    Worksheets("Sheet1").Cells(i + nr + 2, 2) = "3 x Std. Deviation"
   
    Dim Avg As Double
    Dim Sum2 As Double
   
    For j = 3 To NrOfCameras + 4 Step 1
        'calculate average
        total = 0
        Sum = 0
        For k = 1 To nr - 1 Step 1
            Vall = Worksheets("Sheet1").Cells(i + k, j).Value
            If Vall <> undefValue Then
                total = total + 1
                Sum = Sum + Vall
            End If
        Next
        Avg = Sum / total
        Worksheets("Sheet1").Cells(i + nr, j) = Format(Avg, "0.00")
        
        'calculate standard deviation
        Dim tt As String
        
        Sum2 = 0
        total = 0
        For k = 1 To nr - 1 Step 1
            m = Worksheets("Sheet1").Cells(i + k, j).Value
            If m <> undefValue Then
                Sum2 = Sum2 + (m - Avg) * (m - Avg)
                tt = Format(Sum2, "0.000000000")
                total = total + 1
            End If
        Next
        If nr - 2 > 0 Then
            Sum2 = Sum2 / total
        Else
            Sum2 = 0
        End If
        
        'calculate difference
        Worksheets("Sheet1").Cells(i + nr + 1, j) = Format(Sqr(Sum2), "0.0000")
        Worksheets("Sheet1").Cells(i + nr + 2, j) = Format(3 * Sqr(Sum2), "0.0000")
    Next
        
   
   
MyEnd:
End Sub
Sub CalculateLinesCount()
    NLines = 20000
    For j = 9 To NLines Step 1
        c = Worksheets("Sheet1").Cells(j, 2).Value
        If c = "" Then
            c1 = Worksheets("Sheet1").Cells(j + 1, 2).Value
            c2 = Worksheets("Sheet1").Cells(j + 2, 2).Value
            c3 = Worksheets("Sheet1").Cells(j + 3, 2).Value
            If c1 = "" And c2 = "" And c3 = "" Then
                NLines = j
                GoTo MyEnd
            End If
        End If
    Next
MyEnd:
End Sub
Sub DeleteAll()
    CalculateLinesCount
    With Worksheets("Sheet1")
        .Range(.Cells(1, 2), Cells(NLines + 30, 50)).ClearContents
        .Range(.Cells(1, 2), Cells(NLines + 30, 50)).Font.Bold = False
        .Range(.Cells(1, 2), Cells(NLines + 30, 50)).Font.Color = RGB(0, 0, 0)
    End With
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-29 16:29 , Processed in 0.052341 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表