標題:
[發問]
請教如何簡化指令及在如何一般模組中使用
[打印本頁]
作者:
dino1978
時間:
2012-1-23 03:58
標題:
請教如何簡化指令及在如何一般模組中使用
請教各為先進, 小弟程式碼如下, 原本小弟想使用For.....Next迴圈來判斷C欄是否有資料並控制 CommandButton顯示與否
但是卡在 控制項物件的部份, 小弟不會使用For...Next來寫...再請各位先進指導一下.
另外因所有的sheet都會用到該程式, 因此小弟新增於一般模組, 可是每當執行後, 會出現"此處需要物件"的錯誤訊息
看Excel的說明說我少了指定的定位項, 小弟不太瞭解定位項的意思以及該放在那邊...有勞各位先進開導, 謝謝!!
Sub RemoveButton()
If [C3] <> "" Then
CommandButton2.Visible = True
Else
CommandButton2.Visible = False
End If
If [C4] <> "" Then
CommandButton3.Visible = True
Else
CommandButton3.Visible = False
End If
If [C5] <> "" Then
CommandButton4.Visible = True
Else
CommandButton4.Visible = False
End If
If [C6] <> "" Then
CommandButton5.Visible = True
Else
CommandButton5.Visible = False
End If
If [C7] <> "" Then
CommandButton6.Visible = True
Else
CommandButton6.Visible = False
End If
If [C8] <> "" Then
CommandButton7.Visible = True
Else
CommandButton7.Visible = False
End If
If [C10] <> "" Then
CommandButton8.Visible = True
Else
CommandButton8.Visible = False
End If
If [C11] <> "" Then
CommandButton9.Visible = True
Else
CommandButton9.Visible = False
End If
If [C12] <> "" Then
CommandButton10.Visible = True
Else
CommandButton10.Visible = False
End If
If [C13] <> "" Then
CommandButton11.Visible = True
Else
CommandButton11.Visible = False
End If
If [C14] <> "" Then
CommandButton12.Visible = True
Else
CommandButton12.Visible = False
End If
If [C15] <> "" Then
CommandButton13.Visible = True
Else
CommandButton13.Visible = False
End If
If [C16] <> "" Then
CommandButton14.Visible = True
Else
CommandButton14.Visible = False
End If
If [C17] <> "" Then
CommandButton15.Visible = True
Else
CommandButton15.Visible = False
End If
End Sub
複製代碼
作者:
Hsieh
時間:
2012-1-24 22:20
回復
1#
dino1978
這問題在於程式碼是控制工作表內的按鈕顯示情形
若是每個工作表的按鈕名稱不同,那就無法使用此程式碼修改
所以,你這樣的問題必須確認每個工作表的按鈕名稱是否相同
再來就是你驅動巨集的方式為何?在一般模組內要執行程式,可使用快速鍵或按鈕等方法
所以執行程式的方法也會影響程式的撰寫
建議您上傳檔案看看
作者:
GBKEE
時間:
2012-1-26 08:36
回復
1#
dino1978
必須是每個工作表都有CommandButton2 - CommandButton18的控制項
Option Explicit
Sub RemoveButton()
Dim I As Integer
With ActiveSheet
For I = 3 To 17
If .Cells(I, "C") <> "" Then
.OLEObjects("CommandButton" & I - 2).Visible = True
Else
.OLEObjects("CommandButton" & I - 2).Visible = False
End If
Next
End With
End Sub
複製代碼
作者:
dino1978
時間:
2012-1-27 06:31
[attach]9315[/attach]
回復
2#
Hsieh
超版大大, 很抱歉這麼晚才回覆您, 我的附檔如附件, 已參照GBKEE大大的指令稍作修改完成, 謝謝您的協助
回復
3#
GBKEE
GBKEE 版大, 謝謝您的幫忙, 程式照您的方法稍作修改已經可以使用 謝謝
並祝你們新春愉快!!
作者:
GBKEE
時間:
2012-1-27 07:16
回復
4#
dino1978
還有可簡化
Private Sub CommandButton10_Click()
ASlotRemove [C12] '傳送參數MyText : [C12]
End Sub
Private Sub CommandButton11_Click()
ASlotRemove [C13] '傳送參數MyText : [C13]
End Sub
Private Sub CommandButton12_Click()
ASlotRemove [C14] '傳送參數MyText : [C14]
End Sub
複製代碼
Sub SlotRemove(ByVal MyText As Range) '接收參數 MyText
Application.ScreenUpdating = False
Dim Rng As Range, F_Address As String, TheFind As String, a As Range
'MyText = [C12] ' Trim(InputBox("請輸入要尋找的值:"))
If MyText <> "" Then
Set Rng = Sheet3.Range("A1").CurrentRegion.EntireColumn.Find(MyText, lookat:=xlWhole)
If Not Rng Is Nothing Then
F_Address = Rng.Address
Do
TheFind = IIf(TheFind = "", Rng.Address(0, 0), TheFind & " " & Rng.Address(0, 0))
Set Rng = Sheet3.Range("A1").CurrentRegion.EntireColumn.FindNext(Rng)
Loop Until F_Address = Rng.Address
End If
Else: GoTo err2
End If
If TheFind <> "" Then
If Rng Is Nothing Then
GoTo err
Else
Sheet2.Range("A65536").End(xlUp).Offset(1) = Rng
With Rng.Resize(1, 3)
.Delete xlShiftUp
End With
With Range("B12")
.Resize(1, 2).ClearContents
.ClearContents
.Offset(, 1).Validation.Delete
End With
End If
Else
err:
MsgBox "沒有找到 " & MyText
err2:
End If
TheFind = ""
Application.ScreenUpdating = True
End Sub
複製代碼
作者:
dino1978
時間:
2012-1-28 06:03
本帖最後由 dino1978 於 2012-1-28 06:04 編輯
回復
5#
GBKEE
GBKEE版大,
原來還有這招可以用, 真的是學到了
不過我將該程式碼應用在上面的時候, 發生如下圖的錯誤訊息,
看了老半天還是不知道問題出在哪, 我並沒有動到其他的欄位
但執行後就出現了這個錯誤訊息, 再請您幫我確認一下, 謝謝您
(若改回原來的方式, 就不會出現這個問題了, 不太理解.....)
[attach]9323[/attach][attach]9324[/attach]
作者:
GBKEE
時間:
2012-1-28 08:22
回復
6#
dino1978
請上傳你修改後的檔案看看
作者:
dino1978
時間:
2012-1-28 17:31
回復
7#
GBKEE
GBKEE 版大
不好意思, 我太豬頭了, 我忘了將舊的模組移除造成衝突, 現在問題已經解決了
太感謝您了~整個看起來就清爽多了!!
另外想請教的是 CheckBox 控制項是否也能夠像 CommandButton一樣用 OLEobjects的方式來做Loop呢?
我有自己小試了一下, 會出現 "物件不支援此屬性或方法"
是我的語法錯誤還是CheckBox控制項不能這樣使用?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
i = 1
With Sheet1
.OLEObjects("CheckBox" & i).Value = False
End With
End Sub
複製代碼
作者:
GBKEE
時間:
2012-1-28 18:41
回復
8#
dino1978
.OLEObjects("CheckBox" & i).
Value
= False
改成
.OLEObjects("CheckBox" & i).
Visible
= False
作者:
dino1978
時間:
2012-1-28 19:16
回復
9#
GBKEE
GBKEE 版大,
我的意思是, 我想在Workbook開啟後, 自動將所有的CheckBox控制項取消核取,
所以我才會把程式改成 .Value=False, 不知這樣可不可行嗎?
作者:
GBKEE
時間:
2012-1-28 19:53
回復
10#
dino1978
OLEObjects("CheckBox" & i).Object.Value = False
作者:
dino1978
時間:
2012-1-28 20:03
回復
11#
GBKEE
GBKEE版大,
真的太感謝您了, 您真的是神人
謝謝!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)