我正在尝试创建代码来检查名称列。我想将文件分类为三类(名称分别在AG,HP,QZ之间)。
在保存文件之前,我想出了一个案例说明是正确的方法,但是不确定是否需要利用instr函数或类似的东西。
这是我目前如何设置的一个粗略示例(注释了case语句)。
Dim BASEPATH_1 As String, BASEPATH_2 As String, BASEPATH_3 As String
BASEPATH_1 = "C:\Users\A-G\"
BASEPATH_2 = "C:\Users\H-P\"
BASEPATH_3 = "C:\Users\Q-Z\"
Select Case wb.Cells(i, 8)
'Case i.value is betwen "A-G"
wb.SaveCopyAs BASEPATH_1 & _
ValidFileName(Login & "_" & Last & "_PrePlanning File.xlsx")
'Case i.value is betwen "H-P"
wb.SaveCopyAs BASEPATH_2 & _
ValidFileName(Login & "_" & Last & "_PrePlanning File.xlsx")
'Case i.value is betwen "Q-Z"
wb.SaveCopyAs BASEPATH_3 & _
ValidFileName(Login & "_" & Last & "_PrePlanning File.xlsx")
Case Else
End Select
Run Code Online (Sandbox Code Playgroud)
完整代码:
Sub Main()
Dim wb As Workbook
Dim Data, Last, Login, lvl2mgr
Dim i As Long, j As Long, k As Long, a As Long
Dim Dest As Range
Dim BASEPATH1 As String, BASEPATH2 As String, BASEPATH3 As String, strNewPath As String
BASEPATH1 = "C:\A-G"
BASEPATH2 = "C:\H-P"
BASEPATH3 = "C:\Q-Z"
Set wb = Workbooks("Preplanning_Template.xlsx")
Set Dest = wb.Sheets("Manager File").Range("A3")
With ThisWorkbook.Sheets("Planning File")
Data = .Range("BP2", .Range("A" & Rows.Count).End(xlUp))
End With
wb.Activate
Call Ludicrous(True)
For i = 1 To UBound(Data)
If Data(i, 7) <> Login Then
If i > 1 Then
Dest.Select
wb.Sheets(1).Cells.WrapText = False
Call FillDown
Call FillColors
wb.Cells.Columns("A:BP").EntireColumn.AutoFit
wb.Cells.HorizontalAlignment = xlLeft
wb.Columns("E:F").EntireColumn.Hidden = True
ActiveSheet.Outline.ShowLevels ColumnLevels:=1
End If
Select Case Asc(Cells(i, 8).Value)
Case 65 To 71 'A-G
wb.SaveCopyAs BASEPATH1 & _
ValidFileName(Login & "_" & Last & "_PrePlanning File.xlsx")
Case 72 To 80 'H-P
wb.SaveCopyAs BASEPATH2 & _
ValidFileName(Login & "_" & Last & "_PrePlanning File.xlsx")
Case 81 To 90 'Q-Z
wb.SaveCopyAs BASEPATH3 & _
ValidFileName(Login & "_" & Last & "_PrePlanning File.xlsx")
Case Else
End Select
With wb.Sheets("Manager File")
.Rows(3 & ":" & .Rows.Count).ClearContents
.Rows(3 & ":" & .Rows.Count).Interior.Color = xlNone
End With
Login = Data(i, 7)
Last = Data(i, 8)
j = 0
End If
a = 0
For k = 1 To UBound(Data, 2)
Dest.Offset(j, a) = Data(i, k)
a = a + 1
Next
j = j + 1
Next
SaveCopy wb, Login, Last
Call Ludicrous(False)
End Sub
Run Code Online (Sandbox Code Playgroud)
Asc从文档中使用此处:
返回一个
Integer代表与字符串中第一个字母相对应的字符代码的
Select Case Asc(wb.Cells(i, 8).Value)
Case 65 to 71 'A to G
...
Case 72 to 80 'H to P
...
Case 81 to 90 'Q to Z
...
End Select
Run Code Online (Sandbox Code Playgroud)
注意,您应该检查单元格是否也不为空。把它包起来If Not IsEmpty(wb.Cells(i, 8).Value) Then...End If
第二个注释(wb如果确实是一个Worksheet变量)会产生误导-尝试ws。如果wb为Workbook,则您需要在之前具有图纸参考Cells。