ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 点击求和按钮之后没反应

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-29 17:27 | 显示全部楼层 |阅读模式
帮忙看看呢

新建 Microsoft Excel 工作表 (2).zip

21.8 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2024-3-30 08:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没有相关的测试文件,没有具体的需求说明,没法帮你的,

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-1 10:03 | 显示全部楼层
点击“打开文件”选择所需的工作簿,再在右侧选择工作表,然后选择需要求和的起始和结束列,按照A列单元格有1的连续单元格,在起始和结束列范围内进行逐一求和

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-1 10:08 | 显示全部楼层
Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Dim startCol As String
    Dim endCol As String
    Dim firstOneRow As Long
    Dim nonOneRow As Long
    Dim lastCol As Long
    Dim sumRange As Range
    Dim cell As Range
    Dim i As Long
    Dim j As Integer

    ' 设置工作表
    Set ws = ActiveSheet

    ' 获取用户输入的起始列和结束列
    startCol = TextBox1.Text
    endCol = TextBox2.Text

    ' 检查输入的列是否有效
    If Not IsColumnValid(startCol) Or Not IsColumnValid(endCol) Then
        MsgBox "输入的列标识符无效,请确保使用正确的列标识符(例如: A, B, AA)", vbExclamation, "无效输入"
        Exit Sub
    End If

    ' 计算结束列的列号
    lastCol = ColumnNumber(endCol)

    ' 从上往下遍历A列
    For i = 1 To ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        ' 检查当前行的A列单元格是否为1
        If ws.Cells(i, 1).Value = 1 Then
            firstOneRow = i
            nonOneRow = i + 1

            ' 寻找下一个值为1的行或直到表格末尾
            Do Until nonOneRow > ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Or ws.Cells(nonOneRow, 1).Value <> 1
                nonOneRow = nonOneRow + 1
            Loop

            ' 如果没有找到下一个值为1的行,则默认为超出表格范围
            If nonOneRow > ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Then
                nonOneRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
            End If

            ' 计算指定范围内的列和,并将结果单元格加粗
            For j = ColumnNumber(startCol) To lastCol
                Set sumRange = ws.Range(ws.Cells(firstOneRow, j), ws.Cells(nonOneRow - 1, j))
                ws.Cells(nonOneRow, j).Formula = "=SUM(" & sumRange.Address & ")"
               
                ' 设置求和结果单元格的字体为加粗
                ws.Cells(nonOneRow, j).Font.Bold = True
            Next j

            ' 跳过已处理过的行
            i = nonOneRow - 1
        End If
    Next i

    ' 清理
    Set ws = Nothing
    Set sumRange = Nothing
End Sub

' 辅助函数,用于将列标识符转换为列号
Function ColumnNumber(colStr As String) As Long
    Dim i As Integer
    Dim colNum As Long
    colNum = 0
    For i = 1 To Len(colStr)
        colNum = colNum * 26 + (Asc(Mid(colStr, i, 1)) - 64)
    Next i
    ColumnNumber = colNum
End Function

' 辅助函数,用于检查列标识符是否有效
Function IsColumnValid(colStr As String) As Boolean
    IsColumnValid = (Len(colStr) > 0) And (Asc(Left(colStr, 1)) >= 65 And Asc(Left(colStr, 1)) <= 90)
End Function





这是运行正常的版本,我想加一个工作簿和工作表选择需求。

TA的精华主题

TA的得分主题

发表于 2024-4-1 15:57 | 显示全部楼层
选择工作簿简单的,再选择工作表?这个少见。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:50 , Processed in 0.041623 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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