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

时间:2018-01-03 12:39:53

标签: excel-vba vba excel

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

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

enter image description here

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

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

1 个答案:

答案 0 :(得分: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列。您可能希望阻止用户执行此操作。