【问题标题】:VBA: How to delete Column "A" in a specific Folder with different files with Sheet name that variesVBA:如何删除具有不同文件的特定文件夹中的列“A”,工作表名称不同
【发布时间】:2016-09-28 03:56:12
【问题描述】:

我的桌面中有一个文件夹,其中包含或多或少 2000 个 csv 文件。这些文件只有 1 个“工作表”,但工作表名称会有所不同。唯一相似的是它以“Tankard”这个词开头。

在那张纸上,我只需要删除 Column A 并保存它,用于所有 2000 个文件。这是我在工作中探索 vba 自动化的第二个月。如果有人可以帮助我,我将不胜感激。提前致谢。

脚本:

Sub Tank()
Dim wb As Workbook
Dim myPath As String
Dim myfile As String
Dim myExtension As String
Dim SheetName As String
'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

SheetName = "Tankard*"
  myPath = "\\ph00winfdfs01p\shares\JoeyC\documents\Roaming\Windows\Desktop\Tank\"
  If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")
  myExtension = "Tankard*.csv"

'Target Path with Ending Extention
  myfile = Dir(myPath & myExtension)

'Loop through each Excel file in folder
For i = 1 To 201
Set wb = Workbooks.Open(Filename:=myPath & myfile)
';;;;;;;;;;;;;;WRITE YOUR CODE HERE
Sheets("SheetName").Select
Columns("A").Select
Selection.Delete
wb.Close SaveChanges:=True

Next i
'Get next file name
myfile = Dir

'Message Box when tasks are completed
  MsgBox "Task Complete!"

ResetSettings:
  'Reset Macro Optimization Settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 在打开 csv 文件时,工作表名称不只是文件名(不带扩展名)吗? (我没有使用 csv 文件和 excel 的经验,但这就是它为我所做的)
  • 感谢您的意见。我的问题解决了!

标签: vba excel csv macros


【解决方案1】:

尝试了解正在发生的事情。这个子现在做的是打开Dir可以找到的第一个工作簿,打开它201次,每次都删除工作表“Sheetname”的第一列。

Sheets("SheetName").Select

这将选择名称为 "Sheetname" 的工作表,而不是您将字符串 Sheetname 设置为值的名称。如果有的话,应该是Sheets(Sheetname),但无论如何通配符在这里都不起作用。

现在让我们看看您要实现的过程。

myfile = Dir(myPath & myExtension)

将myfile 设置为与您的模式...\Tankard*.csv 匹配的第一个文件

Set wb = Workbooks.Open(Filename:=myPath & myfile)

打开文件,现在您可以通过wb 访问工作簿

要删除工作表上的第一列,我建议选择所有内容,但直接删除范围:

wb.Sheets(1).Columns(1).Delete 'If you want to actually delete the column
wb.Sheets(1).Columns(1).Clear  'If you want to just remove the values

如您所见,您根本不需要工作表的名称。现在保存工作簿:

wb.Close SaveChanges:=True

现在您可以使用Dir 将myfile 设置为下一个文件名:

myfile = Dir

然后重复此操作,直到没有更多文件(此时 Dir 将返回 ""。实现此目的的最佳方法是使用 While 循环,例如像这样

While myfile <> ""
    'Do stuff here
Wend '(While End)

与For 循环相比的优势在于您无需知道文件夹中文件的确切数量。

我会留给你来修补所有这些。

【讨论】:

  • 我能够将您的所有建议放在一起。有效!谢谢。 vba 新手,只是想通过这个站点和其他站点来了解这些概念。加上 youtube 视频。再次感谢
  • 很高兴我能帮上忙。您可以考虑将其标记为已回答;)
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 2012-10-13
  • 2021-11-03
  • 2018-06-21
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2019-01-03
相关资源
最近更新 更多