Excel VBA将字符串转换为另一个单元格

问题描述 投票:0回答:1

我正在尝试创建一个在A列中写入任何内容后运行多个VBA脚本的Excel表格。

我想要帮助的一部分是用A列(任意行)写的字符2,3和4应该写在同一行的列中。如果我从A列中删除文本,我还想删除任何信息。

enter image description here

我已经设法创建一个脚本,在将信息写入A列中的单元格后调用模块

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub
    Application.EnableEvents = False 'to prevent endless loop
    On Error GoTo Finalize 'to re-enable the events
    Call Modul1.Module
Finalize:
    Application.EnableEvents = True
End Sub

任何帮助将非常感激。


这就是我现在所拥有的。它不能清除所有行中的值,只有其中一些?!

Sub Lokation()

Dim n As Long, i As Long, j As Long
n = Cells(Rows.Count, "A").End(xlUp).Row
j = 2
For i = 2 To n
    If Cells(i, "A").Value = vbNullString Then

    Cells(j, "D").Value = ("")

    Else

    Cells(j, "D").Value = Mid(Cells(j, "A").Value, 2, 3)

    End If
   j = j + 1
Next i
End Sub
excel-vba vba excel
1个回答
1
投票

如果使用以下内容,您可以在Worksheet_Change事件中包装整个部分:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim columnAcell As Range

    If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub

    Application.EnableEvents = False

    For Each columnAcell In Target.Cells
        columnAcell.Offset(0, 3) = Mid(columnAcell, 2, 3)
    Next

    Application.EnableEvents = True

End Sub

我没有专门写入D列,而是使用了Target的3列单元格偏移量。由于此代码仅查看当前的A列,因此它将始终偏移到D列。

值得注意的事项 -

  • 改变包含标题的单元格(A1)将导致单元格(D1)被改变。您可以通过将Intersect范围从A:A更改为类似A2:Axxxx来防止这种情况
  • 删除整个列A将导致循环运行很长时间,更不用说导致列D移动到列C.您可能希望阻止用户执行此操作。
© www.soinside.com 2019 - 2024. All rights reserved.