返回列表 上一主題 發帖

[發問] 選項按鈕

回復 7# Michelle-W


    依據准大說的SelectionChange 容易發生誤觸

所以也可以改用下列代碼,在該儲存格中點2下
  1. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2.     co = Cells(1, Columns.Count).End(xlToLeft).Column
  3.         If Target.Column > 2 And Target.Column < 9 And Target.Row > 1 And Cells(Target.Row, 1) <> "" And Cells(1, Target.Column) <> "" Then
  4.             Range(Cells(Target.Row, "C"), Cells(Target.Row, co)) = "" '先清空原來的"●"
  5.             Target.Value = "●"
  6.         End If
  7. End Sub
複製代碼

TOP

回復 8# 准提部林
回復 9# jackyq
回復 11# lpk187

謝謝各位大大的指點,是真的蠻容易誤觸的^^"
不過這真的是一個好方法耶!!!
又學到一招了~~謝謝

TOP

回復 11# lpk187


請問lpk187大大
因為在作業中,又遇到新的問題
可否麻煩您幫忙看一下...
詳細敘述寫在附件中

真的非常感謝您><
Qestion.rar (26.88 KB)

TOP

本帖最後由 lpk187 於 2016-8-24 19:52 編輯

回復 13# Michelle-W

你原本是可以利用"統計"的代碼去實現你的問題的,我只多了幾列代碼而已
參考下面代碼:
  1. Sub 統計()
  2.     co = Sheets("統計").Rows(1).SpecialCells(xlCellTypeConstants)
  3.     With Sheets("統計")
  4.         For Each Rng In .Rows(1).SpecialCells(xlCellTypeConstants)
  5.             ro = .Cells(.Rows.Count, Rng.Column).End(xlUp).Row
  6.             If ro > 2 Then .Range(.Cells(3, Rng.Column), .Cells(ro, Rng.Offset(, 2).Column)).Clear
  7.             ro = 0
  8.         Next
  9.     End With
  10.     co = Cells(1, Columns.Count).End(xlToLeft).Column
  11.     ro = Cells(Rows.Count, 1).End(xlUp).Row
  12.     For Each Rng In Range("C2", Cells(ro, co))
  13.         If Rng.Value Like "●" Then
  14.             With Sheets("統計")
  15.                 Set c = .Rows(1).Find(Cells(1, Rng.Column))
  16.                  If Not c Is Nothing Then
  17.                     ro = .Cells(Rows.Count, c.Column).End(xlUp).Row + 1
  18.                     .Cells(ro, c.Column) = Cells(Rng.Row, 1)
  19.                     .Cells(ro, c.Offset(, 1).Column) = Cells(Rng.Row, 2)
  20.                     '''.擷取人名
  21.                     T = Split(Cells(Rng.Row, 1) & "//", "//")(1)
  22.                     T = Split(T & "/", "/")(0)
  23.                     If T <> "" Then .Cells(ro, c.Offset(, 2).Column) = T
  24.                     ''''寫入新增
  25.                     Set cr = Sheets("新增").Columns(1).Find(Cells(Rng.Row, 1)) '查詢在哪一列
  26.                     If Not cr Is Nothing Then
  27.                         Set cc = Sheets("新增").Rows(1).Find(c.Value) '查詢在哪一欄
  28.                         If Not cc Is Nothing Then
  29.                             Sheets("新增").Cells(cr.Row, cc.Column) = Rng.Value '然後放入"●"
  30.                         End If
  31.                     End If
  32.                 End If
  33.                 Set c = Nothing
  34.                 Set sr = Nothing
  35.                 Set cc = Nothing
  36.             End With
  37.         End If
  38.     Next
  39. 'Module1.擷取人名<<<這裡可以不用啦!
  40. End Sub
複製代碼

TOP

回復 13# Michelle-W

另外,如果我把For Each Rng In Range("C2", Cells(ro, co))這列代碼又修改成
   For Each Rng In Range("C2", Cells(ro, co)).SpecialCells(xlCellTypeConstants)
是不是又會更快了一些!

TOP

[選擇]工作表
Target.Value = "●"   這行下面,增加下一行,可避免雙擊後變成編輯狀態
Cancel = True

TOP

本帖最後由 Michelle-W 於 2016-8-24 22:06 編輯

回復 15# lpk187


如果在新增工作表中新增一個統計按鈕,執行起來就會沒反應
只能統一在選擇的工作表執行是嗎?
有辦法可以由第一項開始依序排列順序嗎~?

TOP

本帖最後由 lpk187 於 2016-8-24 23:13 編輯

回復 17# Michelle-W

我的建議:
1。你目前應該先瞭解"統計"這個程序中的代碼,以及其意義。
      寫下選擇工作表中的"統計"程序並不一定只能在選擇工作表中執行!
      當然我寫的代碼只能在其工作表中執行,但也只須修改幾個語法就能夠在其他的工作表中執行!
      其中的Cells()、Range(),這些都必須要正確的地址給它,然後就當然可以在其他的工作表中實現
2。有辦法可以由第一項開始依序排列順序嗎~?
      可以解釋"依序排列順序"嗎?
      從哪依序?人員?編號?還是依據目前的新增工作表之排序?
其實你本身代碼理解還蠻不錯的,再想一下,你一定可以的!

TOP

回復 19# lpk187


我正剛在研究了解意思~~^^
順序是想這樣排列

TOP

回復 20# Michelle-W
試試看
    Ex.zip (19.98 KB)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 口說一句好話,如口出蓮花;口說一句壞話如口吐毒蛇。
返回列表 上一主題