VBA宏将数据从一个excel文件复制到另一个excel文件
我有两本VBA宏将数据从一个excel文件复制到另一个excel文件,vba,excel,Vba,Excel,我有两本Excel工作簿。两者都在不同的文件夹中。 我正在使用宏将数据从一个复制到另一个 我发现一个下标超出范围的错误 对此有何见解 这是我的密码 Sub copydata() Dim wkbSource As Workbook Dim wkbDest As Workbook Dim shttocopy As Worksheet Dim wbname As String ' check if the file is open ret = Isworkbookopen("C:\file1.xl
Excel
工作簿。两者都在不同的文件夹中。
我正在使用宏
将数据从一个复制到另一个
我发现一个下标超出范围的错误
对此有何见解
这是我的密码
Sub copydata()
Dim wkbSource As Workbook
Dim wkbDest As Workbook
Dim shttocopy As Worksheet
Dim wbname As String
' check if the file is open
ret = Isworkbookopen("C:\file1.xlsx")
If ret = False Then
' open file
Set wkbSource = Workbooks.Open("C:\file1.xlsx")
Else
'Just make it active
Workbooks("C:\file1.xlsx").Activate
End If
' check if the file is open
ret = Isworkbookopen("C:\File2.xlsx")
If ret = False Then
' open file
Set wkbDest = Workbooks.Open("C:\file2.xlsx")
Else
'Just make it active
Workbooks("file2.xlsx").Activate
End If
'perform copy
Set shttocopy = wkbSource.Sheets("filedata")
shttocopy.Copy wkbDest.Sheets(3)
End Sub
Function Isworkbookopen(filename As String)
Dim ff As Long, ErrNo As Long
Dim wkb As Workbook
Dim nam As String
wbname = filename
On Error Resume Next
ff = FreeFile()
Open filename For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: Isworkbookopen = False
Case 70: Isworkbookopen = True
Case Else: Error ErrNo
End Select
End Function
好的,我想我明白了。如果书已经打开,我们将设置它,而不是
.Activate
。我们还将引用该书的文件名,而不是路径(正如我在上面的评论中错误地建议的那样)
这对我很有用:
Sub copydata()
Dim wkbSource As Workbook
Dim wkbDest As Workbook
Dim shttocopy As Worksheet
Dim wbname As String
' check if the file is open
ret = Isworkbookopen("C:\stack\file1.xlsx")
If ret = False Then
' open file
Set wkbSource = Workbooks.Open("C:\stack\file1.xlsx")
Else
'Just make it active
'Workbooks("C:\stack\file1.xlsx").Activate
Set wkbSource = Workbooks("file1.xlsx")
End If
' check if the file is open
ret = Isworkbookopen("C:\stack\File2.xlsx")
If ret = False Then
' open file
Set wkbDest = Workbooks.Open("C:\stack\file2.xlsx")
Else
'Just make it active
'Workbooks("C:\stack\file2.xlsx").Activate
Set wkbDest = Workbooks("file2.xlsx")
End If
'perform copy
Set shttocopy = wkbSource.Sheets("filedata")
shttocopy.Copy wkbDest.Sheets(3)
End Sub
Function Isworkbookopen(filename As String)
Dim ff As Long, ErrNo As Long
Dim wkb As Workbook
Dim nam As String
wbname = filename
On Error Resume Next
ff = FreeFile()
Open filename For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: Isworkbookopen = False
Case 70: Isworkbookopen = True
Case Else: Error ErrNo
End Select
End Function
好的,我想我明白了。如果书已经打开,我们将设置它,而不是
.Activate
。我们还将引用该书的文件名,而不是路径(正如我在上面的评论中错误地建议的那样)
这对我很有用:
Sub copydata()
Dim wkbSource As Workbook
Dim wkbDest As Workbook
Dim shttocopy As Worksheet
Dim wbname As String
' check if the file is open
ret = Isworkbookopen("C:\stack\file1.xlsx")
If ret = False Then
' open file
Set wkbSource = Workbooks.Open("C:\stack\file1.xlsx")
Else
'Just make it active
'Workbooks("C:\stack\file1.xlsx").Activate
Set wkbSource = Workbooks("file1.xlsx")
End If
' check if the file is open
ret = Isworkbookopen("C:\stack\File2.xlsx")
If ret = False Then
' open file
Set wkbDest = Workbooks.Open("C:\stack\file2.xlsx")
Else
'Just make it active
'Workbooks("C:\stack\file2.xlsx").Activate
Set wkbDest = Workbooks("file2.xlsx")
End If
'perform copy
Set shttocopy = wkbSource.Sheets("filedata")
shttocopy.Copy wkbDest.Sheets(3)
End Sub
Function Isworkbookopen(filename As String)
Dim ff As Long, ErrNo As Long
Dim wkb As Workbook
Dim nam As String
wbname = filename
On Error Resume Next
ff = FreeFile()
Open filename For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: Isworkbookopen = False
Case 70: Isworkbookopen = True
Case Else: Error ErrNo
End Select
End Function
wkbDest
工作簿是否确实有索引为3的工作表
?哪一行导致下标超出范围错误?工作簿(“C:\file1.xlsx”)。激活和工作簿(“file2.xlsx”)。激活。(我正在文件1.xlsx中编写和执行此宏)哦--您可能需要完整的文件路径(而不仅仅是文件名)添加了完整路径,但在这一行仍然会出现错误:工作簿(“C:\file1.xlsx”).Activate使wkbDest
工作簿肯定有一个索引为3的工作表
?哪一行导致下标超出范围错误?工作簿(“C:\file1.xlsx”)。激活和工作簿(“file2.xlsx”)。激活。(我正在文件1.xlsx中编写和执行此宏)哦--您可能需要完整的文件路径(而不仅仅是文件名)添加了完整路径,但在这一行仍然会出现错误:工作簿(“C:\file1.xlsx”).Activatence答案。根据您的代码,我冒昧地回答了另一个问题。我给了你适当的信任。回答得好。根据您的代码,我冒昧地回答了另一个问题。我在这方面给了你适当的信任。