2017-10-18 38 views
0

我正在爲簡單的excel應用程序爲多個用戶在過程的不同階段輸入數據。不幸的是,我遇到了在表格的一行中存儲來自多個用戶表單的數據的問題。Excel 2013 VBA多用戶表單填寫表

我會盡我所能解釋清楚整個事情是什麼。

例如,我稱之爲「電影時間控制」應用程序。讓我們想象一下,它是用於控制與重點看電影的工具:

  • 當電影開始,
  • 如果顯示(爲什麼)期間,有一些休息已經重啓電影時
  • (休息了多長時間,有多少休息時間以及繼續採取了什麼行動),
  • 在電影被中止的情況下,爲什麼?
  • 電影結束時。

應用程序段的菜單將看起來在下面的截圖:

enter image description here

對於每個按鈕不同用戶窗體被分配。每個表格中輸入的數據應存儲在一行中的特定表中。

用戶窗體的功能:

  1. MOVIE開始:創建與電影片名,日期和時間在表中的條目其啓動時。
  2. MOVIE BREAK:根據之前定義的電影標題,填寫日期和時間,中斷原因(如果不是標準,則從下拉列表或文本框中填寫)。該功能最多可以使用三次(三次中斷)。
  3. 電影重新啓動:如果發生中斷,請填寫關於日期,電影重新啓動時間以及爲了處理先前定義的中斷原因而採取的操作的信息。對於每個休息(可能三個)功能都可以使用。
  4. 電影中止當(日期和時間)電影被中止(無意繼續)。
  5. MOVIE FINISHED當(日期和時間)電影結束。

哪裏出現的問題(問題):

  1. 當輸入從第一行的數據,與特定標題的條目在表中單獨的表創建。根據此條目,所有其他用戶表單中的標題組合框應列出已啓動但尚未完成或中止的標題 - 只需快速選擇「公開標題」並填寫與標題相關的其他信息即可。 如何創建一個宏來列出組合框中的「打開案例」?
  2. 我無法找到如何在創建具有特定電影標題的條目後,將其餘數據傳輸到表格的同一行,但是從所有表格中的不同列。重要的是數據只能添加到相應標題的行(從第一個問題的組合框中選擇)。 你能幫助我的宏嗎?

我創建到現在(我非常有VBA的初學者,感謝理解):

MOVIE START:爲了創建與電影標題的條目。

Private Sub movie_start_save_Click() 

If MsgBox("ARE YOU SURE?", vbYesNo, "Please confirm") = vbYes Then 

Dim emptyRow As Long 

'Make Sheet2 active 
Sheet2.Activate 

'Determine emptyRow 
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 

'Transfer information 
Cells(emptyRow, 1).Value = Movie_Title_Box.Value 
Cells(emptyRow, 2).Value = Start_Date_Box.Value 
Cells(emptyRow, 3).Value = Start_Time_Box.Value 
'Closing the form 
Unload Me 
'Back to MENU 
Sheet1.Select 
End If 
End Sub 


Private Sub movie_start_cancel_Click() 

Unload Me 

End Sub 

MOVIE BREAK:對於限定的時間和原因(不能傳輸數據):

Private Sub UserForm_Initialize() 

'Fill ReasonComboBox 
With ReasonComboBox 
    .AddItem "Tea" 
    .AddItem "Coffee" 
    .AddItem "Popcorn" 
    .AddItem "Dinner" 
    .AddItem "Not standard" 
End With 

'Default text in the reason box 
ReasonTextBox.ForeColor = &HC0C0C0 '<~~ Grey Color 
    ReasonTextBox.Text = "In case of 'not standard' reason leave your comment here" 
    movie_break_cancel.SetFocus '<~~ This is required so that the focus moves from TB 

End Sub 
'Default text in the reason box - disapearing when you want to edit 
Private Sub ReasonTextBox_Enter() 
    With ReasonTextBox 
     If .Text = "In case of 'not standard' reason leave your comment here" Then 
      .ForeColor = &H80000008 '<~ Black Color 
      .Text = "" 
     End If 
    End With 
End Sub 
'Default text in the reason box - somehow disappearing for good, but ok 
Private Sub ReasonTextBox_AfterUpdate() 
    With ReasonTextBox 
     If .Text = "" Then 
      .ForeColor = &H80000008 
      .Text = "" 
     End If 
    End With 
End Sub 

'Cancel Button 
Private Sub movie_break_cancel_Click() 

Unload Me 

End Sub 

的其餘部分是用幾個不同實際上類似。


鏈接下載Excel文件:

https://drive.google.com/file/d/0BxFSL2h-9qflQjRzNTQ2ZlhJNjA/view?usp=sharing

希望我自己的表達不夠清楚明白這一點。 問候!

回答

0

在我下面的例子中,我展示瞭如何配置一個ComboBox來保存多列數據,並稍後檢索這些值。這將允許您將行號和電影數據一起存儲在ComboBox中。

「過濾不完成作業的組合框 私人小組UserForm_Initialize() 昏暗的WS作爲工作表 昏暗的X只要

With Me.Movie_Title_ComboBox 
     .ColumnCount = 4 
     .ColumnWidths = "0 pt;250 pt;90 pt; 90 pt;" 
     '.ListWidth = 500 
     .TextColumn = 2 
     .BoundColumn = 1 
    End With 

    Set ws = Sheet2 
    With ws 
     For x = 2 To .Range("A" & .Rows.Count).End(xlUp).Row 
      If .Cells(x, 4).Value = "" Then 
       AddItems Me.Movie_Title_ComboBox, x, .Cells(x, 1).Value, Format(.Cells(x, 3).Value, "MM/DD/YYYY"), Format(.Cells(x, 3).Value, "HH:MM") 
      End If 
     Next 
    End With 
End Sub 

Private Sub Movie_Title_ComboBox_Change() 
    With Me.Movie_Title_ComboBox 
     If .ListIndex > -1 Then 
      Finish_Date_Box.Value = .List(.ListIndex, 2) 
     End If 
    End With 
End Sub 

Private Sub movie_finished_save_Click() 
    With Sheet2 
     .Cells(Me.Movie_Title_ComboBox.Value, 4) = Me.Finish_Date_Box.Value 
     .Cells(Me.Movie_Title_ComboBox.Value, 5) = Me.Start_Time_Box.Value 
    End With 
End Sub 

添加此功能的公共代碼模塊,這樣它會提供給所有的用戶形式。

Sub AddItems(oComboBox As MSForms.ComboBox, ParamArray Items() As Variant) 
    Dim x As Long 

    With oComboBox 
     .AddItem Items(0) 
     For x = 1 To UBound(Items) 
      .List(.ListCount - 1, x) = Items(x) 
     Next 
    End With 

End Sub 
+0

作品很漂亮,但我仍然有一些麻煩:1.當影片被中止,我想補充文本與結束日期/時間單元「胎死腹中」,使位置消失從ComboBox列表中。 2.如果在電影中第二次中斷,我不知道如何自動進入下一列(我在桌子上有三個空格)。你能幫我解決這個問題嗎? – Conceptic

+0

我決定添加依賴Combobox與電影中斷的原因。不幸的是,我失去了從第一個Combobox獲得價值 - 「myval = Me.Combobox.Column(1)」不起作用。你知道爲什麼嗎? – Conceptic

+0

'Movie_Title_ComboBox.List(Movie_Title_ComboBox.ListIndex,1)'會爲您提供所選項目第一列的值。 'Movie_Title_ComboBox.List(Movie_Title_ComboBox.ListIndex,3)'會給你所選項目第三列的值。 – 2017-10-23 03:43:06