Модуль работает в неправильной книге - PullRequest
0 голосов
/ 05 июня 2018

Поэтому я пытаюсь скопировать некоторые ячейки из одной рабочей книги и вставить их в другую с помощью следующего кода:

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 голосов
/ 07 июня 2018

Чтобы решить мою проблему с кодом, вставляющим скопированную информацию в Book.xlsx, а не в Finder.xlsx, куда она предназначена, я удалил секцию Set y = Workbooks.Open("C:\Users\me\Documents\Keyence\Finder.xlsm") и заменил секцию y.Sheets("Sheet1").Range("C3").PasteSpecial на ThisWorkbook.Sheet("Sheet1").Range("C3").PasteSpecial.Это изменение привело к тому, что информация была вставлена ​​в правильные ячейки в правильной рабочей книге.

Чтобы решить проблему с кодом форматирования, изменив и Finder.xlsx (что предполагается сделать), и Book.xlsx (которыйэто не должно делать), я использовал совет @ PEH.Сначала код выглядел примерно так:

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

Это говорит коду форматирования, какую рабочую книгу и лист необходимо отформатировать.

Окончательный код с обоимиИсправления выглядят так:

Sub Finder()
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

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

Dim x As Workbook

Set x = Workbooks.Open("C:\Users\me\Documents\Keyence\Book.xlsx")
x.Sheets("Sheet1").Range("C18:I18").Copy
ThisWorkbook.Sheet("Sheet1").Range("C3").PasteSpecial

End Sub

Надеюсь, это поможет кому-нибудь в будущем.

0 голосов
/ 06 июня 2018

Поскольку вы не указали, в каком листе находятся диапазоны, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...