模块在错误的工作簿中运行

时间:2018-06-05 12:36:58

标签: excel-vba vba excel

所以我试图从一个工作簿中复制一些单元格并使用以下代码将它们粘贴到另一个工作簿中:

Sub Finder()
Range("C2").Value = "Measurement"
Range("C2").ColumnWidth = 13

Range("D2").Value = "Unit"
Range("D2").ColumnWidth = 5

Range("E2").Value = "Balloon"
Range("E2").ColumnWidth = 8

Range("F2").Value = "Nominal Value"
Range("F2").ColumnWidth = 14

Range("G2").Value = "+Tolerance"
Range("G2").ColumnWidth = 11

Range("H2").Value = "-Tolerance"
Range("H2").ColumnWidth = 11

Range("I2").Value = "Pass/Fail"
Range("I2").ColumnWidth = 8

Range("C2:I2").Font.Bold = True
Range("C2:I2").HorizontalAlignment = xlCenter

With Range("C2:I2").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    End With

Dim x As Workbook
Dim y As Workbook

Set x = Workbooks.Open("C:\Users\me\Documents\Keyence\Book.xlsx")
Set y = Workbooks.Open("C:\Users\me\Documents\Keyence\Finder.xlsm")

x.Sheets("Sheet1").Range("C18:I18").Copy

y.Sheets("Sheet1").Range("C3").PasteSpecial

End Sub

然而,每当我运行代码时,它都会复制Book.xlsx中的代码并将其粘贴到正确的范围内,但是在Book.xlsx中而不是在Finder.xlsm中。 我还在复制/粘贴部分之前有一些单元格格式代码,并且该代码在Finder.xlsm和Book.xlsx中执行。

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

因为你没有指定范围在哪个工作表中,所以Excel开始猜测你指的是哪个范围(并且它可能猜错了)。

因此,最好始终指定工作簿(如果与ThisWorkbook不同)和范围所在的工作表。

例如:

ThisWorkbook.Worksheets("SheetName").Range("C2").Value = "Measurement"

如果您多次使用同一张纸,最好为其设置一个变量(或者至少使用With语句:

Dim WsToFormat As Worksheet
Set WsToFormat = ThisWorkbook.Worksheets("SheetName")

With WsToFormat
    .Range("C2").Value = "Measurement"
    .Range("C2").ColumnWidth = 13
End With

请注意,.开头的点.Range表示触发With语句。

答案 1 :(得分:0)

为了解决我在Book.xlsx中而不是在Finder.xlsx中粘贴复制信息的代码问题,我删除了library(dplyr) df %>% group_by(Data_point) %>% summarise_all(mean) 部分并替换了Set y = Workbooks.Open("C:\Users\me\Documents\Keyence\Finder.xlsm") y.Sheets("Sheet1").Range("C3").PasteSpecial部分。此更改导致信息粘贴到正确工作簿中的正确单元格。

为了解决修改Finder.xlsx(它本应该做的)和Book.xlsx(它不应该这样做)的格式化代码的问题,我使用了@ PEH的建议。起初代码看起来像这样:

ThisWorkbook.Sheet("Sheet1").Range("C3").PasteSpecial

但是这段代码没有指定格式应该发生的位置,所以它只是猜到了。为了解决这个问题,我改变它看起来像这样:

Sub Finder()
Range("C2").Value = "Measurement"
Range("C2").ColumnWidth = 13
Range("D2").Value = "Unit"
Range("D2").ColumnWidth = 5

这告诉格式化代码需要格式化哪个工作簿和工作表。

两个修复程序的最终代码如下所示:

Sub Setup()
Dim WsToFormat As Worksheet
Set WsToFormat = ThisWorkbook.Worksheets("Sheet1")

With WsToFormat
    .Range("C2:D2").Interior.Color = RGB(83, 235, 231)
    .Range("C4").Value = "Date/Time"
    .Range("D4").Value = "Measurement"
    .Range("D4").ColumnWidth = 13
End With
End Sub

希望这有助于将来的任何人。