ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 86267|回复: 460

[分享] 常用代码归集

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2017-1-28 12:41 | 显示全部楼层 |阅读模式
本帖最后由 jsgj2023 于 2017-10-22 11:09 编辑

     实践中,经常调用一些代码,代码的来源比较广泛,但绝大部分为解决本论坛朋友提问时编写,还包含所写插件中的部分代码,为便于统一查找引用,我将其逐一归集,希望能给予大家帮助,归集的代码若有涉嫌侵权的嫌疑,请联系我处理!自【393】楼起,每段代码有相应的链接,需要附件的朋友可以自行下载!






评分

16

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-28 12:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 jsgj2023 于 2017-2-16 06:57 编辑

Sub 透视表式汇总()
        Dim d As Object, arr, x&, y%, s, t, a, b, m%, n%, r%
        Dim sh  As Worksheet
        Application.ScreenUpdating = False
        Set d = CreateObject("scripting.dictionary")
        Application.DisplayAlerts = False
        For Each sh In Worksheets
             If Not sh.Name Like "合并结果" Then
                     sh.Delete
             End If
        Next sh
        Application.DisplayAlerts = True
        Sheets.Add(after:=Sheets(Sheets.Count)).Name = "透视表式汇总"
        Sheets("合并结果").Activate
        arr = Range("a1").CurrentRegion
        For x = 2 To UBound(arr)
                If Not d.exists(arr(x, 4)) Then
                        Set d(arr(x, 4)) = CreateObject("scripting.dictionary")
                End If
                d(arr(x, 4))(arr(x, 12)) = d(arr(x, 4))(arr(x, 12)) + arr(x, 9)
        Next x
                s = d.keys: t = d.items
        Sheets("透视表式汇总").Activate
        For m = 0 To d.Count - 1
                a = d(s(m)).keys: b = d(s(m)).items
                n = n + r
                With Sheets("透视表式汇总")
                        .Cells(1, 1).Resize(1, 3) = Array("门店", "型号", "数量")
                        .Cells(2 + n, 1).Resize(d(s(m)).Count, 1) = s(m)
                        .Cells(2 + n, 2).Resize(d(s(m)).Count, 1) = Application.Transpose(a)
                        .Cells(2 + n, 3).Resize(d(s(m)).Count, 1) = Application.Transpose(b)
                        n = 0
                End With
                r = Cells(Rows.Count, 1).End(xlUp).Row - 1
        Next m
        Range("a:c").EntireColumn.AutoFit
        Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-28 12:45 | 显示全部楼层
本帖最后由 jsgj2023 于 2017-2-16 06:57 编辑

Sub 创建文本文件()
Dim astr(1 To 3) As String, i As Integer
Dim sfname As String, ifnumber As Integer, r As Long
sfname = Application.InputBox(prompt:="请输入文本文件的名称", _
Title:="输入文件名称", Type:=2)
If sfname = "False" Or sfname = "" Then Exit Sub
sfname = ThisWorkbook.Path & "\" & sfname & ".txt"
ifnumber = FreeFile
Open sfname For Output As #ifnumber
r = 2
Do
    With Sheet1
        For i = 1 To 3
            astr(i) = .Cells(r, i)
        Next
    End With
    Write #ifnumber, astr(1), astr(2), astr(3)
    r = r + 1
Loop Until IsEmpty(Sheet1.Cells(r, 1))
Close #ifnumber
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-1-28 13:57 | 显示全部楼层
楼主可以放上事例文件吗?光看代码不好应用

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-30 19:33 | 显示全部楼层
Sub 读取文本文件数据()
    Dim astr(1 To 3) As String
    Dim i  As Integer
    Dim sfname As String
    Dim ifnumber As Integer
    Dim r As Long
    sfname = Application.InputBox(prompt:="请输入文本文件的名称", _
    Title:="输入文件名称", Type:=2)
    If sfname = "False" Or sfname = "" Then Exit Sub
    sfname = ThisWorkbook.Path & "\" & sfname & ".txt"
    If Len(Dir(sfname, vbDirectory)) > 0 Then
        ifnumber = FreeFile
        Open sfname For Input As #ifnumber
        Sheet1.Cells.Clear
        r = 2
        Do
            Input #ifnumber, astr(1), astr(2), astr(3)
            With Sheet1
                For i = 1 To 3
                    .Cells(r, i) = astr(i)
                Next
            End With
            r = r + 1
        Loop Until EOF(ifnumber)
        Close #ifnumber
    Else
        MsgBox "输入的文件不存在,请不要添加扩展名!"
    End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-30 19:44 | 显示全部楼层
Sub 保存文本文件()
Dim sfname As String
sfname = Application.InputBox(prompt:="请输入文本文件的名称", _
Title:="输入文件名称", Type:=2)
If afname = "False" Or sfname = "" Then Exit Sub
sfname = ThisWorkbook.Path & "\" & sfname & ".txt"
On Error Resume Next
If Len(Dir(sfname, vbDirectory)) > 0 Then
    If MsgBox("该文件已经存在,是否删除?", vbQuestion + vbYesNo) = vbYes Then
        Kill sfname
    Else
        Exit Sub
    End If
End If
On Error GoTo 0
Set ws1 = Worksheets("Sheet1")
ActiveWorkbook.SaveAs Filename:=sfname, FileFormat:=xlCSV
MsgBox "保存成功!"
ActiveWorkbook.Close savechanges:=False
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-30 19:54 | 显示全部楼层
Sub 创建文本文件()
    Dim fso   As New Scripting.FileSystemObject
    Dim ostream As Scripting.TextStream
    Dim sfname As String
    Dim str1 As String
    sfname = Application.InputBox(prompt:="请输入文本文件的名称", _
    Title:="输入文件名称", Type:=2)
    If sfname = "False" Or sfname = "" Then Exit Sub
    sfname = ThisWorkbook.Path & "\" & sfname & ".txt"
    Set ostream = fso.CreateTextFile(Filename:=sfname, overwrite:=True)
    r = 2
    Do
        With Sheet1
            str1 = ""
            For i = 1 To 3
                str1 = str1 & .Cells(r, i) & ","
            Next
        End With
        ostream.WriteLine Left(str1, Len(str1) - 1)
    Loop Until IsEmpty(Sheet1.Cells(r, 1))
    ostream.Close
    MsgBox "文本文件创建成功!"
    Set ostream = Nothing
    Set fso = Nothing
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-1-30 20:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-30 20:04 | 显示全部楼层
Sub 添加数据到文本文件()
Dim fso As New Scripting.FileSystemObject
Dim ostream As Scripting.TextStream
Dim sfname As String
sfname = Application.InputBox(prompt:="请输入文本文件的名称", _
Title:="请输入文件名称", Type:=2)
If sfname = "False" Or sfname = "" Then Exit Sub
sfname = ThisWorkbook.Path & "\" & sfname & ".txt"
If Not fso.FileExists(sfname) Then
    MsgBox "该文件不存在!", vbInformation + vbOKOnly
    Exit Sub
End If
Set ostream = fso.OpenTextFile(Filename:=sfname, IOMode:=ForAppending)
With ostream
    .WriteLine "追加第1行数据!"
    .WriteLine "追加第2行数据!"
    .WriteLine "追加第3行数据!"
End With
ostream.Close
MsgBox "文本文件追加数据成功!"
Set ostream = Nothing
Set fso = Nothing
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-30 20:12 | 显示全部楼层
Sub 读取文本文件数据()
Dim fso As New Scripting.FileSystemObject
Dim ostream As Scripting.TextStream
Dim sfname As String
Dim str1 As String
sfname = Application.InputBox(prompt:="请输入文本文件的名称", _
Title:="输入文件名称", Type:=2)
If sfname = "False" Or sfname = "" Then Exit Sub
sfname = ThisWorkbook.Path & "\" & sfname & ".txt"
If Not fso.FileExists(sfname) Then
    MsgBox "该文件不存在!", vbInformation + vbOKOnly
    Exit Sub
End If
Set osteam = fso.OpenTextFile(Filename:=sfname, IOMode:=ForReading)
str1 = osteam.ReadAll
osteam.Close
MsgBox str1
Set ostream = Nothing
Set fso = Nothing
End Sub

评分

1

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 21:43 , Processed in 0.033533 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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