繁体   English   中英

Excel VBA-将单元格值设置为与所有非空白单元格相邻的变量

[英]Excel VBA - Set Cell Value to Variable Adjacent to All Cells that Are Not Blank

我有多个报告,需要按照特定的步骤将这些报告编译成一个主文件,然后在新数据的左侧添加一个日期。 需要遵循的步骤是:

  1. 在目录中打开文件
  2. 根据要在以后的步骤中使用的文件名设置一个变量(为此,我正在使用InputBox函数)
  3. 从该文件复制具有A列中数据的所有单元格
  4. 将单元格数据粘贴到我的主文件的B列中的第一个空白单元格中
  5. 如果B列中有数据并且A列中的相邻单元格为空,则将该单元格的值更改为在步骤2中选择的变量
  6. 关闭文件并打开目录中的下一个文件

因此,基本上,它需要打开文件X,将文件X的A列中的所有内容复制到母版的B列中,然后在母版的B列中为在B列中有数据的每一行插入一个日期

我停留在步骤5上,无法找到一种方法来查找步骤4中粘贴了数据的所有单元格,并将所有单元格的值直接设置在它们的左侧。

Option Explicit

Sub ImportGroups()
Dim fPATH As String, fNAME As String
Dim LR As Long, NR As Long
Dim wbGRP As Workbook, wsDEST As Worksheet
Dim dateChooser As Variant
Dim cell As Range


Set wsDEST = ActiveWorkbook.Sheets("Sheet1")


Application.DisplayAlerts = False

fPATH = "C:\<path>\"       'remember the final \ in this string

fNAME = Dir(fPATH & "*")        'get the first filename in fpath

Do While Len(fNAME) > 0
    Set wbGRP = Workbooks.Open(fPATH & fNAME)   'open the file
    LR = Range("A" & Rows.Count).End(xlUp).Row  'how many rows of info?

    If LR > 3 Then

        dateChooser = InputBox("Enter date based on this file name: " & fNAME)

        ActiveSheet.Range("A1:A" & LR).Copy
        wsDEST.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValue

        ' This is where I need to set the value of all cells adjacent to the pasted cells

    End If

    wbGRP.Close False   'close data workbook
        fNAME = Dir         'get the next filename
Loop
Application.DisplayAlerts = True

End Sub

也许是这样的。

  1. 您需要为每本工作簿(目标和导入)计算最后一行,而您当前正在为它看起来像的一本书进行计算。 对于您的目标书,每次粘贴到新范围时,第一行空白行( LR )都会更改,因此在打开另一本书之前,需要在循环内重新计算该行。 在您的导入书上,每个文件大概都有不同的行,因此这需要它自己的最后一行计算( LR2 )。
  2. 我对您的工作表的ws进行了限定,其中ws指向目标书上的Sheet1 然后,我们将使用wbGRP.Sheets(1) ,它将引用您打开的每本导入书上的第一张纸。 这可能需要纠正( 您的评论中有待回复
  3. 对于步骤5 ,您将需要遍历ws上新粘贴的数据。 这些行的存在位置可以从变量LRLR2推导出。 然后只需检查循环内Column A是否为空,并在所需列上输出dateChooser 我将dateChooser粘贴在此处的Column B也有待您回复评论
  4. 拥有Option Explicit荣誉。 我确实在这里重新组织了一些事情(在屏幕更新之外声明静态变量,对变量进行分组等)。

这未经测试。 在评论中遇到问题时将很乐意进行编辑


Option Explicit

Sub ImportGroups()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim fPATH As String, fNAME As String
Dim LR As Long, LR2 As Long, i As Long
Dim wbGRP As Workbook, dateChooser As Variant

fPATH = "C:\<path>\"
fNAME = Dir(fPATH & "*")

Application.DisplayAlerts = False
    Do While Len(fNAME) > 0
        Set wbGRP = Workbooks.Open(fPATH & fNAME)   'open the file
        LR = ws.Range("A" & Rows.Count).End(xlUp).Offset(1).Row  'how many rows of info?

        If LR > 3 Then
            dateChooser = InputBox("Enter date based on this file name: " & fNAME)
            LR2 = wbGRP.Sheets(1).Range("A" & wbGRP.Sheets(1).Rows.Count).End(xlUp).Row
            wbGRP.Sheets(1).Range("A1:A" & LR2).Copy
            ws.Range("B" & LR).End(xlUp).PasteSpecial xlPasteValues

            For i = LR To (LR + LR2 - 1)
                If ws.Range("A" & i) = "" Then ws.Range("B" & i) = dateChooser
            Next i
        End If

        wbGRP.Close False
        fNAME = Dir
    Loop
Application.DisplayAlerts = True

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM