首页 文章

如何在Excel中返回行进 Ant 的位置?

提问于
浏览
2

我知道Application.CutCopyMode,但它只返回CutCopyMode的状态(False,xlCopy或xlCut) .

如何使用VBA在Excel中返回当前复制范围的地址?我不需要当前选择的范围(即Application.Selection.Address) . 我需要围绕它移动边界(行进 Ant )的细胞范围的地址 .

换句话说,如果您选择一系列单元格,按CTRL C,然后将选择移动到另一个单元格,我需要用户按CTRL C时选择的单元格的地址 .

谢谢!

3 回答

  • 4

    据我所知,你无法用vba做到这一点 . 但是,您可以编写自己的副本子并将源存储在全局变量中 .

    像这样的东西:

    Option Explicit
    Dim myClipboard As Range
    
    Public Sub toClipboard(Optional source As Range = Nothing)
        If source Is Nothing Then Set source = Selection
        source.Copy
        Set myClipboard = source
    End Sub
    
  • 0

    复制范围时,地址将与其他格式一起复制到剪贴板 . 您可以使用Clipboard Viewer应用程序进行检查 . 因此,如果您需要复制的Range,请从剪贴板中获取它 . 这将是> $ A2:$ B5或类似的东西

  • 1

    我能想到这样做的唯一方法是跟踪用全局变量选择的最后一个范围,然后等到你认为复制操作完成 . 不幸的是,这既不容易

    以下是一个有两个问题的快速尝试;

    • 如果您复制两次相同的数据,则不会更新

    • 如果从其他应用程序触发了复制或粘贴,则结果可能会有所不同 .

    这是跟踪不存在的事件时最后的希望技巧之一 . 希望这可以帮助 .

    ''# Add a reference to : FM20.dll or Microsoft Forms 2.0
    ''# Some more details at http://www.cpearson.com/excel/Clipboard.aspx
    
    Option Explicit
    
    Dim pSelSheet As String
    Dim pSelRange As String
    
    Dim gCopySheet As String
    Dim gCopyRange As String
    
    Dim gCount As Long
    Dim prevCBText As String
    
    Dim DataObj As New MSForms.DataObject
    
    
    
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
            ByVal Target As Excel.Range)
    
        CopyTest
        pSelSheet = Sh.Name
        pSelRange = Target.Address
    
    
        ''# This is only so you can see it working
        gCount = gCount + 1
        application.StatusBar = gCopySheet & ":" & gCopyRange & ", Count: " & gCount
    End Sub
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
        CopyTest ''# You may need to call CopyTest from other events as well.
    
        ''# This is only so you can see it working
        gCount = gCount + 1
        application.StatusBar = gCopySheet & ":" & gCopyRange & ", Count: " & gCount
    End Sub
    
    
    
    
    Sub CopyTest()
        Dim curCBText As String
        Dim r As Range
        DataObj.GetFromClipboard
    
        On Error GoTo NoCBData
          curCBText = DataObj.GetText
        On Error Resume Next
    
    
        ''# Really need to test the current cells values
        ''# and compare as well. If identical may have to
        ''# update the gCopyRange etc.
    
        If curCBText <> prevCBText Then
          gCopySheet = pSelSheet
          gCopyRange = pSelRange
          prevCBText = curCBText
        End If
    
      Exit Sub
    
    
    NoCBData:
      gCopySheet = ""
      gCopyRange = ""
      prevCBText = ""
    End Sub
    

    哦,并原谅那些奇怪的评论''#他们只是在那里帮助SO的语法高亮显示 .

相关问题