Excel VBA新手,对我的代码有什么建议吗?
我不擅长编写VBA脚本,我做了以下几点来归档一些数据,将其复制到新工作簿中,并将此工作簿保存在特定文件夹中…我确信这段代码中存在一些初学者错误…有改进的建议吗Excel VBA新手,对我的代码有什么建议吗?,excel,vba,Excel,Vba,我不擅长编写VBA脚本,我做了以下几点来归档一些数据,将其复制到新工作簿中,并将此工作簿保存在特定文件夹中…我确信这段代码中存在一些初学者错误…有改进的建议吗 Private Sub CommandButton1_Click() Set NewBook = Workbooks.Add Dim strCriteria As String strCriteria = InputBox("Enter MyCollis Username or Leave Empty") If str
Private Sub CommandButton1_Click()
Set NewBook = Workbooks.Add
Dim strCriteria As String
strCriteria = InputBox("Enter MyCollis Username or Leave Empty")
If strCriteria = vbNullString Then
Sheet1.[A1:F15000].Copy
Else
Sheet1.[A1:F15000].AutoFilter Field:=6, Criteria1:=strCriteria
Sheet1.[A1:F15000].Copy
End If
NewBook.Worksheets("Sheet1").Range("B1").PasteSpecial (xlPasteValues)
Selection.NumberFormat = "m/d/yyyy"
ActiveWorkbook.SaveAs Filename:="C:\Users\36976\Desktop\" & "contracts" & "_" & strCriteria & "_" & Str(Format(Now(), "yyyymmdd")) & ".xlsx"
End Sub
您可以使用
UserId = Environ("Username")
path = "C:\Users\" & UserId & "\Desktop\"
ActiveWorkbook.SaveAs Filename:=path & "contracts" & "_" & strCriteria & "_" & Format(Now(), "yyyymmdd") & ".xlsx"
谢谢!这两个技巧都很有用 我现在确实遇到了一个问题,那就是它复制了很多空单元格,把我的新工作表弄乱了。如何将代码更改为仅复制包含文本的列 我发现了如下内容,但不确定如何在代码中实现它
Lr = .Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Lc = .Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
再次感谢 好的,我在谷歌上搜索了一下,找到了一些方法,只获取列by中有数据的行数,如下所示。我还有两个问题要问 1) 当StrCriteria为空时,是否仍需要IF语句?我会说不 2) 我无法找到只将E列和F列格式化为NumberFormat=“m/d/yyyy”的方法,这就是为什么我要格式化整个工作表的原因 谢谢
Private Sub CommandButton1_Click()
Set NewBook = Workbooks.Add
Dim strCriteria As String
Dim LR As Long
AutoFilterMode = False
strCriteria = InputBox("Enter MyCollis Username or Leave Empty for all")
If strCriteria = vbNullString Then
LR = Cells(Rows.Count, 2).End(xlUp).Row
Sheet1.Range("A1:G" & LR).Copy
Else
Sheet1.[A1:G15000].AutoFilter Field:=7, Criteria1:=strCriteria
LR = Cells(Rows.Count, 2).End(xlUp).Row
Sheet1.Range("A1:G" & LR).Copy
'Sheet1.[A1:G15000].Copy
End If
NewBook.Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues)
Selection.NumberFormat = "m/d/yyyy"
UserId = Environ("Username")
Path = "C:\Users\" & UserId & "\Desktop\"
ActiveWorkbook.SaveAs Filename:=Path & "contracts" & "_" & strCriteria & "_" & (Format(Now(), "yyyymmdd")) & ".xlsx"
End Sub
看起来不错。确保使用代码缩进并避免使用
Select
语句,除非您确实需要它们。我要做一些更改:将Option Exlpicit
放在模块顶部,以强制您声明变量。将NewBook
变量声明为工作簿
。给你的按钮起个名字。记住当你有50个名为CommandButton1到CommandButton50的按钮时会发生什么可能有点困难。也许可以使用一些代码来查找数据的结尾-15000行就足够了吗?正如Tom所说的-避免选择语句。使用NewBook.SaveAs
而不是ActiveWorkbook.SaveAs
。也许输入了一些检查MyCollis的代码-您可以输入任何内容,它将接受它作为MyCollis。好的一点-用户输入可以是:“/\ \?*.xlsx
,代码将接受它,然后在保存文件时失败。