首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当单元格更改时,VBA调用宏来分割单元格

当单元格更改时,VBA调用宏来分割单元格
EN

Stack Overflow用户
提问于 2022-04-02 20:07:28
回答 2查看 73关注 0票数 1

尝试创建一个宏,该宏自动调用另一个宏以提取输入字符串的部分并插入到其他两个单元格中。当手动调用单元格时,拆分宏可以工作,但无法使其自动触发。

代码语言:javascript
复制
Sub splitEnvServ()
'
' Macro3 Macro
'

'
Selection.TextToColumns destination:=ActiveCell.Offset(, 2), DataType:=xlDelimited, \_
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, \_
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar \_
\:="/", FieldInfo:=Array(Array(1, 9), Array(2, 9), Array(3, 9), Array(4, 9), Array(5, \_
9), Array(6, 9), Array(7, 9), Array(8, 9), Array(9, 9), Array(10, 9), Array(11, 9), Array(12 \_
, 9), Array(13, 9), Array(14, 1), Array(15, 9), Array(16, 1), Array(17, 9), Array(18, 9)), \_
TrailingMinusNumbers:=True
End Sub

'
' Part that won't trigger
'
'

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("B13")) Is Nothing Then splitEnvServ
End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-03 19:19:11

工作表更改:将单元格拆分为行

代码语言:javascript
复制
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ClearError
    
    Const cAddress As String = "B13"
    
    Dim iCell As Range: Set iCell = Intersect(Range(cAddress), Target)
    If iCell Is Nothing Then Exit Sub
    
    Application.EnableEvents = False
    SplitEnvServ iCell
    
SafeExit:
    On Error Resume Next
        If Not Application.EnableEvents Then Application.EnableEvents = True
    On Error GoTo 0
    Exit Sub

ClearError:
    Debug.Print "Run-time error '" & Err.Number & "': " & Err.Description
    Resume SafeExit
End Sub

Sub SplitEnvServ(ByVal Cell As Range)
    
    Const Delimiter As String = "/"
    Const ColumnOffset As Long = 1
    
    With Cell.Offset(, ColumnOffset)
        Dim lCell As Range: Set lCell = .Resize(, Columns.Count - .Column + 1) _
            .Find("*", , xlFormulas, , , xlPrevious)
        If Not lCell Is Nothing Then
            .Resize(, lCell.Column - .Column + 1).ClearContents
        End If
    End With
    
    Dim Sentence As String: Sentence = CStr(Cell.Value)
    If Len(Sentence) = 0 Then Exit Sub
    
    Dim Words() As String: Words = Split(Sentence, Delimiter)
    
    Cell.Offset(, ColumnOffset).Resize(, UBound(Words) + 1).Value = Words
    
End Sub
票数 1
EN

Stack Overflow用户

发布于 2022-04-02 20:54:21

在你的潜艇里你错过了结局。尝试:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("B13")) Is Nothing Then
splitEnvServ
End If
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71720828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档