2013-12-18 23 views
3

我有一個用戶表單,其中包含三個組合框和一個文本框,我希望使用命名範圍或公共變量來填充。我在Windows上的Excel 2010中工作。這是我有: 首先,我運行一些代碼將一個工作表轉換爲新的配置。然後我調用用戶表單,它將設置必要的變量以進一步更新工作表。我已經在Mac上完成了這個工作,並且它可以工作,但我正在從Mac轉換到Windows服務器。我認爲這將是簡單的一部分,但由於某種原因,它不起作用。用戶表單初始化時未填充的組合框

這裏是用戶表單的代碼。

Public KorS As String 
Public ActivityID As String 
Public Stage As String 
Public varsaveme As String 


Private Sub ufStageDt_Initialize() 

AD = varsaveme & ".xls" 
duh = KorS 

Set Me.tbAdName.Text = duh 
Set UserForm1.Caption = AD 

'Set Me.cmbLowDt.List = "AnnDt" 
Set Me.cmbHighDt.List = "AnnDt" 
Set Me.cmbStage.List = "Stage" 
Me.cmbLowDt.List = "AnnDt" 

End Sub 

公用變量存在於工作表上的代碼中。

這是我在Mac上使用的代碼。

Private Sub UserForm_Initialize() 

Ad = varsaveme & ".xls" 

duh = KorS 

tbAdName.Text = varsaveme 
UserForm.Caption = Ad 


cmbLowDt.List = Range("AnnDt").Value 
cmbHighDt.List = Range("AnnDt").Value 
cmbStage.List = Range("Stage").Text 

End Sub 

任何援助將不勝感激。我在vba腳本中使用ufStageDt.Show命令來調出用戶窗體。

回答

5

Set將不起作用,所以消除。另外,List需要一個數組。對於單個硬編碼項目,請使用Additem

Me.cmbHighDt.Additem "AnnDt" 

編輯: 「AnnDt」 是一個命名範圍:

Me.cmbHighDt.List = Application.Transpose(ActiveSheet.Range("AnnDt")) 

EDIT2:對於日期:

Private Sub UserForm_Initialize() 
Dim i As Long 
With Me.cmbHighDt 
    .List = Application.Transpose(ActiveSheet.Range("AnnDt")) 
    For i = 0 To .ListCount - 1 
     .List(i) = Format(.List(i), "yyyy-mm-dd") 
    Next i 

    'to get it back to a date 
    ActiveSheet.Range("B1") = DateValue(.List(0)) 
End With 

End Sub 
+0

AnnDt是一個命名的範圍。我如何獲得命名範圍而不是單個項目? –

+0

+ 1很好:) –

+0

我有一個警告工作。其中一個命名範圍是日期範圍。當我把它放在組合框中時,它顯示日期的數值。我必須以某種方式格式化日期字段嗎?範圍被格式化爲日期。 –