如何将vba结果存到Quicker变量里?

动作需求 · 3422 次浏览
Qiu Cool 创建于 27天4小时前

比如我写了一个 Excel  VBA 来获取当前合并单元格的首行和尾行行号,我希望把行号存到 Quicker 的变量里,方便后续进行其他操作,据说用函数function可以,但不会用诶,可以教一下嘛

▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰
Sub 获取合并单元格首尾行号_兼容版()
    Dim rng As Range
    Dim firstCell As Range
    Dim mergeRng As Range
    Dim firstRow As Long, lastRow As Long
    
    ' 1. 基础校验
    If TypeName(Selection) <> "Range" Then
        MsgBox "请选中单元格!", vbExclamation
        Exit Sub
    End If
    Set rng = Selection
    
    ' 2. 取选中区域的【第一个单元格】,再获取它的合并区域(核心修复!)
    Set firstCell = rng.Cells(1)
    
    ' 3. 判断是否为合并单元格
    If firstCell.MergeCells Then
        Set mergeRng = firstCell.MergeArea ' 获取完整合并区域
        firstRow = mergeRng.Row           ' 合并单元格首行
        lastRow = mergeRng.Row + mergeRng.Rows.Count - 1 ' 合并单元格尾行
        
        ' 仅弹窗1次!
        MsgBox "合并单元格跨越:" & mergeRng.Address & vbCrLf & _
               "首行行号:" & firstRow & vbCrLf & _
               "尾行行号:" & lastRow, vbInformation
    Else
        MsgBox "当前选中单元格不是合并单元格!", vbExclamation
    End If    
    ' 释放对象
    Set rng = Nothing
    Set firstCell = Nothing
    Set mergeRng = Nothing
End Sub

▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰
' 函数1:获取合并单元格的【首行行号】
' 使用方法:单元格输入 =GetMergeFirstRow(选中单元格)
' ==============================================
Function GetMergeFirstRow(rng As Range) As Long
    On Error Resume Next
    ' 取第一个单元格,避免多单元格报错
    Set rng = rng.Cells(1)
    ' 判断是否为合并单元格
    If rng.MergeCells Then
        GetMergeFirstRow = rng.MergeArea.Row
    Else
        GetMergeFirstRow = rng.Row ' 非合并单元格返回自身行号
    End If
    On Error GoTo 0
End Function

' ==============================================
' 函数2:获取合并单元格的【尾行行号】
' 使用方法:单元格输入 =GetMergeLastRow(选中单元格)
' ==============================================
Function GetMergeLastRow(rng As Range) As Long
    On Error Resume Next
    Set rng = rng.Cells(1)
    If rng.MergeCells Then
        ' 计算合并区域最后一行
        GetMergeLastRow = rng.MergeArea.Row + rng.MergeArea.Rows.Count - 1
    Else
        GetMergeLastRow = rng.Row ' 非合并单元格返回自身行号
    End If
    On Error GoTo 0
End Function


回复内容
沉没的白鲸 26天17小时前
#1

参考文档 

Office软件辅助

https://getquicker.net/KC/Help/Doc/officehelper#M1pXK:~:text=%E4%BB%8EFunction-,%E6%96%B9%E6%B3%95%E4%B8%AD%E8%BF%94%E5%9B%9E%E7%9A%84%E5%86%85%E5%AE%B9,-%E3%80%821.39.31%2B%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81

微调 函数2 

Function GetMergeLastRowSC As Long
    Dim rng As Range
    Set rng = Selection.Cells(1)
    On Error Resume Next
    If rng.MergeCells Then
        ' 计算合并区域最后一行
        GetMergeLastRowSC = rng.MergeArea.Row + rng.MergeArea.Rows.Count - 1
    Else
        GetMergeLastRowSC = rng.Row ' 非合并单元格返回自身行号
    End If
    On Error GoTo 0
End Function



Qiu Cool 回复 沉没的白鲸 26天13小时前 :

感谢!

Qiu Cool 最后更新于 26天13小时前
Qiu Cool 回复 沉没的白鲸 26天13小时前 :

我在Quicker里运行这个函数后,获取到了行号,把它存入变量,进行下一步操作时模拟输入了 F2,然后Excel 就自动打开了【Microsoft Visual Basic for Applications】窗口,导致剩余动作运行失败,请问知道这是什么原因不?突然发现用 VBA 代码的时候,好像也有这个问题

找到原因了,豆包说是有vba残留,不要用 F2 键入,改用这个模块输入内容

Qiu Cool 最后更新于 26天13小时前
回复主贴