当前位置: 首页 > 知识库问答 >
问题:

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

秋光熙
2023-03-14

我和几个同事每两周从导出的数据中格式化报告。我想创建一个宏,我可以分发给每个人,他们所做的就是在他们导出到本地机器的数据上尽可能少的步骤运行宏。我创建了一个宏,但我无法让它工作,因为目标工作簿(thisworkbook.activeSheet)是我的“personal.xlsb”(位于“xlstart”文件夹中并承载宏),而不是它需要的工作簿(每个人每周都会更改)。主要问题是,每当我运行宏时,来自“end_of_report.xlsx”的数据将不会复制和粘贴,因为它试图粘贴到“personal.xlsb”。

例如,我是位置2,萨利是位置3。我们都需要运行1月1日至1月7日的报告,因此将运行的文件(工作簿)对于my的位置是“jan1-jan7_1.xlsx”,对于Sally的位置是“jan1-jan7_2.xlsx”,并且两者都只包含“sheet1”。

当我打开visual basic时,打开的项目是“vbaProject(jan1-jan72.xlsx)”和“vbaProject(personal.xlsb)”,下面是模块1、模块2、Sheet1、thisworkbook。模块1用于位置1,模块2用于位置2。每当我尝试运行适当的宏时,它将执行所有操作,但将复制和粘贴我在宏中打开和关闭的工作簿中的数据。

子位置_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

.....昏暗范围选举为范围昏暗cellCurrent为范围

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-jan72.xlsx)

共有1个答案

奚翰海
2023-03-14

ThisWorkbook始终引用代码所在的文件。这就是为什么set wsDest=thisworkbook.activeSheet行将您的personal.xlsb设置为目标。

 类似资料:
  • 标题或多或少概括了它。我试图使一个简单的宏打开,然后复制/粘贴数据从txt文件到一个新打开的工作簿。我有什么工作,但它粘贴到个人工作簿,在打开一个新的“book1”之前。我可以让它粘贴到Book1,但我只想让它粘贴到打开的第一个工作簿中,以防以后我想在同一个文件中添加更多数据。我对此相当陌生,所以任何帮助都将不胜感激!!

  • 我写了下面的代码,并不断地看到。我试图克服这个问题,但似乎没有任何效果。我正试图从一个工作簿复制整个工作表,并将其粘贴到另一个工作簿中:

  • 这应该真的很简单,但我一直在拖网论坛和答案数小时来寻找答案,但没有运气,所以我(不情愿地)创造了一个我自己的问题。 我要做的只是简单地创建一个新工作簿,并将另一个工作簿的范围粘贴到该工作簿中。听起来很简单..? 我原来的工作簿,让我们叫Book1。我试图创建一个新的工作簿,Book2,我将把单元格A1:B10的值复制到其中。 以下是我代码的一个版本(从第一册打开开始): 这会给出一个“Range类

  • 我需要从一个工作簿复制棕褐色单元格并粘贴到另一个工作簿中。并且只需要在Excel中获取特定的单元格值。我实现了这一点,但只能粘贴到同一工作簿中的另一个工作表中。你能帮助我在粘贴数据到另一个工作簿上的一个特定的工作表,也应该粘贴的值在第二行,(即从第二行开始),因为第一行有标题在它。 源表标题: 项目阶段状态st Dt结束Dt预资源备注备注 Dest表标题: 现有代码:

  • 我有一段巧妙的代码,它根据指定单元格中的特定文本输入隐藏/隐藏表。在Book1中的Sheet1中(比方说),如果我改变单元格A1中的文本(比方说文本是苹果、橘子等),我会在同一本书中的sheet2上得到某些表格(让我们称之为答题卡)。 现在,在另一本书中,我有一个表,其中包含所有可能的文本值(Apple,oranges,等等)。我想写一个代码,首先通过这个表,使值在book1.sheet1(“sh

  • 作为预先警告,我是使用VBA的新手。 我已经拼凑了以下代码来执行以下操作:1。找到工作表“intrastat”2。复制此工作表3的使用范围。作为值粘贴到新工作簿4中。重新格式化B5栏中的日期。将工作簿保存在原始工作簿的位置。 然而,只有当我将宏保存在原始工作簿中时,这才起作用。我需要的是能够有宏保存在一个不同的工作簿和运行宏,我需要能够选择“原始”工作簿从一个文件位置在我的硬盘。 有什么想法吗?