Board logo

標題: [發問] comBobox如何同時也能取出已變更定義後的參照範圍呢? [打印本頁]

作者: dechiuan999    時間: 2010-10-17 22:23     標題: comBobox如何同時也能取出已變更定義後的參照範圍呢?

各位大大好:

  有一MULTIPAGE表單,其名稱為
員工基本資料。並配有comBobox6
其用途為供使用者可選取員工姓名之用。

  現小弟之問題為在新增員工時,選取“新增”按鈕
新增員工;並同時設有直接變更定義名稱
的參照範圍。之後選取comBobox6發現其內的參照範圍
並未改變;其結果也就無法取得已新增的
員工姓名。請問comBobox6應如何修改才
可成功取得實際參照範圍呢?
其語法如下:

Private Sub ComboBox6_Change()
    Dim mAr1 As Variant
    Dim mStr1$, mStr1a$
    Dim mSht1 As Worksheet
    Dim mRng1 As Range, mRng1a As Range
   
    Set mSht1 = Worksheets("員工基本資料")
    mSht1.Select
   
    With mSht1
        
        Set mRng1 = Range("員工基本資料")
        
        With mRng1
            
            mAr1 = mRng1.Offset(1, 1).Resize(.Rows.Count - 1, 1).Value
            mAr1 = WorksheetFunction.Transpose(mAr1)
            
            With ComboBox6
                .Width = .Width * 1
                .ColumnCount = 1
                .List = mAr1
                .Value = .List(.ListIndex)
                mStr1 = .Value
                '.SetFocus
            End With
        End With
        
        Set mRng1a = mRng1.Columns(2).Find(what:=mStr1, lookat:=xlWhole, searchorder:=xlByRows)
        If Not mRng1a Is Nothing Then
            
            'MsgBox mRng1a.Value
            TextBox1.Value = mRng1a.Offset(, -1).Value
            TextBox2.Value = mRng1a.Value
            TextBox3.Value = mRng1a.Offset(, 1).Value
            TextBox4.Value = mRng1a.Offset(, 2).Value
            TextBox5.Value = mRng1a.Offset(, 3).Value
            TextBox6.Value = mRng1a.Offset(, 4).Value
            TextBox7.Value = mRng1a.Offset(, 5).Value
            TextBox8.Value = mRng1a.Offset(, 7).Value
            
            mStr1a = mRng1a.Offset(, 6).Value         
            
            
            If mStr1a = "在職" Then
                OptionButton1.Value = True
            ElseIf mStr1a = "離職" Then
                OptionButton2.Value = True
            End If            
                       
            mRng1a.Offset(, -1).Select            
        End If   
               
    End With
   
    Set mSht1 = Nothing
    Set mRng1 = Nothing
    Set mRng1a = Nothing   
   
End Sub

感恩大大!
作者: GBKEE    時間: 2010-10-18 08:58

本帖最後由 GBKEE 於 2010-10-18 09:01 編輯

回復 1# dechiuan999
問題在Private Sub CommandButton5_Click()
           With Range("員工基本資料")
            mStr1a = TextBox1.Text
            Set mRng1b = Range("員工基本資料").Columns(1).Find(what:=mStr1a, lookat:=xlWhole, searchorder:=xlByRows)
            If Not mRng1b Is Nothing Then
                MsgBox "你輸入的員工編號重覆" & vbCrLf & vbCrLf & "請重新輸入員工編號"
                Exit Sub
            End If
            mRow1 = Range("員工基本資料").Rows.Count     '計算出定義名稱的列數
        If TypeName(Selection) = "Range" Then
                .Cells(1).End(xlDown).Offset(1).Select               '請加入這一段
                If Intersect(Selection, Range("員工基本資料").End(xlDown).Offset(1)) Is Nothing Then
                          'MsgBox "請先選取輸入資料指定位置"
                    Exit Sub
                Else
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''
CommandButton5_Click() 新增資料的防呆措施 少了姓名的防呆
防呆之後  新增資料直接用 不用理會selection的事 如下
  1. Private Sub CommandButton5_Click()
  2.     Dim Sh As Worksheet, Rng As Range
  3.     Set Sh = Worksheets("員工基本資料")
  4.     Set Rng = Sh.Range("A" & Rows.Count).End(xlUp).Offset(1)
  5.     With TextBox1
  6.         If Application.CountIf(Sh.Columns(1), .Text) > 0 Then
  7.             MsgBox "你輸入的員工編號重覆" & vbCrLf & vbCrLf & "請重新輸入員工編號"
  8.             Exit Sub
  9.         ElseIf Len(.Text) = 5 Then
  10.             If IsNumeric(.Text) Then Rng.Cells(1, 1).NumberFormatLocal = "@"
  11.         Else
  12.             MsgBox "員工編號為五個字元"
  13.             Exit Sub
  14.         End If
  15.     End With
  16.     With TextBox2
  17.         If Application.CountIf(Sh.Columns(2), .Text) > 0 Then
  18.             MsgBox "你輸入的 姓名 重覆" & vbCrLf & vbCrLf & "請重新輸入員工 姓名"
  19.             Exit Sub
  20.         ElseIf Len(.Text) = 0 Then
  21.             MsgBox "你沒有 輸入姓名 " & vbCrLf & vbCrLf & "請重新輸入員工 姓名"
  22.         End If
  23.     End With
  24.     With TextBox3    '身份證宇元為 10 個宇元
  25.         If Application.CountIf(Sh.Columns(3), .Text) > 0 Then
  26.             MsgBox "身份證宇號 重複" & vbCrLf & vbCrLf & "請重新輸入 身份證宇號 "
  27.             Exit Sub
  28.         ElseIf Len(.Text) = 10 Then
  29.             If Not IsNumeric(.Text) Then Rng.Cells(1, 3).NumberFormatLocal = "@"
  30.         Else
  31.             MsgBox "身份證宇元為 10 個宇元"
  32.             Exit Sub
  33.         End If
  34.     End With
  35.     With TextBox5    ''立帳局號元為 7 個宇元
  36.         If Len(.Text) = 7 Then
  37.             If IsNumeric(.Text) Then Range("員工基本資料").Cells(mRow1a, 5).NumberFormatLocal = "@"
  38.         Else
  39.             MsgBox "立帳局號元為 7 個宇元"
  40.             Exit Sub
  41.         End If
  42.     End With
  43.     With TextBox6       '存簿帳號字元為 7 個宇元
  44.         If Len(.Text) = 7 Then
  45.             If IsNumeric(.Text) Then Range("員工基本資料").Cells(mRow1a, 6).NumberFormatLocal = "@"
  46.         Else
  47.             MsgBox "存簿帳號字元為 7 個宇元"
  48.             Exit Sub
  49.         End If
  50.     End With
  51.     With Rng
  52.         .Cells(1, 1) = TextBox1.Value
  53.         .Cells(1, 2) = TextBox2.Value
  54.         .Cells(1, 3) = TextBox3.Value
  55.         .Cells(1, 4) = TextBox4.Value
  56.         .Cells(1, 5) = TextBox5.Value
  57.         .Cells(1, 6) = TextBox6.Value
  58.         .Cells(1, 7) = TextBox7.Value
  59.         .Cells(1, 9) = TextBox8.Value
  60.         If OptionButton1.Value = True Then
  61.             .Cells(1, 8) = "在職"
  62.         ElseIf OptionButton2.Value = True Then
  63.             .Cells(mRow1a, 8) = "離職"
  64.         End If
  65.     End With
  66.     MsgBox "資料新增 完畢"
  67.     Set Sh = Nothing
  68.     Set Rng = Nothing
  69. End Sub
複製代碼

作者: dechiuan999    時間: 2010-10-18 20:29

謝謝版主大大。

  小弟試著依版主大大的方式,
目前還是沒能達成小弟的須求。
其comBobox6依然一樣無法
取得定義名稱修正後的參照範圍。
  不知是否另有可突破的方式呢?

感恩大大!
作者: GBKEE    時間: 2010-10-18 22:41

本帖最後由 GBKEE 於 2010-10-18 22:44 編輯
謝謝版主大大。
  小弟試著依版主大大的方式,
目前還是沒能達成小弟的須求。
其comBobox6依然一樣無法 ...
dechiuan999 發表於 2010-10-18 20:29

Private Sub CommandButton5_Click()
'
'
If OptionButton1.Value = True Then
                .Cells(mRow1a, 8) = "在職"
            ElseIf OptionButton2.Value = True Then
                .Cells(mRow1a, 8) = "離職"
            End If
            Names("員工基本資料").RefersTo = mSht1.Range("A3:I" & mRow1a + 2)  
            ComboBox6.List = [員工基本資料].Columns(2).Value          '**設定要重設 才會看到**
            .Cells(mRow1a, 1).Select
            End If
作者: dechiuan999    時間: 2010-10-19 03:17

版主大大。

小弟已測試成功了。
真感謝版主大大的相助。
讓小弟能放下心中的一塊
石頭了。

感恩大大!
作者: 7777    時間: 2015-2-16 11:34

回復 4# GBKEE

能請 版主大大 幫忙

comBobox 如何同時 [同步參照]

將 隱藏工作表的 Sheet1 cbFAccounts ComboBox
能 同步參照到   Sheet12 ComboBox

如圖 的綠色方式

[attach]20262[/attach]
因不同於
LinkedCell
ListFillRange
方式

還請版主大大 幫忙

附檔

[attach]20263[/attach]
作者: GBKEE    時間: 2015-2-20 14:42

回復 6# 7777

Sheet1, Sheet12,工作表上的ComboBox控制項 都無法編輯

導致下面的程式碼錯誤
  1. Private Sub ComboBox1_Change()
  2.     Sheet1.cbFAccounts.Value = ComboBox1.Value
  3. End Sub

  4. Private Sub ComboBox2_Change()
  5.     Sheet1.ComboBox1.Value = ComboBox2.Value
  6. End Sub
複製代碼
請將 Sheet1, Sheet12,工作表上的ComboBox控制項 全刪掉
重新置入 新的ComboBox控制項




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)