2015-11-06 64 views
0

我在特定的WorkBook上有一個用戶表單,它所做的是從用戶那裏收集數據並將其轉儲到同一個WorkBook上。我的問題是,如果我有WB最小化和另一個WB打開,並填寫了用戶窗體,數據不會轉儲在最小化的工作簿上。我不確定如何引用特定的WorkBook,以便即使其他WorkBook已打開,它仍會將我的數據轉儲到預期的WorkBook上。這一切可能嗎?如果是這樣,怎麼樣?特定WB上的用戶表單

這裏是我的代碼供參考。

Private Sub cmdSubmit_Click() 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

If ActiveWorkbook.MultiUserEditing Then 
ActiveWorkbook.AcceptAllChanges 
ActiveWorkbook.Save 
End If 

    If txtCallID.Value = "" Then 
    MsgBox "Please enter a Call ID.", vbExclamation, "CALL ID FIELD ERROR" 


'if all fields were answered, show Message Box for confirmation 
    Else 
     Dim response As Integer 


     response = MsgBox("Please review all information before proceeding." & vbCrLf & "Click YES to Proceed, Click NO to review.", _ 
       vbYesNo + vbInformation, "Audit Tracker") 

    End If 
     If response = vbYes Then 

    Dim lRow As Long 
    Dim ws As Worksheet 


    Set ws = Worksheets("Data Sheet") 
    'find first empty row in database 
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 


    If WorksheetFunction.CountIf(ws.Range("E2", ws.Cells(lRow - 1, 1)), Me.txtCallID.Value) > 0 Then 
     MsgBox "Somebody is already auditing this call", vbCritical, "Duplicate Call ID" 
     Me.txtCallID.Value = "" 
     Exit Sub 
    End If 



    'check for a segement id 
    If Trim(Me.txtCallID.Value) = "" Then 
     Me.txtCallID.SetFocus 
     MsgBox "Please enter the Call ID" 
     Exit Sub 
    End If 

    'copy the data to the database 
    With ws 
    .Cells(lRow, 1).Value = txtDate.Value 
    .Cells(lRow, 3).Value = Environ$("username") 
    .Cells(lRow, 5).Value = Me.txtCallID.Value 


If ActiveWorkbook.MultiUserEditing Then 
ActiveWorkbook.AcceptAllChanges 
ActiveWorkbook.Save 
End If 

    'clear the data 
    Me.txtCallID.Value = "" 

    Me.txtCallID.SetFocus 
    End With 
    End If 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 


End Sub 

什麼我希望做的是始終轉儲數據到我的工作簿是DataTracker.xlsd

+0

如果傾銷你的意思是像選擇粘貼的東西比我能理解爲什麼這不起作用。如果你很好地定義你的目標(例如作爲一個範圍對象),這有更好的工作機會。有點難以知道你在做什麼之後......嘗試包括一些代碼。 – Tom

+0

我編輯了我的帖子。我希望你現在可以更好地理解它。 – user5500328

回答

0

,這樣即使其他工作薄打開它仍然傾倒在我的數據我打算工作簿

ThisWorkbook是指擁有正在執行的表單或代碼模塊的工作簿。另一方面,ActiveWorkbook引用Excel中的當前活動工作簿,無論它是哪一個。修復您的代碼:

ActiveWorkbook替換爲ThisWorkbook

另外:Set ws = Worksheets("Data Sheet")

通過Set ws = ThisWorkbook.Worksheets("Data Sheet")

因爲沒有指定ThisWorkbook,沒有預選賽的Worksheets功能,將在ActiveWorkbook(默認行爲)的工作表讀取,並且很可能會失敗。

+0

它實際上工作!謝謝,順便說一下,你還介意幫助我改進我的vba。由於每次用戶提交他的數據,它都會自動保存工作簿。用戶窗體花費很長時間才能完成加載。任何建議讓我的代碼運行得更快一點? – user5500328

+0

@ user5500328我查看了代碼。不幸的是我沒有看到太多的加速空間。如果工作簿包含大量數據和公式,則保存或加載將需要很長時間。你最終可以做的是在用戶每次提交表單時不保存它,只需讓用戶決定何時保存。另外,檢查你是否有很多公式。如果是這樣,請進行「手動」計算,直到明確要求爲止。 –

+0

但是,您可以發佈另一個問題,提供有關工作簿結構,其數據和更新代碼的更多詳細信息,以便我們徹底調查並找出緩慢的原因。我看到它的方式,緩慢不是固有的給定的代碼,但可能是WB內的東西。 –