【问题标题】:Excel VBA Add strings to a list, and sort alphabetically and numericallyExcel VBA 将字符串添加到列表中,并按字母和数字排序
【发布时间】:2015-06-03 21:04:33
【问题描述】:

这是我正在进行的最新项目的目标。在文本文件中,有不同工具的信息。

  1. 解析文本文件并提取数字和字符串。 DONE。虽然在最终构建中,我需要通过剪贴板进行解析。

  2. 将这两项放入某种列表中。我试图创建一个动态多维数组,所以左边是工具编号,右边是工具路径名称。我无法让数组工作,所以我尝试了集合。集合的问题是没有排序功能,这是我需要的。我还了解了字典,这引发了我可能遗漏了一些我可以使用的东西的想法。这三个是唯一可用的吗?

  3. 使用一个列表来确定应该使用#2 中的哪个项目并确定它在列表中的位置。然后使用这些信息做一些任务。

  4. 使用#3 中的项目并将其从#2 列表中删除。

  5. 重复目标 2-4,直到删除所有项目。

所以这适用于 CNC 加工,在保存刀具路径时。通常,用户会组织工具应该首先使用的顺序,其次是等等,但我想自动完成所有这些。我知道如何使用 VBA 导航菜单,我只需要弄清楚如何组织信息以便 Excel 可以完成所有工作。

我对第 3 步的理论是在主列表中使用一个集合,并从 CorrectOrder 集合中的一个术语中搜索该集合。因此,如果它在主列表中找到它,我会采取行动。如果不是,它将继续沿着 CorrectOrder 集合。

所以基本上,我需要关于我应该使用什么的想法:集合、数组、字典或其他东西。

【问题讨论】:

  • 几个注意事项:1) 这个问题你可能不会走得太远,因为它没有代码。您可能会获得一系列 cmets(包括我的),但您会通过代码或图片或示例做得更好。 2) 没有默认的Sort,而是others have provided code that will do3) 认真考虑在没有 VBA 的情况下在“普通”Excel 中执行您的步骤。 Excel 是目前最好的多维数组之一,它可以排序、计算和所有其他有用的东西。如果需要,您可以从那里自动化 Excel 或移植到 VBA。
  • 我同意 Excel 是最好的数组。我可能应该只使用 Excel 并在完成后删除数据。而且我正在使用 Excel VBA,所以我已经可以轻松地处理 Excel 数据了。

标签: arrays excel vba sorting


【解决方案1】:

感谢 Byron,我决定使用 Excel 作为列表方法并进行排序。我避免使用 Excel 工作表的原因是因为我想减少工作表上的信息量并只使用临时列表。但是使用 Excel 来完成它的工作要容易得多,也更友好。这是读取文本文件、提取我需要的内容并对其进行排序的代码。另一个 Sub 使用另一个文本文件中的列表来定义列表中的哪个项目排在第一位,然后排在第二位,依此类推。

Sub AUTOTOOLPATHretrieve()
Dim textline As String, ToolNumber As String, Comments As String, i As Long, GreenCount As Long, RoBCount As Long, GreenTools As String, RoBTools As String, GreenTool As Boolean, RoBTool As Boolean

GreenCount = 0
RoBCount = 0
GreenTools = ""
RoBTools = ""
GreenTool = False
RoBTool = False

For X = 1 To 8
Range("I" & X) = " "
Next
Range("J31:J33").ClearContents
Range("Z1:AA50").ClearContents
Open "V:\CNC DEPT\ART CAM\WILL B\WILL PROGRAMS\AUTOTOOLPATH.txt" For Input As #1
On Error Resume Next
i = 0
SAVEDVAR = 0
Do Until EOF(1)
Line Input #1, textline
Debug.Print (textline)

'CHECK LINE FOR ":" AND EXTRACT THAT LINE
Select Case Mid(textline, 1, (InStr(1, textline, ":")) - 1)
    Case "Tool"
        Debug.Print ("CONTAINS TOOL")
        ToolNumber = Mid(textline, 22, 2)
        Select Case True
            Case Mid(ToolNumber, 2, 1) <> "]"
                ToolNumber = Mid(ToolNumber, 2)
                Range("B2").Value = "GREEN"
                GreenCount = GreenCount + 1
                GreenTool = True
                Call GREENSTYLE
            Case Mid(ToolNumber, 2, 1) = "]"
                ToolNumber = Replace(ToolNumber, "]", "")
                Range("B2").Value = "RED or BLUE"
                RoBCount = RoBCount + 1
                RoBTool = True
                Call RoBSTYLE
        End Select
        Select Case ToolNumber
            Case 5
                Range("J31") = Mid(textline, 25, 6)
            Case 6
                Range("J32") = Mid(textline, 25, 6)
            Case 7
                Range("J33") = Mid(textline, 25, 6)
        End Select

        Range("I" & ToolNumber) = ToolNumber

    Case "Comments"
    i = i + 1
        Debug.Print ("CONTAINS COMMENTS")
        Comments = Mid(textline, 21)
        Range("AA" & i).Value = ToolNumber & " " & Comments

        Select Case True
        Case GreenTool = True
                GreenTools = GreenTools & vbNewLine & ToolNumber & " " & Comments
                GreenTool = False
        Case RoBTool = True
                RoBTools = RoBTools & vbNewLine & ToolNumber & " " & Comments
                RoBTool = False
        End Select

    Case "Machining Time"
    Select Case i
        Case Is = 0
    Debug.Print ("CONTAINS MACHINING TIME")
        cb = Mid(textline, 21)
          Select Case cb
          Case Left(cb, 2) = 0
Range("E37") = Mid(cb, 4, 2)
Range("F37") = Mid(cb, 7)
          Case Else
Range("E37") = Mid(cb, 4, 2) + (Left(cb, 2) * 60)
Range("F37") = Mid(cb, 7)
          End Select
          End Select
End Select

Select Case True
Case i = 0 And Left(textline, 3) = "V:\"
    Debug.Print (Mid(textline, 21, 27))
    Debug.Print (Mid(textline, 18, 11))
    Debug.Print (Mid(textline, 35, 20))
    Debug.Print (Mid(textline, 21, 13))
    Select Case True
        Case Mid(textline, 21, 27) = "PRODUCTION PROGRAMS 9-05-07"
            Range("B33") = "PRODUCTION PROGRAMS"
        Case Mid(textline, 18, 11) = "2_Customers"
            Range("B33") = "CUSTOMER FILE"
        Case Mid(textline, 35, 20) = "REPLACEMENT PROGRAMS"
            Range("B33") = "REPLACEMENT PROGRAMS"
        Case Mid(textline, 21, 13) = "CUSTOM SHEETS"
            Range("B33") = "CUSTOM SHEETS"
    End Select
    SAVEDVAR = 1
End Select

Select Case True
Case i > 0 And SAVEDVAR = 0
            MsgBox "NOTICE: File has not been saved. Please save the current ArtCam file to continue.", vbOKOnly
            Close #1
            Exit Sub
End Select
Loop
Close #1

    Select Case True
    Case GreenCount <> 0 And RoBCount <> 0
        Select Case True
            Case GreenCount > RoBCount
                MsgBox "Error: Red and Blue machine tools are used in this program! The tools are: " & RoBTools & vbNewLine & "Fix and try again.", vbExclamation
                Exit Sub
            Case GreenCount < RoBCount
                MsgBox "Error: Green machine tools are used in this program! The tools are: " & GreenTools & vbNewLine & "Fix and try again.", vbExclamation
                Exit Sub
        End Select
End Select

Sleep (100)
Range("AA1:AA50").SORT _
Key1:=Range("AA1"), Order1:=xlAscending
Call AUTOTOOLPATHcompare
End Sub
Sub AUTOTOOLPATHcompare()
Dim textline As String, n As Long
n = 1
Range("Z1:Z50").ClearContents
Open "V:\CNC DEPT\ART CAM\WILL B\WILL PROGRAMS\AUTOTOOLPATHorder.txt" For Input As #1
Do Until EOF(1)
Line Input #1, textline
Debug.Print (textline)
For X = 1 To 50
Select Case Range("AA" & X)
    Case Is <> ""
Select Case textline
Case Is = Range("AA" & X)
Range("Z" & X) = n
Debug.Print (n)
n = n + 1
End Select
End Select
Next
Loop
Close #1
End Sub

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2014-10-08
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多