2014-11-07 4 views
0

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

Во-первых, я создал форму с двумя текстовыми полями и двумя кнопками, которые подойдут и получат два разных каталога и связанные файлы. это делается путем вызова функции, которая загружает директорию в текстовые поля.

кнопка для вызова функции для навигации реж и получить файл

Private Sub CommandButton3_Click() 
 
'call selectFile function to select file 
 
selectFile 
 
End Sub

функцию, чтобы получить книги в текстовые поля 1 и 2:

Public Function selectFile() 
 
Dim fileNamePath1 As String 
 
Dim fileNamePath2 As String 
 
Dim workbookFilePath1 As String 
 
Dim workbookFilePath2 As String 
 
    
 
On Error GoTo exit_ 
 
    
 
If workbookFilePath1 = Empty And workbookFilePath2 = Empty Then 
 
    fileNamePath1 = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Open Workbook 1", MultiSelect:=False) 
 
    workbookFilePath1 = Dir(fileNamePath1) 
 
    'TextBox1.Text = workbookFilePath1 
 
    TextBox1.Value = fileNamePath1 
 
    
 
    fileNamePath2 = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Open Workbook 2", MultiSelect:=False) 
 
    workbookFilePath2 = Dir(fileNamePath2) 
 
    TextBox2.Value = fileNamePath2 
 
    
 
    If fileNamePath1 = False Or fileNamePath2 = False Then 
 
     MsgBox ("File selection was canceled.") 
 
     Exit Function 
 
    End If 
 
    
 
End If 
 

 
exit_: 
 
End Function

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

кнопки, которая выполняет модуль дифф:

Private Sub CommandButton1_Click() 
 
    getTheWorkbooksToCompare(fileNamePath1, fileNamePath2) 
 
End Sub

я знаю, что я имею изменил myPath1 и myPath2 к книгам, где я имел их как строки до

сравнивает модуль

Public Sub gettheWorkbooksToCompare(myPath1 As Workbook, myPath2 As Workbook) 
 
Dim myExcelObj 
 
Dim WorkbookObj1 
 
Dim WorkbookObj2 
 
Dim WorksheetObj1 
 
Dim WorksheetObj2 
 

 
Dim file1 As String 
 
Dim file2 As String 
 
Dim myWorksheetCounter As Integer 
 
Dim i As Worksheet 
 

 
Set myExcelObj = CreateObject("Excel.Application") 
 
myExcelObj.Visible = True 
 

 
Set file1 = Dir(myPath1) 
 
Set file2 = Dir(myPath2) 
 

 
Set WorkbookObj1 = myExcelObj.Workbooks.Open(file1) 
 
Set WorkbookObj2 = myExcelObj.Workbooks.Open(file2) 
 
Set NewWorkbook = myExcelObj.Workbooks.Add 
 

 
While WorkbookObj1 <> Null And WorkbookObj2 <> Null 
 
'While WorkbookObj1.ActiveWorkbook.Worksheets.count = WorkbookOjb2.ActiveWorkbook.Worksheets.count 
 
    myWorksheetCounter = ActiveWorkbook.Worksheets.count 
 
    myWorksheetCount = ActiveWorkbook.Worksheets.count 
 
    If WorksheetObj1.Worksheets.myWorksheetCounter = WorkbookObj2.Worksheets.myWorksheetCounter Then 
 
     Set WorksheetObj1 = WorkbookObj1.Worksheets(myWorksheetCounter) 
 
     Set WorksheetObj2 = WorkbookObj2.Worksheets(myWorksheetCounter) 
 
     Set myNewWorksheetObj = NewWorkbook.Worksheets(myWorksheetCounter) 
 

 
     For myWorksheetCounter = i To WorksheetObj1 
 
      For myWorksheetCount = j To WorksheetOjb2 
 
       'If cell.Value myWorksheetObj2.Range(cell.Address).Value Then 
 
       If cell.Value = myWorksheetObj2.Range(cell.address).Value Then 
 
        myNewWorksheetObj.Range(cell.address).Value = cell.address.Value 
 
        myNewWorksheetObj.Range(cell.address).Interior.ColorIndex = 3 
 
       Else 
 
        cell.Interior.ColorIndex = 0 
 
       End If 
 
      Next 
 
        
 
      'if doesn't work... use SaveChanges = True 
 
      myNewWorksheetObj.Workbooks.Save() = True 
 
        
 
     Next 
 
    Else 
 
     MsgBox ("The worksheets are not the same worksheets." & vbNewLine & "Please try again.") 
 
    End If 
 
Wend 
 

 
Set myExcelObj = Nothing 
 
    
 
End Sub

Итак, мой вопрос ... может ли кто-нибудь помочь в том, чтобы увидеть, где я иду не так? По сути, у меня есть некоторые проблемы, пытаясь заставить это работать. оценили

Я прошел и немного очистил некоторые области ... но теперь есть: «ошибка времени выполнения 438: объект не поддерживает эту проету или метод» в цикле while код, который я обновил пост с

+0

Неужели что-то происходит, когда вы нажимаете CommandButton1? Не могли бы вы сообщить, какие ошибки вы получаете? или что происходит в ваших попытках запустить его? – peege

ответ

0

Я вижу опечатку на CommandButton1_Click

Private Sub CommandButton1_Click() 
    getTheWorkbooksToCompare(fileNamePath1, fileNamePath2) 
End Sub 


Public Sub gettheWorkbooksToCompare(myPath1 As Workbook, myPath2 As Workbook) 

Там может быть что-то еще, но вы не заглавной «T» в getThe, но назвать это таким образом.

+0

привет спасибо ... я добавил часть «The», чтобы попытаться быть многословной, поэтому anayone мог видеть мой ход мысли ... я тоже дважды проверял на случай. :) все еще получаю ошибку: «ожидаемая функция или переменная» в CommandButton1_Click() для getTheWorkbooksToCompare – user4225056

+0

также, если я изменяю код в кнопке: 'Dim t1 As msforms.textbox Dim t2 As msforms.txtbox Call getTheWorkbooksToCompare (t1, t2) 'Я получаю ошибку внутри модуля getTheWorkbooksToCompare, где' Set file1 = 'подсвечивается, а ошибка читается: требуется объект – user4225056

+0

OK. Я еще раз посмотрю. Сообщение об ошибке дает гораздо лучший ключ. – peege

Смежные вопросы