我想将Excel Userform中的值粘贴到工作表中。可以将值粘贴到不同的工作表中,具体取决于您在Userform中放置的内容。
我到目前为止:
Private Sub Lagginarenda_Click()
Sheets("KategoriComboBox").Range("B2").Value = TextBoxFragestallare.Value
End Sub
KategoriComboBox 是一个Userform下拉列表,您可以在其中选择名称。该列表中包含的相同值具有类似的Excel工作表。
TextBoxFragestallare 是一个TextBox,您可以在其中写入值。这个值我想在一个工作表中粘贴Cell B2,你也在userform中选择。
守则不会起作用,因为它说“索引超出限定 - 运行时错误'9'”
我设法走到这一步:
Private Sub Lagginarende_Click()
Dim emptyRow As Long
'Aktiverar sheet
Sheets("Byggkonstruktion").Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Överför information
Cells(emptyRow, 1).Value = TextBoxLopnummer.Value
Cells(emptyRow, 2).Value = TextBoxFragestallare.Value
Cells(emptyRow, 3).Value = TextBoxMottagare.Value
Cells(emptyRow, 4).Value = TextBoxDatum.Value
Cells(emptyRow, 5).Value = TextBoxFraga.Value
Cells(emptyRow, 8).Value = TextBoxSvar.Value
If KanBesvaraFraganJa.Value = True Then Cells(emptyRow, 6).Value = KanBesvaraFraganJa.Caption Else Cells(emptyRow, 6).Value = KanBesvaraFraganNej.Caption
Unload Me
End Sub
我现在唯一的问题是如何而不是使用表格(“Byggkonstruktion”)。激活使用userform下拉列表中的值?
答案 0 :(得分:1)
如果我正确理解您的问题,您希望让用户通过下拉控件选择某个工作表名称,然后将他们在此工作表中输入的文字粘贴到单元格' B2'。
因此,您的设置可能如下所示:
以下是如何实现这一目标: (假设您有一个名为cbxSheet的ComboBox,一个名为txbText的TextBox和一个在UserForm中名为btnCopyTextToSelectedSheet的CommandButton)
Option Explicit
Private Sub UserForm_Initialize()
Dim wksCurrentSheet As Worksheet
'Add all available sheet names to dropdown box
For Each wksCurrentSheet In Worksheets
cbxSheet.AddItem wksCurrentSheet.Name
Next wksCurrentSheet
End Sub
Private Sub btnCopyTextToSelectedSheet_Click()
Dim strText As String
Dim strSheetName As String
Dim wksDestination As Worksheet
'Read sheet name from dropdown box
strSheetName = cbxSheet.Value
'Try to get sheet with the defined name
Set wksDestination = Worksheets(strSheetName)
'If there is no sheet with this name you will receive
'an 'Index out of bound' (9) runtime error
'Get text from textbox
strText = txbText.Text
'Write to cell in destination worksheet
wksDestination.Activate 'Not needed, just to let the user see
'that the copying really happens :)
wksDestination.Range("B2").Value = strText
'Unload form (makes sure the UserForm_Initialize sub is called on
' each use of the form)
Unload Me
End Sub
我在此处上传了示例:https://dl.dropboxusercontent.com/u/40951326/SheetSelectionExample.xlsm
希望这可以让您了解如何实现您想要的目标!
答案 1 :(得分:0)
看起来你只是想要:
Private Sub Lagginarenda_Click()
Sheets(KategoriComboBox.Value).Range("B2").Value = TextBoxFragestallare.Value
End Sub
答案 2 :(得分:0)
下面的Sub
可能适合您。
您应该适当地限定Range
,并且除非严格需要,否则请避免使用Select
或Activate
。
请注意,您应该:1)在使用之前填充ComboBox
,2)确保ComboBox
中所选的值符合您的要求,这样您就可以使用KategoriComboBox.Value
3)确保存在您尝试在ActiveWorkbook
中使用的工作表,或者选择适当的工作表。
Private Sub Lagginarende_Click()
Dim emptyRow As Long
'Aktiverar sheet
Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets(KategoriComboBox.Value)
'Sheets("Byggkonstruktion").Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(ws.Range("A:A")) + 1
'emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Överför information
ws.Cells(emptyRow, 1).Value = TextBoxLopnummer.Value
ws.Cells(emptyRow, 2).Value = TextBoxFragestallare.Value
ws.Cells(emptyRow, 3).Value = TextBoxMottagare.Value
ws.Cells(emptyRow, 4).Value = TextBoxDatum.Value
ws.Cells(emptyRow, 5).Value = TextBoxFraga.Value
ws.Cells(emptyRow, 8).Value = TextBoxSvar.Value
If KanBesvaraFraganJa.Value = True Then ws.Cells(emptyRow, 6).Value = KanBesvaraFraganJa.Caption Else ws.Cells(emptyRow, 6).Value = KanBesvaraFraganNej.Caption
Unload Me
End Sub
答案 3 :(得分:0)
我的问题的答案如下:
Private Sub KategoriComboBox_Change()
Sheets(KategoriComboBox.Text).Activate
End Sub
它的作用是激活与您在Combobox中选择的名称相同的表格。