Используйте переменное имя файла для переключения между книгами - PullRequest
0 голосов
/ 10 января 2019

В моей организации работает несколько приложений Excel VBA.

В приложениях были жестко запрограммированы имена всех сотрудников, но это означало, что я должен был изменить их сам Чтобы избавиться от этой зависимости, я создал один файл Excel со всеми именами сотрудников. Когда в этот список добавляются новые люди, для обновления имен можно запускать макрос во всех приложениях. Этот макрос работает.

Задача

Имена файлов могут меняться годами (и с изменениями версии), но я все же хочу, чтобы приложение работало при изменении имени файла. Это проблема, потому что я ссылаюсь на это имя файла, потому что я переключаюсь между книгами несколько раз.

Итак, я кодировал, что имя файла (которое является переменным) копируется в другой файл. Тогда я Dim Filename as Range и, следовательно, Set Filename=Range("A1"). Я хочу использовать это в Windows(FileName).Activate, но я получаю несоответствие типа ошибки 13. Я не понимаю, почему это не работает, потому что, когда я отлаживаю, я вижу, что он правильно установил имя файла.

set the filename properly

Sub Engineering()
Dim FileName As Range

Sheets("Info").Select
Set FileName = Range("A1")

Windows(FileName).Activate
'Here I get error 13 type mismatch


Sheets("Engineering").Select
Range("Tabel3[[#All],[Kolom1]]").Select
Application.CutCopyMode = False
Selection.ClearContents
Application.CutCopyMode = False

Windows("Personeelsnamen.xlsx").Activate
Sheets("Engineering").Select
Range("Tabel3[[#All],[Kolom1]]").Select
Application.CutCopyMode = False
Selection.Copy

Windows(FileName).Activate
'Range("Tabel14[@Kolom1]").Select
ActiveSheet.Range("A1").Select
ActiveSheet.Paste

End Sub

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

Sub Knop17081_Klikken()
Dim myData As Workbook
Dim BestandsNaam As String

Sheets("RD & LTE").Visible = True
Sheets("CAM & LTE").Visible = True
Sheets("Engineering").Visible = True
Sheets("CAM").Visible = True
Sheets("LTE").Visible = True


Sheets("Input").Select
Range("L1").Value = ActiveWorkbook.Name

Range("L1").Select

Application.CutCopyMode = False
Selection.Copy

Set myData = Workbooks.Open("HyperlinkDirectlyToFile")

ActiveWindow.ActivatePrevious

Application.CutCopyMode = False
Selection.Copy
Windows("Personeelsnamen.xlsm").Activate
Sheets("Info").Select
ActiveSheet.Range("A1").Select
ActiveSheet.Paste

Call Engineering
Call CAM
Call LTE
myData.Close
Call CombineerCAMenLTE
Call CombineerRDenLTE

Sheets("RD & LTE").Visible = False
Sheets("CAM & LTE").Visible = False
Sheets("Engineering").Visible = False
Sheets("CAM").Visible = False
Sheets("LTE").Visible = False

End Sub

1 Ответ

0 голосов
/ 10 января 2019

Как показывает ошибка, переменная неверного типа. Это диапазон, в то время как объект Windows () нуждается в строковой переменной.

Пожалуйста, попробуйте этот способ и скажите мне, если это работает

Sub Engineering()
Dim FileName As String

FileName = Worksheets("Info").Range("A1").Value

Windows(FileName).Activate
...