与多个用户共享的宏不会复制/粘贴到工作簿中

时间:2019-07-18 14:12:13

标签: excel vba

我本人和几个同事每两周从导出的数据中格式化报告。我想创建一个宏,我可以分发给每个人,在这些人中,他们所做的全部工作就是对导出到本地计算机上的数据执行尽可能少的步骤。我创建了一个宏,但是由于目标工作簿(ThisWorkbook.Activesheet)是我的“ PERSONAL.XLSB”(位于“ XLSTART”文件夹中并托管该宏),因此无法使它工作,而不是它所需的工作簿(每个人每周都会更改)。主要问题在于,每当我运行宏时,“ END_OF_REPORT.xlsx”中的数据都不会复制并粘贴,因为它正尝试粘贴到“ PERSONAL.XLSB”中。

例如,我在位置2,萨利在位置3。我们都需要为1月1日至1月7日运行报告,因此要运行的文件(工作簿)将为“ jan1-jan7_1.xlsx”位置,以及“ jan1-jan7_2.xlsx”作为sally的位置,并且都将仅包含“ Sheet1”。

当我打开Visual Basic时,打开的项目是“ VBAProject(JAN1-JAN7_2.xlsx)”和“ VBAProject(PERSONAL.XLSB)”,在该项目下是模块1,模块2,Sheet1,ThisWorkbook。模块1用于位置1,模块2用于位置2。每当我尝试运行适当的宏时,它都会执行所有操作,但要复制并粘贴从宏中打开和关闭的工作簿中的数据。

子LOCATION_ONE_TRANS()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic

Workbooks.Open "\\FILEPATH\END_OF_REPORT.xlsx"

Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim CopyLastRow As Long
Dim DestLastRow As Long

'Replace 1 with appropriate location
Set wsCopy = Workbooks("END_OF_REPORT.xlsx").Worksheets("1")
Set wsDest = ThisWorkbook.ActiveSheet

CopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
DestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row

wsCopy.Range("A1:E" & CopyLastRow).Copy _
    wsDest.Range("A" & DestLastRow)
Workbooks("END_OF_REPORT.xlsx").Close SaveChanges:=False

ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range _
    ("A:A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

Cells.Select

With Selection.Font
    .Name = "Arial"
    .Size = 12
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
    .ThemeFont = xlThemeFontNone
End With

... ...     昏暗范围选择作为范围     昏暗的电池电流作为范围

Set rangeSelection = Application.Selection.Columns(1).Cells
ActiveSheet.ResetAllPageBreaks

For Each cellCurrent In rangeSelection
    If (cellCurrent.Row > 1) Then
        If (cellCurrent.Value <> cellCurrent.Offset(-1, 0).Value) Then
            ActiveSheet.Rows(cellCurrent.Row).PageBreak = _
                xlPageBreakManual
        End If
    End If
Next cellCurrent
Selection.RowHeight = 36.6
Cells.EntireColumn.AutoFit
Application.WindowState = xlMaximized
ActiveWindow.Zoom = 50
ActiveSheet.Range("A1").Select
ActiveWorkbook.Save

结束子

应该发生的是,我与同事共享宏,以便他们只需要打开需要运行宏的工作簿,启用宏,因为他们将宏保存到了“ XLSTART”,然后运行宏。实际发生的事情是,当任何人运行宏时,工作表正在格式化,但复制/粘贴的数据并未将其写入正确的工作簿(即JAN1-JAN7_2.xlsx)

1 个答案:

答案 0 :(得分:0)

ThisWorkbook始终引用代码所在的文件。这就是Set wsDest = ThisWorkbook.ActiveSheet行将您的Personal.xlsb设置为目的地的原因。