【发布时间】:2015-06-02 15:31:11
【问题描述】:
如何复制具有这些列标题名称“TOOL CUTTER”和“HOLDER”的列(仅数据)并将它们粘贴(作为附加在每个列中,每个列具有相同的列标题名称)到另一个VBA 代码(工作表模块)所在的工作簿工作表。谢谢。 列标题 HOLDER 出现在 F10 中(最好写为 (10, 6),而 TOOL CUTTER 在 G10 (10, 11) 中,但最好让它搜索标题名称并打印该列中的任何内容,直到它完全为空(可能会出现空格)。 非常感谢任何帮助!
工作代码:循环打开文件夹中的文件 - 打开文件,将文件名打印到 Masterfile 表,将项目 J1 从文件打印到 Masterfile 表,关闭文件,打开文件夹中的下一个文件,直到所有文件都循环通过。
Option Explicit
Sub LoopThroughDirectory()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim MyFolder As String
Dim Sht As Worksheet, ws As Worksheet
Dim WB As Workbook
Dim i As Integer
Dim LastRow As Integer, erow As Integer
Dim Height As Integer
Application.ScreenUpdating = False
MyFolder = "C:\Users\trembos\Documents\TDS\progress\"
Set Sht = Workbooks("masterfile.xlsm").Sheets("Sheet1")
'create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'get the folder object
Set objFolder = objFSO.GetFolder(MyFolder)
i = 1
'loop through directory file and print names
For Each objFile In objFolder.Files
If LCase(Right(objFile.Name, 3)) = "xls" Or LCase(Left(Right(objFile.Name, 4), 3)) = "xls" Then
'print file name
Workbooks.Open Filename:=MyFolder & objFile.Name
Set WB = ActiveWorkbook
With WB
For Each ws In .Worksheets
Sht.Cells(i + 1, 1) = objFile.Name
With ws
.Range("J1").Copy Sht.Cells(i + 1, 4)
End With
i = i + 1
Next ws
.Close SaveChanges:=False
End With
End If
Next objFile
Application.ScreenUpdating = True
End Sub
我正在尝试打印 HOLDER 和 TOOL CUTTER 列中的值的代码(返回错误 Tool variable is not defined in line For Each Tool In TOOLList in the block that start with the comment 'paste the TOOL list found back到这张纸:
Option Explicit
Sub LoopThroughDirectory()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim MyFolder As String
Dim StartSht As Worksheet, ws As Worksheet
Dim WB As Workbook
Dim i As Integer
Dim LastRow As Integer, erow As Integer
Dim Height As Integer
'Application.ScreenUpdating = False
MyFolder = "C:\Users\trembos\Documents\TDS\progress\"
Set StartSht = ActiveSheet
'create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'get the folder object
Set objFolder = objFSO.GetFolder(MyFolder)
i = 2
'loop through directory file and print names
For Each objFile In objFolder.Files
If LCase(Right(objFile.Name, 3)) = "xls" Or LCase(Left(Right(objFile.Name, 4), 3)) = "xls" Then
'print file name
StartSht.Cells(i, 1) = objFile.Name
Dim NewWb As Workbook
Set NewWb = Workbooks.Open(Filename:=MyFolder & objFile.Name)
'print TDS values
With WB
For Each ws In .Worksheets
StartSht.Cells(i + 1, 1) = objFile.Name
With ws
.Range("J1").Copy StartSht.Cells(i + 1, 4)
End With
i = i + 1
Next ws
.Close SaveChanges:=False
End With
End If
'print CUTTING TOOL and HOLDER lists
Dim k As Long
Dim width As Long
Dim TOOLList As Object
Dim count As Long
Set TOOLList = CreateObject("Scripting.Dictionary")
Dim ToolRow As Integer 'set as As Long if more than 32767 rows
' search for all on other sheets
' Assuming header means Row 1
If objFile.Name <> "masterfile.xls" Then 'skip any processing on "Masterfile.xls"
For Each ws In NewWb.Worksheets 'assuming we want to look through the new workbook
With ws
width = .Cells(10, .Columns.count).End(xlToLeft).Column
For k = 1 To width
If Trim(.Cells(10, k).Value) = "CUTTING TOOL" Then
Height = .Cells(.Rows.count, k).End(xlUp).Row
If Height > 1 Then
For ToolRow = 2 To Height
If Not TOOLList.exists(.Cells(ToolRow, k).Value) Then
TOOLList.Add .Cells(ToolRow, k).Value, ""
End If
Next ToolRow
End If
End If
Next
End With
Next
End If
' paste the TOOL list found back to this sheet
With StartSht
width = .Cells(10, .Columns.count).End(xlToLeft).Column
For k = 1 To width
If Trim(.Cells(10, k).Value) = "CUTTING TOOL" Then
Height = .Cells(.Rows.count, k).End(xlUp).Row
count = 0
For Each Tool In TOOLList
count = count + 1
.Cells(Height + count, k).Value = Tool
Next
End If
Next
End With
'close current file, do not save changes
NewWb.Close SaveChanges:=False
i = i + 1
'move to next file
Next objFile
'Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
工作簿是否包含名为“masterfile.xlsm”的代码?从您的代码中弄清楚有点困难。
-
@TimWilliams 是的,抱歉,这很难解释。随意问很多问题!是的,包含代码的工作簿称为“masterfile.xlsm”。我正在尝试从位于文件夹
MyFolder = "C:\Users\trembos\Documents\TDS\progress\"中的文件中将信息写入该“masterfile.xlsm” -
您正在使用选项显式,我没有看到
Tool的暗线。这就是为什么您收到未定义错误的原因。 -
是的,我只是不知道如何定义工具。有人建议我将其定义为一个项目,但我不确定如何去做。此外,一旦我定义了
Dim Tool As Object,我的代码前面就会出现错误,For Each ws In .Worksheets行返回一个自动化错误 -
试试
Dim Tool As Variant。有关变体的更多信息:msdn.microsoft.com/en-us/library/office/gg251448.aspx
标签: vba excel copy-paste