excel - 有没有一种简单的方法可以使用 case 语句存储已保存的文件?
问题描述
我正在尝试创建代码来检查一列名称。我想将文件分为三类(名称介于 AG、HP、QZ 之间)。
在保存文件之前,我认为 case 语句是正确的方法,但不确定我是否需要使用instr
函数或类似的东西。
这是我当前如何设置它的粗略示例(注释掉案例陈述)。
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
完整代码:
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
解决方案
在此处使用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
请注意,您应该检查单元格是否也不是空的。把这个包起来If Not IsEmpty(wb.Cells(i, 8).Value) Then...End If
第二个注意事项,wb
如果这确实是一个Worksheet
变量,则非常具有误导性 - 尝试ws
。如果wb
是 a Workbook
,那么您之前需要一个工作表引用Cells
。
推荐阅读
- angular - Angular 11,''router-outlet' 不是已知元素:'
- node.js - 在 Heroku 上进行第二次部署后,Node.JS 应用程序在启动时崩溃
- javascript - 将输入类型日期从 JavaScript 动态更改为电子邮件在 Safari 中不起作用
- css - 将换行限制为 n 行
- vue.js - 如何在 vue-quill 编辑器中发出多个参数?
- reinforcement-learning - 奖励与前一个状态或下一个状态有关吗?
- flutter - 如何将大小设置为 FloatingActionButton - Flutter
- python - 转换图像文件时如何避免 Jupyter 中的 AttributionError?
- docker - Skaffold 开发失败
- python - 我使用 pyautogui 为 CS:GO 创建了一个 python 绑定,但它不起作用