使用VBA

时间:2017-02-21 21:01:34

标签: excel vba excel-vba

我创建了(在高级程序员的帮助下)一个工作簿,其中包含用于输入成绩的主表单,以及用于导出模板的宏(A1:C63),以及单独的信息列(D到Q)到单独的工作表(总是出现在新工作表的D1:D63和模板旁边)。新工作表以主工作表中各自列的第7行中的学生姓名命名。

这是截图:

screenshot

以下是代码:

Option Explicit

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

    Set studsSht = Worksheets("Input") '<--| change "Sheet1" to your actual students grades sheet
    With CreateObject("Scripting.Dictionary") '<--| instantiate a Dictionary object
        For Each cell In studsSht.Range("D7:Q7").SpecialCells(xlCellTypeConstants, xlTextValues) '<--| loop through students names (change "D7:Q7" to your actual range with students names)
            .Item(cell.Value) = .Item(cell.Value) & cell.EntireColumn.Address(False, False) & "," '<--| add or update the dictionary entry whose key is the current student name with its corresponding column address
        Next
        For Each stud In .keys '<--| loop through unique students names
            Intersect(studsSht.UsedRange, studsSht.Range(Left(.Item(stud), Len(.Item(stud)) - 1))).Copy Destination:=GetSheet(CStr(stud)).Range("D1") '<--| copy its columns to correspondingly named sheet starting from cell A1
        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

我想知道的是,我是否可以在代码中添加一种方法,将图像(学校徽标,实际上)从主工作表转移到新工作表中的相同位置?我假设,因为图像没有附加到单元格上,所以它们在主表单上的位置没有区别,并且必须采用其他方式来定位/识别它们。

我想,因为我的所有纸张都以相同的方式格式化,所以有一种方法可以在excel中使用距离测量系统。我听说过这样的事情,但如果我能找到任何相关信息,我会被诅咒。

任何帮助都将不胜感激。

0 个答案:

没有答案