Код не работает при ссылке на другую книгу - PullRequest
0 голосов
/ 06 февраля 2020

Я работаю над макросом, в котором, когда я нажимаю одну кнопку в рабочей книге, код выполняется в другой рабочей книге. Он уже работает, если я выполняю его из уникальной рабочей книги, но я не могу заставить его работать с кнопкой из внешней рабочей книги, и я не уверен, когда и как ссылаться правильно.

Это код, в котором я пытаюсь вставить строку сверху, вставить функцию столбца и перетащить ее до конца:

Private Sub CommandButton1_Click()

Dim lastColumn As Integer
Dim rng_source As Range
Dim rng_Destination As Range
Dim l_SourceRows As Long

Set ws = Workbooks("TEST")

ws.Activate

 ActiveSheet.Name = "Sheet1"


 ' Insert row and formula

  ws.Worksheets("LV").Activate
    ws.Sheets("LV").Rows("1:1").Select
     Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
       ws.Sheets("LV").Range("A1").Select
         ActiveCell.FormulaR1C1 = "=COLUMN(C)"

' Drag formula until last column

    Set rng_source = ws.Sheets("LV").Range("A1")
       l_SourceRows = rng_source.Rows.Count
         lastColumn = ws.Sheets("LV").Cells(2, Columns.Count).End(xlToLeft).Column

    Set rng_Destination = ws.Sheets("LV").Range(rng_source.Cells(1), Cells(rng_source.Cells(1), lastColumn))
       rng_source.AutoFill Destination:=rng_Destination, Type:=xlFillDefault


End Sub

1 Ответ

0 голосов
/ 06 февраля 2020

оставляя пока оставшуюся часть вашего кода в одиночку, для чего нужно следующее: установите «ws» для обозначения книги с именем «TEST» (я думаю, она должна быть уже открыта). Затем вы активируете его и дадите какой бы то ни было лист на имя «Лист1». После этого вы активируете лист «LV» в этом листе «TEST». Я не уверен, что вы пытаетесь сделать с этими шагами?

Set ws = Workbooks("TEST")

ws.Activate

 ActiveSheet.Name = "Sheet1"

 ' Insert row and formula

  ws.Worksheets("LV").Activate
    ws.Sheets("LV").Rows("1:1").Select

Я предполагаю, что вы хотите нажать кнопку, открыть другой лист и затем ввести свой код на этом листе? Как насчет того, чтобы просто скопировать весь код, создать новую подпрограмму и затем изменить строку набора на то, что открывает другую рабочую книгу? Может быть, так:

Sub test()

Dim lastColumn As Integer
Dim rng_source As Range
Dim rng_Destination As Range

'Filepath of the file in some cell on the workbook (Pick one)
    FilePath = ThisWorkbook.Sheets("NameOfTheSheet").Range("B2").Value

'Filepath of the file hard coded in here, simply copy the path and name (Pick one)
    FilePath = "C:\Users\TheMan\Desktop\Test.xlsx"

'Open the file
    Set ws = Workbooks.Open(FilePath, ReadOnly:=False)

'Now you do everything with the other workbook that you did to "ws" before.
'Not sure you really need/want this.
    ws.Activate
    ActiveSheet.Name = "Sheet1"


'Insert row and formula
    ws.Worksheets("LV").Rows(1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    ws.Worksheets("LV").Range("A1").FormulaR1C1 = "=COLUMN(C)"

' Drag formula until last column
    lastColumn = ws.Worksheets("LV").Cells(2, Columns.Count).End(xlToLeft).Column

    Set rng_source = ws.Sheets("LV").Range("A1")
    Set rng_Destination = ws.Sheets("LV").Range(rng_source.Cells(1), Cells(rng_source.Cells(1), lastColumn))

    rng_source.AutoFill Destination:=rng_Destination, Type:=xlFillDefault

End Sub

Если честно, я не совсем понимаю, что вы пытаетесь делать со своим кодом. Я использую немецкий Excel, но для меня формула "= COLUMN (C)" в основном просто нумерует первую строку. Также вы устанавливаете диапазон («А1»), а затем запрашиваете строку этого диапазона. Почему? его всегда 1 и никогда не привыкаешь. Но если по какой-то другой причине вам действительно нужно его перетащить, см. Отредактированный код.

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