当打开客户端日志文件时,我正在与excel vba宏进行斗争,该宏将用主日志电子表格中的值更新电子表格的内容(称为客户活动日志)。我使用的方法是复制和粘贴单元格,因为当我试图直接分配值时,我总是会收到错误。我知道这是一种糟糕的形式,我在客户机日志宏崩溃时存在稳定性问题,有时原因不明。因此,我试图清理(并避免复制不必要的格式)。
我现在做的是:
Private Sub Workbook_Open()
    ...
    Run "Sheet2.UpdateActivites"
End SubSheet2:的代码
Sub UpdateActivites() 
...   
Set MasterClientListWb = _
    Workbooks.Open(pathToMasterLogs & "Master Client Database.xlsx")
Set MasterClientListWs = MasterClientListWb.Sheets("Sheet1")
MasterClientListWs.Range("A2").Select
For i = 1 To MasterClientListWs.UsedRange.Rows.Count
    If ActiveCell.Value = clientNumber Then
        ' Sets last name
        ActiveCell.Offset(columnoffset:=1).Copy
        Me.Range("C1").PasteSpecial
        ' A lot more similar statements
     End If
Next i据我所知,我应该做的更像是:
 Me.Cells("C1").Value = ActiveCell.Offset(columnoffset:=1).Value但是,这会在运行时抛出一个错误。我怀疑我可能指的是我正在打开的文件与正在以某种方式运行宏错误的文件。
我真的很感激任何帮助,我在vba方面的经验很少,这无疑表明了这一点。谢谢
发布于 2014-04-16 19:52:06
我认为这个样本会帮助你锁定你想要做的事情:
Option Explicit
Sub UpdateActivites()
'...other stuff
Dim MasterClientListWb As Workbook
Dim MasterClientListWs As Worksheet
Dim LastRow As Long
Set MasterClientListWb = Workbooks.Open(pathToMasterLogs & "Master Client Database.xlsx")
Set MasterClientListWs = MasterClientListWb.Sheets("Sheet1")
LastRow = MasterClientListWs.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For i = 1 To LastRow
    If MasterClientListWs.Cells(i, 1).Value = clientNumber Then '<~~ if column A value matches client number
        MasterClientListWs.Cells(i, 3) = MasterClientListWs.Cells(i, 2).Value '<~~assign value to column C (i.e. column 3)
    End If
Next i
'...other stuff
End Subhttps://stackoverflow.com/questions/23118655
复制相似问题