VBA-Excel使用文件名附加每个活动行

VBA-Excel使用文件名附加每个活动行,excel,vba,Excel,Vba,我是VBA新手,所以请容忍我。我想在每个活动行的最后一个单元格中附加文件名。例如,行/列A1、B1、C1和D1被填充,我想将文件名添加到单元格E1。文件名只应附加到活动行。我玩过不同的迭代,运气不好。以下是我到目前为止的情况,逻辑显然是错误的。任何帮助都将不胜感激。谢谢 子插入文件名 Dim Count1 As Long Count1 = 1 Dim ColumnE As String ColumnE = "E1" While Cells(Count1, 1) <> "" Ran

我是VBA新手,所以请容忍我。我想在每个活动行的最后一个单元格中附加文件名。例如,行/列A1、B1、C1和D1被填充,我想将文件名添加到单元格E1。文件名只应附加到活动行。我玩过不同的迭代,运气不好。以下是我到目前为止的情况,逻辑显然是错误的。任何帮助都将不胜感激。谢谢

子插入文件名

Dim Count1 As Long
Count1 = 1
Dim ColumnE As String
ColumnE = "E1"


While Cells(Count1, 1) <> ""
Range(ColumnE).Select
ActiveCell.FormulaR1C1 = _
    "=MID(CELL(""filename""),SEARCH(""["",CELL(""filename""))+1, SEARCH(""]"",CELL(""filename""))-SEARCH(""["",CELL(""filename""))-1)"
ColumnE = Range(ActiveCell, ActiveCell.Offset(1, 0)).Select
Count1 = Count1 + 1
Wend

End Sub

此代码从第一行到最后一行进行迭代,并通过模仿工作表边缘的CTRL+LEFT来查找每行中的最后一列

它并不假定所有行的列数都相同

Dim LastRow As Long
Dim LastColumn As Long
Sub InsertFileName()
  Application.ScreenUpdating = False
  Dim i as Long
  LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
  For i=1 To LastRow
    LastColumn = ActiveSheet.Cells(i, ActiveSheet.Columns.Count).End(xlToLeft).Column
    ActiveSheet.Cells(i,LastColumn+1)="=CELL(""filename"")"
  Next i
  Application.ScreenUpdating = True
End Sub

一个简单的解决方案。为要追加的文件名和数据的起始行stRow添加值

Sub InsertFilename()
Dim stRow As Long, endRow As Long, endCol As Long, c As Long
Dim fileName As String

fileName = "C:\Data\somefile.xlsx"
stRow = 1
    With ActiveSheet
        endRow = .Cells(Rows.Count, 1).End(xlUp).Row
            For c = stRow To endRow
                endCol = .Cells(c, Columns.Count).End(xlToLeft).Column
                    If endCol > 1 Then
                        .Cells(c, endCol + 1) = fileName
                    End If
            Next
    End With
End Sub

此解决方案使用Counta测试活动,并使用每个活动行的最后一列来使用活动工作簿的全名

Dim lngLastRow As Long
Dim lngLastCol As Long
Dim lngCounter As Long

lngLastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lngLastCol = Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

For lngCounter = 1 To lngLastRow
    If WorksheetFunction.CountA(Range(Cells(lngCounter, 1), Cells(lngCounter, lngLastCol))) > 0 Then
        Cells(lngCounter, lngLastCol + 1).End(xlToLeft).Offset(0, 1).Value = ActiveWorkbook.FullName
    End If
Next lngCounter

很好用!谢谢你花时间和解释。