首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >跨相关工作表复制值

跨相关工作表复制值
EN

Stack Overflow用户
提问于 2017-01-05 10:09:21
回答 2查看 139关注 0票数 1

我希望将一个工作表中的值范围复制到另一个工作表的指定范围中,而值总是来自以前的工作表(工作表行中),即使在复制工作表之后也是如此。我使用以下方法将值从一个工作表复制到另一个工作表,这似乎有效:

代码语言:javascript
代码运行次数:0
运行
复制
Sub Copy_ultimo_stock()

'copy values between two periods
Worksheets("Period2").Range("test3").Value = Worksheets("Period1").Range("test2").Value

End Sub

我必须给单元格的范围命名(test2和test3),因为如果我使用实际的单元格范围(如"R10:S11“),宏就无法工作。然而,在未来,我只想使用单元格范围作为"R10:S11“。

然而,我的实际问题是以下几点。如果将来复制工作表(将来的工作表),我希望始终从以前的工作表复制单元格范围。按照我现在所做的方式,如果我复制工作表period2,并调用它(可能是period6 ),它仍然会从period1工作表复制值。但是,我希望当前工作表"n“将从工作表"n-1”中的范围复制值。

我已经找到了一种有点类似的方法,可以帮助,但我不能将两个宏合并成一个。这一做法如下:

代码语言:javascript
代码运行次数:0
运行
复制
Function PrevSheet(rCell As Range)
    Application.Volatile
    Dim i As Integer
    i = rCell.Cells(1).Parent.Index
    PrevSheet = Sheets(i - 1).Range(rCell.Address)
End Function
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-05 10:44:04

编辑

因此,您需要的是一个从“前一个工作表”导入的宏,因此当您单击按钮时,子例程首先从当前获取前一个表,然后相应地获取值。

我们将假设所有工作表都被命名为“周期”,其中x是标识周期的整数。创建新工作表副本时,首先需要将新工作表重命名为“周期”,然后单击按钮从工作表"periody“中获取值,其中y= x-1。

只需将按钮处理程序Copy_ultimo_stock()替换为下面一个:

代码语言:javascript
代码运行次数:0
运行
复制
Sub Copy_ultimo_stock()
    Dim wsCur As Worksheet, wsPrev As Worksheet
    Set wsCur = ActiveSheet
    ' We will suppose that all Worksheets are named like "periodx"
    ' where x is an integer identifying the period
    On Error Resume Next ' try fetching the previous ws as "periody" where y = x-1
    Dim x As Integer: x = CInt(Mid(wsCur.Name, Len("period") + 1))
    Set wsPrev = ThisWorkbook.Sheets("period" & (x - 1))
    If Err.Number <> 0 Then
       msgBox "Could not find the previous worksheet, Please check Worksheet names"
       Exit Sub
    End If
    On Error GoTo 0

    ' Now we copy the previous values. You can customize the ranges if the design changes
    wsCur.Range("D2:L8").Value = wsPrev.Range("D10:L16").Value

End Sub

此外,您可以通过添加另一个按钮来自动生成新的周期工作表,例如“生成下一个时间段”,该按钮将创建新的ws并给它适当的名称。这将节省用户复制工作表和重命名工作表的任务。新按钮的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
Sub create_next_period()
    Dim wsCur As Worksheet, wsNext As Worksheet
    Set wsCur = ActiveSheet

    On Error Resume Next
    Dim x As Integer: x = CInt(Mid(wsCur.Name, Len("period") + 1))
    If Err.Number <> 0 Then
       msgBox "Please check Worksheet name. It should be named periodx"
       Exit Sub
    End If

    Set wsNext = ThisWorkbook.Sheets("period" & (x + 1))
    If Err.Number = 0 Then
       msgBox "The worksheet " & wsNext.Name & " already exists"
       Exit Sub
    Else
        Err.Clear
        wsCur.Copy After:=Worksheets(Worksheets.Count)
        Set wsNext = Worksheets(Worksheets.Count)
        wsNext.Name = "period" & (x + 1)
        wsNext.Activate
        Call Copy_ultimo_stock
    End If
End Sub
票数 0
EN

Stack Overflow用户

发布于 2017-01-05 10:18:36

当你给你的细胞起名字的时候:

范围(“任何”).name=“工作表!名称”

而不仅仅是

范围(“任何”).name=“名称”

==>通过这种方式,您可以在几张单张上给出相同的命名范围,而不存在任何问题。

希望这能有所帮助。

不过,我不会建议使用太多的命名范围.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41482194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档