Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3601|回复: 9

[已解决]请教:如何让导入的类模块起作用

[复制链接]
发表于 2010-2-2 23:40 | 显示全部楼层 |阅读模式

这是一个即点即显走势图的类模块vba文件附件,由于sheet3已经有了一个类模块,故不能同时将此vba保存进去。试用了导出导入该类模块,但导入的类模块不起作用。纳闷,既然可以导出导入类模块,为什么导入的类模块不起作用呢?请问怎样才能让它起作用?

(即点即显走势图:以本附件为例,只要点击A6:EZ205区域的任一列数据,走势图就显示该列数据的走势。)

有劳各位大家,非常感谢!

含两段代码的最新附件:即点即显e 

IOwp6gvq.rar (135.78 KB, 下载次数: 16)

4ERXBJne.rar

135.4 KB, 下载次数: 14

请教:如何让导入的类模块起作用

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-2-2 23:48 | 显示全部楼层
回复

使用道具 举报

发表于 2010-2-3 09:28 | 显示全部楼层

类模块只是一个类,要这人类起作用,用要“分类”--告诉电脑哪个属于这个类
回复

使用道具 举报

发表于 2010-2-3 09:31 | 显示全部楼层

学习来了
回复

使用道具 举报

 楼主| 发表于 2010-2-3 15:32 | 显示全部楼层

QUOTE:
以下是引用吕?布在2010-2-3 9:28:00的发言:
用要“分类”--告诉电脑哪个属于这个类

不太明白。能否请您用1楼的例子讲解一下?多谢了!

回复

使用道具 举报

发表于 2010-2-3 15:41 | 显示全部楼层

将代码合并不就可以了么
回复

使用道具 举报

 楼主| 发表于 2010-2-3 16:01 | 显示全部楼层

你的意思是: 将两个类模块代码合并复制到sheet3? 但点击列出现如下错误:

“发现二义性的名称:Worksheet_SelectionChange”

两段代码的第一句都是:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

[此贴子已经被作者于2010-2-4 16:36:20编辑过]
回复

使用道具 举报

发表于 2010-2-4 14:09 | 显示全部楼层

我的意思不是简单的合并复制,而是根据功能合同,需要修改代码
回复

使用道具 举报

发表于 2010-2-5 08:58 | 显示全部楼层    本楼为最佳答案   

楼主试试看
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column >= 109 And Target.Column <= 149 Then
    c = Split(Range("Er").Address, "$")(4)
    If Target.Row > c + 22 Then
        Range(Cells(Target.Row, 109), Cells(Target.Row, 149)).Select
        Selection.Copy
        Range("Er").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
    End If
End If
If Target.Count > 1 Then Exit Sub
If Target.Row < 6 Then Exit Sub
If Target.Row > 205 Then Exit Sub
If Target.Column = 14 Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim col%, nm$
col = Target.Column
nm = ThisWorkbook.Name
    ActiveWorkbook.Names.Add Name:="zhi", RefersToR1C1:= _
        "=round(OFFSET(纵横追踪!R6C" & col & ",,,COUNTA(纵横追踪!C14) ,),0)"
    ActiveSheet.ChartObjects("chart 1").Activate
    ActiveChart.SeriesCollection(1).Values = "=" & nm & "!zhi"
    With ActiveChart.Axes(xlValue)
        .MajorUnitIsAuto = True
        .MinimumScale = VBA.Round(WorksheetFunction.Min(Range(Cells(14, col), Cells(205, col))), 0)
        .MaximumScale = VBA.Round(WorksheetFunction.Max(Range(Cells(14, col), Cells(205, col))), 0)
        If .MaximumScale = 1 Then
            .MinorUnit = 1
        End If
            
        If .MaximumScale <> 1 Then
            If (.MaximumScale - .MinimumScale) Mod 10 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 10
            ElseIf (.MaximumScale - .MinimumScale) Mod 9 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 9
            ElseIf (.MaximumScale - .MinimumScale) Mod 8 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 8
            ElseIf (.MaximumScale - .MinimumScale) Mod 7 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 7
            ElseIf (.MaximumScale - .MinimumScale) Mod 6 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 6
            ElseIf (.MaximumScale - .MinimumScale) Mod 5 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 5
            ElseIf (.MaximumScale - .MinimumScale) Mod 4 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 4
            ElseIf (.MaximumScale - .MinimumScale) Mod 3 = 0 Then
                .MinorUnit = (.MaximumScale - .MinimumScale) / 3
            End If
        End If
        .Crosses = xlAxisCrossesAutomatic
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
End Sub
回复

使用道具 举报

 楼主| 发表于 2010-2-5 15:56 | 显示全部楼层

完美实现,非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-16 13:46 , Processed in 0.318787 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表