Excel 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

我不擅长编写VBA脚本,我做了以下几点来归档一些数据,将其复制到新工作簿中,并将此工作簿保存在特定文件夹中…我确信这段代码中存在一些初学者错误…有改进的建议吗

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
,代码将接受它,然后在保存文件时失败。