Inputbox.Application Получить полный путь - PullRequest
0 голосов
/ 30 сентября 2019

Это мой первый пост. Я новичок в VBA и многому учусь благодаря этому форуму. Я пытаюсь создать макрос Excel, который сравнивает два набора данных с помощью Vlookup.

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

Два данных, которые мне нужно сравнить, могут быть на любом листе (это означает, что они должны быть переменными). Предположим, что в этом примере это Sheet1 и sheet 6.

Sheet1 (Пример - но должен быть переменным, так как пользователь выберет это)

Account Description Amount
100      Account1   1000
200      Account2   2000
300      Account3   3000

Sheet6 (Пример - Но нужныбыть переменным, так как пользователь выберет это)

Account Description Amount
200      Account2   500
300      Account3   1000
400      Account4   4000

Проблема в том, чтобы поднять лист. Я использую inputbox.application, чтобы позволить пользователю выбрать лист и данные. Код, который я использую, только выбирает диапазон, например, для A1: C3, но не выбирает листы. В этом случае это должен был быть sheet1 и sheet6

В данный момент я получаю этот вывод = IFNA (VLOOKUP (A2, $ A $ 1: $ C $ 3,3, FALSE), «Новая учетная запись»)

Так и должно быть. т.е. он должен включать имя листа из диапазона PYTBRange.Address = IFNA (VLOOKUP (A2, Sheet6! $ A $ 1: $ C $ 3,3, FALSE), «Новая учетная запись»)


Thisэто код, который создает проблемы: -

Range(Cells(CYFirstRow, CYLastColomn + 1), Cells(CYFinalrow, CYLastColomn + 1)).Formula = "=Ifna(Vlookup(" & Cells(CYFirstRow, CYFirstColomn).Address(False, False) & "," & PYTBRange.Address(True, True) & "," & AmountColomn & ",false),""New Account"")"

PYTBRange.Address (True, True) - Этот бит Специально, поскольку это должно выбрать Sheet6 как полный адрес

У меня естьпопытался добавить

Dim Ws As Worksheet 
Dim Olddata as Range

Set Ws = PYTBRange.Worksheet
Set Olddata = Ws.Name.PYTBRange.Address(True, True)

Range(Cells(CYFirstRow, CYLastColomn + 1), Cells(CYFinalrow, CYLastColomn + 1)).Formula = "=Ifna(Vlookup(" & Cells(CYFirstRow, CYFirstColomn).Address(False, False) & "," & Olddata & "," & AmountColomn & ",false),""New Account"")"

Но это дает мне ошибку

Полный код без исправления

Sub Comparetb()


Dim CYTBRange As Range
Dim PYTBRange As Range
Dim AmountColomn As Integer
Dim CYFirstRow As Long
Dim CYFinalrow As Long
Dim CYLastColomn As Long
Dim CYFirstColomn As Long

On Error Resume Next
Set CYTBRange = Application.Inputbox("Please select Current year TB", Type:=8)
' This is for Current year data
        If TypeName(CYTBRange) = "Empty" Then
            Exit Sub
        End If


Set PYTBRange = Application.Inputbox("Please select the TB which you want to compare", Type:=8)
' This is for previous year data
        If TypeName(PYTBRange) = "Empty" Then
            Exit Sub
        End If

    AmountColomn = Application.Inputbox("Please enter the colomn in which the Amount is Previous year TB", Type:=1, Default:=3)
    ' This ask for the colomn number for vlookup
            If TypeName(PYTBRange) = "Empty" Then
                Exit Sub
            End If

'This helps in finding the first row/colum and Last row/colomn
CYFirstRow = CYTBRange.Row
CYFinalrow = Cells(CYFirstRow, CYTBRange.Column).End(xlDown).Row
CYLastColomn = Cells(CYFinalrow, CYTBRange.Column).End(xlToRight).Column
CYFirstColomn = CYTBRange.Column

' Inserts 2 colomns to the right
Range(Cells(CYFirstRow, CYLastColomn + 1), Cells(CYFinalrow, CYLastColomn + 2)).EntireColumn.Insert

' Vlookup - Part where the problems lies
Range(Cells(CYFirstRow, CYLastColomn + 1), Cells(CYFinalrow, CYLastColomn + 1)).Formula = "=Ifna(Vlookup(" & Cells(CYFirstRow, CYFirstColomn).Address(False, False) & "," & PYTBRange.Address(True, True) & "," & AmountColomn & ",false),""New Account"")"


End Sub

Я ожидаю, что конечный результат должен быть = IFNA (VLOOKUP (A2,Sheet6! $ A $ 1: $ C $ 3,3, FALSE), «Новая учетная запись»), т. Е. Она берет имя листа

Также в случае, если пользователь получает выходные данные из другой рабочей книги, есть ли способпозаботиться об этом тоже?

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