VBA将图像移动到新工作表的相同位置

VBA将图像移动到新工作表的相同位置,vba,excel,Vba,Excel,我下面有一个VBA代码,用于将信息从母版图纸转换到新图纸。前三列是一个模板(一张学校成绩单),它会出现在每一张新的表格上。下一列(学生成绩)分别进入不同的工作表,总是出现在模板旁边的D列中 这是截图 代码如下: 我的问题是,模板也包含徽标(出于明显的原因,我已将它们从屏幕截图中删除),但我无法让它们转到新的工作表 我尝试将徽标放置在一个隐藏的工作表上,希望它们出现在新工作表中,并替换工作表。使用HiddenSheet添加。复制,但失败了。我想我正在尝试让代码转换两个模板,一个在另一个之上。如果

我下面有一个VBA代码,用于将信息从母版图纸转换到新图纸。前三列是一个模板(一张学校成绩单),它会出现在每一张新的表格上。下一列(学生成绩)分别进入不同的工作表,总是出现在模板旁边的D列中

这是截图

代码如下: 我的问题是,模板也包含徽标(出于明显的原因,我已将它们从屏幕截图中删除),但我无法让它们转到新的工作表

我尝试将徽标放置在一个隐藏的工作表上,希望它们出现在新工作表中,并替换
工作表。使用
HiddenSheet添加
。复制
,但失败了。我想我正在尝试让代码转换两个模板,一个在另一个之上。如果有人能让它工作,那就好了

我也试着使用左上角的中心,但标志出现了偏离他们所在的位置。我更喜欢模板方法


对相关新手有什么帮助吗?

如果“输入”表中有徽标,为什么需要隐藏表?然后,您可以尝试
工作表(“输入”)。复制后:=工作表(Worksheets.Count)
?它与行
相交(studsSht.UsedRange,studsSht.Range(左(.Item(stud),Len(.Item(stud))-1)有问题。复制目标:=GetSheet(CStr(stud)).Range(“D1”)
添加工作表的方法是找到学生姓名并以这些姓名打开工作表,将模板复制到新的工作表上(由于某种原因,这里的徽标不是副本的一部分),然后将学生数据列复制到D列。如果我将其更改为
HiddenSheet.copy
工作表(“输入”).copy
则它不希望将学生数据粘贴到顶部。即使我排列徽标以确保它们在这个范围内
Sheets(“Input”).range(“A1:C63”)。copy GetSheet.range(“A1:D63”)。粘贴特殊xlAll
它们不会传输(我想这是因为我从工作表中复制数据,而不是工作表本身)。但是,如上所述,如果复制工作表本身,那么VBA代码将不起作用,因为输入工作表包含代码试图删除的数据。一部分是试图去除数据,另一部分是试图复制数据。我想我需要的是额外的两行代码,专门处理图像。因此,代码表示添加工作表、复制模板、复制学生数据,并将徽标从隐藏工作表/输入工作表转换到同一位置的所有新工作表。但我有点困了。
`Option Explicit

Sub parse_data()
    Dim studsSht As Worksheet
    Dim cell As Range
    Dim stud As Variant

    Set studsSht = Worksheets("Input")
    With CreateObject("Scripting.Dictionary")
        For Each cell In studsSht.Range("D7:Q7").SpecialCells(xlCellTypeConstants, xlTextValues)
            .Item(cell.Value) = .Item(cell.Value) & cell.EntireColumn.Address(False, False) & ","
        Next
        For Each stud In .keys 
            Intersect(studsSht.UsedRange, studsSht.Range(Left(.Item(stud), Len(.Item(stud)) - 1))).Copy Destination:=GetSheet(CStr(stud)).Range("D1") 
        Next
    End With

    studsSht.Activate
End Sub

Function GetSheet(shtName As String) As Worksheet
On Error Resume Next
Set GetSheet = Worksheets(shtName)
If GetSheet Is Nothing Then
    Set GetSheet = Sheets.Add(after:=Worksheets(Worksheets.Count))
    GetSheet.Name = shtName
    Sheets("Input").Range("A1:C63").Copy
    GetSheet.Range("A1:D63").PasteSpecial xlAll
End If
End Function`