【发布时间】:2015-04-09 17:04:43
【问题描述】:
编辑:我更新了一些代码,现在我也收到了一条错误消息。错误如下所示。
我在此站点上找到了一段代码,并将工作表复制到另一个工作簿,但我想做一些微调。我需要源工作表从单元格“A11”-“J11”复制单元格中的所有信息,直到行中的信息结束。
复制的信息需要在单元格“A4”-“J4”中发布,直到没有更多信息可以粘贴为止。
复制工作表时,它需要命名为某个名称(假设它需要命名为“客户信息”),但是,目标工作簿中将有一个同名的当前工作表。有没有办法在不添加 (1) 到名称末尾的情况下复制它,因为已经有一个具有该名称的选项卡。
这是我目前拥有的代码
Sub UpdateCustomerInformation()
Dim wkbSource As Workbook
Dim wkbDest As Workbook
Dim shttocopy As Worksheet
Dim wbname As String
Dim destSheet As Worksheet
' check if the file is open
Ret = Isworkbookopen("\\showdog\service\\Service_job_PO\Customer Information - Query.xls")
If Ret = False Then
' open file
Set wkbSource = Workbooks.Open("\\showdog\service\\Service_job_PO\Customer Information - Query.xls")
Else
'Just make it active
'Workbooks("C:\stack\file1.xlsx").Activate
Set wkbSource = Workbooks("Customer Information - Query.xls")
End If
' check if the file is open
Ret = Isworkbookopen("\\showdog\service\Service Jobs.xlsm")
If Ret = False Then
' open file
Set wkbDest = Workbooks.Open("\\showdog\service\Service Jobs.xlsm")
Set destSheet = wkbDest.Sheets("Customer Information")
'perform copy
Set shttocopy = wkbSource.Sheets("Report")
shttocopy.Range("A11:J11").End(xlDown).Copy
此处抛出错误:“对象不支持此属性或方法”
wkbDest.Sheets(destSheet.Name).Range("A4:J4").End(xlDown).Paste
我不确定为什么。我以为我做的一切都是正确的,但我显然没有
Application.DisplayAlerts = False
wkbDest.Save
wkbDest.Close
Application.DisplayAlerts = True
'close file
Else
'Just make it active
'Workbooks("C:\stack\file2.xlsx").Activate
Set wkbDest = Workbooks("Service Jobs.xlsm")
Set destSheet = wkbDest.Sheets("Customer Information")
'perform copy
Set shttocopy = wkbSource.Sheets("Report")
shttocopy.Range("A11:J11").End(xlDown).Copy
wkbDest.Sheets(destSheet.Name).Range("A4:J4").End(xlDown).Paste
End If
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
我不确定如何完成上述任务。任何帮助将不胜感激!
【问题讨论】:
-
如果您想操作目标工作表的数据(或名称等属性),则需要另一个工作表对象(Dim destSheet As Worksheet)。然后,您不需要执行“shttocopy.Copy”,而是需要将其拆分并更具体(shttocopy.Range("A11:J11").Copy)并将其更具体地粘贴到 destSheet(wkbDest.Sheets(destSheet.名称).Range("A4:J4").Paste )。您粘贴的代码中有很多硬定义的元素,因此如果您希望它更健壮,我可能会建议更改其中的一些元素。如果您需要更多帮助,我可以提供更复杂的答案。
-
我会试一试。我知道如何利用这些信息完成我的任务。我只是不确定如何开始。我会让你知道我的进步。谢谢!
-
我听从了你的建议,但是我现在遇到了一个错误。我更新了代码,这样你就可以看到我做了什么。
-
@RichardHorvath,
Range对象只有PasteSpecial方法。您可以将行编辑为如下所示:wkbDest.destSheet.Range("A4:J4").End(xlDown).PasteSpecial- 请注意我也更改了 sheet 部分,您已经设置了工作表,不需要再做一次。