列出所有打开的Excel文件,以便用户可以选择文件
我想将数据从旧文件复制到新文件 我有复制数据的代码。旧文件和新文件的名称都会更改,我每次都必须在代码中更改 有没有办法,我可以得到一个打开的Excel文件列表,并选择我想要从中获取数据的文件和我想要复制数据的文件列出所有打开的Excel文件,以便用户可以选择文件,excel,vba,Excel,Vba,我想将数据从旧文件复制到新文件 我有复制数据的代码。旧文件和新文件的名称都会更改,我每次都必须在代码中更改 有没有办法,我可以得到一个打开的Excel文件列表,并选择我想要从中获取数据的文件和我想要复制数据的文件 Sub Copy_rental() Dim PYFILE As String Dim CYFILE As String Dim Columnstocopy As String PYFILE = "Pro-invest HIE ADL Trust - 2018 WP.XL
Sub Copy_rental()
Dim PYFILE As String
Dim CYFILE As String
Dim Columnstocopy As String
PYFILE = "Pro-invest HIE ADL Trust - 2018 WP.XLSX"
CYFILE = "Pro-invest HIE ADL Trust - 2019 WP.XLSX"
Columnstocopy = "C"
Windows(PYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "10:" & Columnstocopy & "14").Select
Selection.Copy
Windows(CYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "10").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows(PYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "16:" & Columnstocopy & "24").Select
Selection.Copy
Windows(CYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "16").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows(PYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "26:" & Columnstocopy & "27").Select
Selection.Copy
Windows(CYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "26").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows(PYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "29").Select
Selection.Copy
Windows(CYFILE).Activate
Sheets("Rental Schedule").Select
Range(Columnstocopy & "29").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
编辑:感谢提示,我正在使用此代码获取打开的Excel文件列表,但它似乎不起作用。VBA也不会抛出任何错误。这可能是因为我在personal.xlsb工作簿上创建了Userform吗
在Newblank工作簿中,它似乎正在工作的代码相同
Private Sub Onesource_copy_data_Initialize()
Dim wkb As Workbook
Me.Onesource_ComboBox1_oldfile.Clear
For Each wkb In Application.Workbooks
Me.Onesource_ComboBox1_oldfile.AddItem wkb.Name
Next wkb
Me.Onesource_ComboBox1_newfile.Clear
For Each wkb In Application.Workbooks
Me.Onesource_ComboBox1_oldfile.AddItem wkb.Name
Next wkb
End Sub
编辑2:我认为问题是Onesource\u copy\u data\u Initialize
。我应该把它保留为UserForm\u Initialize
Private Sub UserForm_Initialize()
Dim wkb As Workbook
Me.Onesource_ComboBox_oldfile.Clear
For Each wkb In Application.Workbooks
Me.Onesource_ComboBox_oldfile.AddItem wkb.Name
Next wkb
Me.Onesource_ComboBox_newfile.Clear
For Each wkb In Application.Workbooks
Me.Onesource_ComboBox_newfile.AddItem wkb.Name
Next wkb
End Sub
编辑3:我做了一个组合框,它正在工作
组合框的代码
Private Sub Onesource_Copy_Cancel_CommandButton_Click()
Stopped = True
Unload Me
End Sub
Public Sub Onesource_Copy_Start_CommandButton_Click()
PYFILE = Me.Onesource_ComboBox_oldfile.Value
CYFILE = Me.Onesource_ComboBox_newfile.Value
' Calling Macro
Call Test123
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim wkb As Workbook
Me.Onesource_ComboBox_oldfile.Clear
For Each wkb In Application.Workbooks
Me.Onesource_ComboBox_oldfile.AddItem wkb.Name
Next wkb
Me.Onesource_ComboBox_newfile.Clear
For Each wkb In Application.Workbooks
Me.Onesource_ComboBox_newfile.AddItem wkb.Name
Next wkb
End Sub
Excel代码的开头
将变量声明为公共变量是必需的
Public PYFILE As String
Public CYFILE As String
Sub Copy_PreTemplate_to_NewTemplate()
'
' Copy previous Template data to new Template
'
Onesource_Copy_form.Show
End Sub
Sub Test123()
Windows(PYFILE).Activate
Sheets("Non-numeric details").Select
Range("C6:C10").Select
Selection.Copy
Windows(CYFILE).Activate
Sheets("Non-numeric details").Select
Range("C6").Select
ActiveSheet.Paste
End sub
如果图纸不改变位置,可以使用其数字索引而不是图纸名称:
Sheets(0).Select
如果工作表确实改变了位置,则遍历所有工作表,查找特定文本,以指示哪个工作表是什么
否则,请维护可能名称的地图
这不是一个真正的编程问题,而是一个过程中的问题。更好的解决方案是不要重命名图纸或使用sheetName yyyyymmdd之类的命名约定
您需要为这样的选择创建userform。另一种选择是使用
InputBox
方法。这是一个演示代码
Dim wkbSrc As Workbook, wkbDst As Workbook
Dim rngSrc As Range, rngDst As Range
Set rngSrc = Application.InputBox("Select Source Workbook", "Select Workbook", , , , , , 8)
Set rngDst = Application.InputBox("Select Destination Workbook", "Select Workbook", , , , , , 8)
Set wkbSrc = rngSrc.Parent.Parent
Set wkbDst = rngDst.Parent.Parent
请尝试下一种方式:
Sub testSelectOpenWorkbook()
Dim w As Workbook, wbCopy As Workbook, wbDest As Workbook, i As Long, strWb As String
Dim chooseW As String
For i = 1 To Workbooks.Count
strWb = strWb & i & " - " & Workbooks(i).Name & vbCrLf
Next
chooseW = InputBox("Please choose the number in front of the Workbook to copy data" & vbCrLf & vbCrLf & strWb, _
"Workbook to copy data selection", 1)
If chooseW = "" Then MsgBox "You did not choose anything...": Exit Sub
If Not IsNumeric(chooseW) Then
MsgBox "You must write the number in front of the workbook name...":Exit Sub
End If
Set wbCopy = Workbooks(CLng(chooseW))
Debug.Print wbCopy.Sheets.Count, wbCopy.Name
'Please, proceed in exactly the same way to select the destination workbook
End Sub
我明白你的意思。谢谢你让我知道。我是一个新手,所以这些提示帮助提示:不需要复制/粘贴,只需在工作表(1)中指定值即可:
Worksheets(1).Cells.Range(“A1”).Value=Worksheets(2).Cells.Range(“B2”).Value
这很有帮助,但问题是文件的名称完全相同。我已经研究了Userform选项,并编写了一些代码,但出于某种原因,ComboBox没有在列表中添加任何内容。这是一个很好的解决方法。我想我可以让它工作,但是用户表单方法看起来更有用clean@Ankit库尔什雷斯塔:问题在哪里?如果在组合框中输入工作簿名称,可以像使用Set wbCopy=workbooks(combo.value)
一样使用它。这种方法有什么不清楚的地方?我是否应该发布这样一个用于组合加载和工作簿对象定义的代码?这里没有问题。实际上,我更喜欢组合框的概念。谢谢你的帮助。我差一点就到了